Add docs for 1.17.0 RC2
diff --git a/docs/rc/apsp_8sql__in.html b/docs/rc/apsp_8sql__in.html
new file mode 100644
index 0000000..bb8c8ca
--- /dev/null
+++ b/docs/rc/apsp_8sql__in.html
@@ -0,0 +1,328 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: apsp.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('apsp_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">apsp.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>SQL functions for graph analytics.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ad68f09e5e53e08e36e1a35078ff557db"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="apsp_8sql__in.html#ad68f09e5e53e08e36e1a35078ff557db">graph_apsp</a> (text vertex_table, text vertex_id, text edge_table, text edge_args, text out_table, text grouping_cols)</td></tr>
+<tr class="separator:ad68f09e5e53e08e36e1a35078ff557db"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae96a0c74959a789f8a1497167b75431e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="apsp_8sql__in.html#ae96a0c74959a789f8a1497167b75431e">graph_apsp</a> (text vertex_table, text vertex_id, text edge_table, text edge_args, text out_table)</td></tr>
+<tr class="separator:ae96a0c74959a789f8a1497167b75431e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aac90be82123f8e2029d4579a6f4f52f1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="apsp_8sql__in.html#aac90be82123f8e2029d4579a6f4f52f1">graph_apsp_get_path</a> (text apsp_table, bigint source_vertex, bigint dest_vertex, text path_table)</td></tr>
+<tr class="separator:aac90be82123f8e2029d4579a6f4f52f1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1fa9c66ee7eed15a997fb590bee6e8bf"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="apsp_8sql__in.html#a1fa9c66ee7eed15a997fb590bee6e8bf">graph_apsp</a> (varchar message)</td></tr>
+<tr class="separator:a1fa9c66ee7eed15a997fb590bee6e8bf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af271eb7d4c7f8d8d4c3a20873af99c6f"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="apsp_8sql__in.html#af271eb7d4c7f8d8d4c3a20873af99c6f">graph_apsp</a> ()</td></tr>
+<tr class="separator:af271eb7d4c7f8d8d4c3a20873af99c6f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>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</p>
+<p><a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a></p>
+<p>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.</p>
+<dl class="section date"><dt>Date</dt><dd>Nov 2016</dd></dl>
+<dl class="section see"><dt>See also</dt><dd>Provides all pairs shortest <a class="el" href="path_8sql__in.html#af5842a2917fdea02cca12c8104bff022">path</a> algorithm. </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="ad68f09e5e53e08e36e1a35078ff557db"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad68f09e5e53e08e36e1a35078ff557db">&#9670;&nbsp;</a></span>graph_apsp() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void graph_apsp </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>vertex_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>vertex_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>edge_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>edge_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae96a0c74959a789f8a1497167b75431e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae96a0c74959a789f8a1497167b75431e">&#9670;&nbsp;</a></span>graph_apsp() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void graph_apsp </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>vertex_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>vertex_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>edge_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>edge_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1fa9c66ee7eed15a997fb590bee6e8bf"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1fa9c66ee7eed15a997fb590bee6e8bf">&#9670;&nbsp;</a></span>graph_apsp() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar graph_apsp </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="af271eb7d4c7f8d8d4c3a20873af99c6f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af271eb7d4c7f8d8d4c3a20873af99c6f">&#9670;&nbsp;</a></span>graph_apsp() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar graph_apsp </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aac90be82123f8e2029d4579a6f4f52f1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aac90be82123f8e2029d4579a6f4f52f1">&#9670;&nbsp;</a></span>graph_apsp_get_path()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void graph_apsp_get_path </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>apsp_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bigint&#160;</td>
+          <td class="paramname"><em>source_vertex</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bigint&#160;</td>
+          <td class="paramname"><em>dest_vertex</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>path_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_1c3de670490e30b2adf792227ef51e32.html">graph</a></li><li class="navelem"><a class="el" href="apsp_8sql__in.html">apsp.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:56 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/arima_8sql__in.html b/docs/rc/arima_8sql__in.html
new file mode 100644
index 0000000..996acd1
--- /dev/null
+++ b/docs/rc/arima_8sql__in.html
@@ -0,0 +1,1063 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: arima.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('arima_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">arima.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Arima function for forecasting of timeseries data.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a9af899e0260745b75b1872159fea1281"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="arima_8sql__in.html#a9af899e0260745b75b1872159fea1281">arima_train</a> (text input_table, text output_table, text timestamp_column, text timeseries_column, text grouping_columns, boolean include_mean, integer[] non_seasonal_orders, text optimizer_params)</td></tr>
+<tr class="separator:a9af899e0260745b75b1872159fea1281"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac5b071de3f011a05b877afd6a415f993"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="arima_8sql__in.html#ac5b071de3f011a05b877afd6a415f993">arima_train</a> (text input_table, text output_table, text timestamp_column, text timeseries_column, text grouping_columns, boolean include_mean, integer[] non_seasonal_orders)</td></tr>
+<tr class="separator:ac5b071de3f011a05b877afd6a415f993"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac4d148eefd1d5fbf4e613d5f10df4930"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="arima_8sql__in.html#ac4d148eefd1d5fbf4e613d5f10df4930">arima_train</a> (text input_table, text output_table, text timestamp_column, text timeseries_column, text grouping_columns, boolean include_mean)</td></tr>
+<tr class="separator:ac4d148eefd1d5fbf4e613d5f10df4930"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a47977919832510a148d237b11688aee6"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="arima_8sql__in.html#a47977919832510a148d237b11688aee6">arima_train</a> (text input_table, text output_table, text timestamp_column, text timeseries_column, text grouping_columns)</td></tr>
+<tr class="separator:a47977919832510a148d237b11688aee6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1842458490b5b3a3a80d9663792c5e48"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="arima_8sql__in.html#a1842458490b5b3a3a80d9663792c5e48">arima_train</a> (text input_table, text output_table, text timestamp_column, text timeseries_column)</td></tr>
+<tr class="separator:a1842458490b5b3a3a80d9663792c5e48"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a52416f13110c15b6b7fe8736a4eb0202"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="arima_8sql__in.html#a52416f13110c15b6b7fe8736a4eb0202">arima_forecast</a> (text model_table, text output_table, integer steps_ahead)</td></tr>
+<tr class="separator:a52416f13110c15b6b7fe8736a4eb0202"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a97025971eb41b5480e279e8b56d5c018"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="arima_8sql__in.html#a97025971eb41b5480e279e8b56d5c018">arima_train</a> (text message)</td></tr>
+<tr class="separator:a97025971eb41b5480e279e8b56d5c018"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a71f407786355a4226ff44a94b6c80589"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="arima_8sql__in.html#a71f407786355a4226ff44a94b6c80589">arima_train</a> ()</td></tr>
+<tr class="separator:a71f407786355a4226ff44a94b6c80589"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ada9e8962693411ec919953bad1ef6007"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="arima_8sql__in.html#ada9e8962693411ec919953bad1ef6007">arima_forecast</a> (text message)</td></tr>
+<tr class="separator:ada9e8962693411ec919953bad1ef6007"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a08645edc97c591bce174964ac309a3a0"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="arima_8sql__in.html#a08645edc97c591bce174964ac309a3a0">arima_forecast</a> ()</td></tr>
+<tr class="separator:a08645edc97c591bce174964ac309a3a0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6955c191d95e1531655cea4617caf12c"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="arima_8sql__in.html#a6955c191d95e1531655cea4617caf12c">__arima_residual</a> (integer distid, float8[] tvals, integer p, integer d, integer q, float8[] phi, float8[] theta, float8 <a class="el" href="svec__util_8sql__in.html#a546b947319c9f48237120a31929bdfd9">mean</a>, float8[] prez)</td></tr>
+<tr class="separator:a6955c191d95e1531655cea4617caf12c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab686e554403a61a5404d83e692735ada"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="arima_8sql__in.html#ab686e554403a61a5404d83e692735ada">__arima_diff</a> (float8[] tvals, integer d)</td></tr>
+<tr class="separator:ab686e554403a61a5404d83e692735ada"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af6f5621d79045e8270e6785ed0d98ce3"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="arima_8sql__in.html#af6f5621d79045e8270e6785ed0d98ce3">__arima_adjust</a> (integer distid, float8[] curr_tvals, float8[] prev_tvals, integer p)</td></tr>
+<tr class="separator:af6f5621d79045e8270e6785ed0d98ce3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6a728067ea53fcb8fcbf66bbe296a783"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="arima_8sql__in.html#a6a728067ea53fcb8fcbf66bbe296a783">__arima_lm_delta</a> (float8[] jj, float8[] jz, float8 u)</td></tr>
+<tr class="separator:a6a728067ea53fcb8fcbf66bbe296a783"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aadd3c7627043810a7e650e80b7fafd52"><td class="memItemLeft" align="right" valign="top">__arima_lm_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="arima_8sql__in.html#aadd3c7627043810a7e650e80b7fafd52">__arima_lm</a> (integer distid, float8[] tvals, integer p, integer q, float8[] phi, float8[] theta, float8 <a class="el" href="svec__util_8sql__in.html#a546b947319c9f48237120a31929bdfd9">mean</a>, float8[] prez, float8[] prej)</td></tr>
+<tr class="separator:aadd3c7627043810a7e650e80b7fafd52"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa919ba0d4fe79c3b55ee60b7ad17c7de"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="arima_8sql__in.html#aa919ba0d4fe79c3b55ee60b7ad17c7de">__arima_lm_result_sfunc</a> (float8[] state_data, float8[] jj, float8[] jz, float8 z2)</td></tr>
+<tr class="separator:aa919ba0d4fe79c3b55ee60b7ad17c7de"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a76b2c9d653383c81acde8383bb29aa97"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="arima_8sql__in.html#a76b2c9d653383c81acde8383bb29aa97">__arima_lm_result_pfunc</a> (float8[] state1, float8[] state2)</td></tr>
+<tr class="separator:a76b2c9d653383c81acde8383bb29aa97"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afd8e1b6c57007a47ba64b22718d4e26f"><td class="memItemLeft" align="right" valign="top">__arima_lm_sum_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="arima_8sql__in.html#afd8e1b6c57007a47ba64b22718d4e26f">__arima_lm_result_ffunc</a> (float8[] state_data)</td></tr>
+<tr class="separator:afd8e1b6c57007a47ba64b22718d4e26f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:addf886fb09f74d10dfd1875c641d814b"><td class="memItemLeft" align="right" valign="top">aggregate __arima_lm_sum_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="arima_8sql__in.html#addf886fb09f74d10dfd1875c641d814b">__arima_lm_result_agg</a> (float8[], float8[], float8)</td></tr>
+<tr class="separator:addf886fb09f74d10dfd1875c641d814b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a884a57ef18bd9e1a1b4137269786bf19"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="arima_8sql__in.html#a884a57ef18bd9e1a1b4137269786bf19">__arima_lm_stat_sfunc</a> (float8[] state_data, integer distid, float8[] tvals, integer p, integer q, float8[] phi, float8[] theta, float8 <a class="el" href="svec__util_8sql__in.html#a546b947319c9f48237120a31929bdfd9">mean</a>, float8 delta)</td></tr>
+<tr class="separator:a884a57ef18bd9e1a1b4137269786bf19"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abb44a6b3bf206e966a9746dde942ddc3"><td class="memItemLeft" align="right" valign="top">__arima_lm_stat_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="arima_8sql__in.html#abb44a6b3bf206e966a9746dde942ddc3">__arima_lm_stat_ffunc</a> (float8[] state_data)</td></tr>
+<tr class="separator:abb44a6b3bf206e966a9746dde942ddc3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae9b8675db85344ac26484f8c125f57b6"><td class="memItemLeft" align="right" valign="top">aggregate __arima_lm_stat_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="arima_8sql__in.html#ae9b8675db85344ac26484f8c125f57b6">__arima_lm_stat_agg</a> (integer, float8[], integer, integer, float8[], float8[], float8, float8)</td></tr>
+<tr class="separator:ae9b8675db85344ac26484f8c125f57b6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><dl class="section date"><dt>Date</dt><dd>August 2013 </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="af6f5621d79045e8270e6785ed0d98ce3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af6f5621d79045e8270e6785ed0d98ce3">&#9670;&nbsp;</a></span>__arima_adjust()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __arima_adjust </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>distid</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>curr_tvals</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>prev_tvals</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>p</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab686e554403a61a5404d83e692735ada"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab686e554403a61a5404d83e692735ada">&#9670;&nbsp;</a></span>__arima_diff()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __arima_diff </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>tvals</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>d</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aadd3c7627043810a7e650e80b7fafd52"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aadd3c7627043810a7e650e80b7fafd52">&#9670;&nbsp;</a></span>__arima_lm()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">__arima_lm_result __arima_lm </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>distid</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>tvals</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>p</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>q</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>phi</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>theta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>mean</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>prez</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>prej</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a6a728067ea53fcb8fcbf66bbe296a783"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6a728067ea53fcb8fcbf66bbe296a783">&#9670;&nbsp;</a></span>__arima_lm_delta()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __arima_lm_delta </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>jj</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>jz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>u</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="addf886fb09f74d10dfd1875c641d814b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#addf886fb09f74d10dfd1875c641d814b">&#9670;&nbsp;</a></span>__arima_lm_result_agg()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate __arima_lm_sum_result __arima_lm_result_agg </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="afd8e1b6c57007a47ba64b22718d4e26f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afd8e1b6c57007a47ba64b22718d4e26f">&#9670;&nbsp;</a></span>__arima_lm_result_ffunc()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">__arima_lm_sum_result __arima_lm_result_ffunc </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state_data</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a76b2c9d653383c81acde8383bb29aa97"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a76b2c9d653383c81acde8383bb29aa97">&#9670;&nbsp;</a></span>__arima_lm_result_pfunc()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __arima_lm_result_pfunc </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa919ba0d4fe79c3b55ee60b7ad17c7de"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa919ba0d4fe79c3b55ee60b7ad17c7de">&#9670;&nbsp;</a></span>__arima_lm_result_sfunc()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __arima_lm_result_sfunc </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state_data</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>jj</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>jz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>z2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae9b8675db85344ac26484f8c125f57b6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae9b8675db85344ac26484f8c125f57b6">&#9670;&nbsp;</a></span>__arima_lm_stat_agg()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate __arima_lm_stat_result __arima_lm_stat_agg </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="abb44a6b3bf206e966a9746dde942ddc3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abb44a6b3bf206e966a9746dde942ddc3">&#9670;&nbsp;</a></span>__arima_lm_stat_ffunc()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">__arima_lm_stat_result __arima_lm_stat_ffunc </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state_data</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a884a57ef18bd9e1a1b4137269786bf19"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a884a57ef18bd9e1a1b4137269786bf19">&#9670;&nbsp;</a></span>__arima_lm_stat_sfunc()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __arima_lm_stat_sfunc </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state_data</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>distid</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>tvals</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>p</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>q</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>phi</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>theta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>mean</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>delta</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a6955c191d95e1531655cea4617caf12c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6955c191d95e1531655cea4617caf12c">&#9670;&nbsp;</a></span>__arima_residual()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __arima_residual </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>distid</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>tvals</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>p</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>d</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>q</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>phi</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>theta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>mean</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>prez</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a52416f13110c15b6b7fe8736a4eb0202"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a52416f13110c15b6b7fe8736a4eb0202">&#9670;&nbsp;</a></span>arima_forecast() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void arima_forecast </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>steps_ahead</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ada9e8962693411ec919953bad1ef6007"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ada9e8962693411ec919953bad1ef6007">&#9670;&nbsp;</a></span>arima_forecast() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text arima_forecast </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a08645edc97c591bce174964ac309a3a0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a08645edc97c591bce174964ac309a3a0">&#9670;&nbsp;</a></span>arima_forecast() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text arima_forecast </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a9af899e0260745b75b1872159fea1281"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9af899e0260745b75b1872159fea1281">&#9670;&nbsp;</a></span>arima_train() <span class="overload">[1/7]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void arima_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>input_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>timestamp_column</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>timeseries_column</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_columns</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>include_mean</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>non_seasonal_orders</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>optimizer_params</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac5b071de3f011a05b877afd6a415f993"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac5b071de3f011a05b877afd6a415f993">&#9670;&nbsp;</a></span>arima_train() <span class="overload">[2/7]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void arima_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>input_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>timestamp_column</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>timeseries_column</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_columns</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>include_mean</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>non_seasonal_orders</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac4d148eefd1d5fbf4e613d5f10df4930"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac4d148eefd1d5fbf4e613d5f10df4930">&#9670;&nbsp;</a></span>arima_train() <span class="overload">[3/7]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void arima_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>input_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>timestamp_column</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>timeseries_column</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_columns</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>include_mean</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a47977919832510a148d237b11688aee6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a47977919832510a148d237b11688aee6">&#9670;&nbsp;</a></span>arima_train() <span class="overload">[4/7]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void arima_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>input_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>timestamp_column</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>timeseries_column</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_columns</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1842458490b5b3a3a80d9663792c5e48"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1842458490b5b3a3a80d9663792c5e48">&#9670;&nbsp;</a></span>arima_train() <span class="overload">[5/7]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void arima_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>input_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>timestamp_column</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>timeseries_column</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a97025971eb41b5480e279e8b56d5c018"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a97025971eb41b5480e279e8b56d5c018">&#9670;&nbsp;</a></span>arima_train() <span class="overload">[6/7]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text arima_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a71f407786355a4226ff44a94b6c80589"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a71f407786355a4226ff44a94b6c80589">&#9670;&nbsp;</a></span>arima_train() <span class="overload">[7/7]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text arima_train </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_8cdb0d06bc3d9fdbe366fbcc82abc3e3.html">tsa</a></li><li class="navelem"><a class="el" href="arima_8sql__in.html">arima.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:56 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/array__ops_8sql__in.html b/docs/rc/array__ops_8sql__in.html
new file mode 100644
index 0000000..5acb739
--- /dev/null
+++ b/docs/rc/array__ops_8sql__in.html
@@ -0,0 +1,1287 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: array_ops.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('array__ops_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">array_ops.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>implementation of array operations in SQL  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a91c8d3715142927b3967f05a4fbf1575"><td class="memItemLeft" align="right" valign="top">anyarray&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="array__ops_8sql__in.html#a91c8d3715142927b3967f05a4fbf1575">array_add</a> (anyarray x, anyarray y)</td></tr>
+<tr class="memdesc:a91c8d3715142927b3967f05a4fbf1575"><td class="mdescLeft">&#160;</td><td class="mdescRight">Adds two arrays. It requires that all the values are NON-NULL. Return type is the same as the input type.  <a href="#a91c8d3715142927b3967f05a4fbf1575">More...</a><br /></td></tr>
+<tr class="separator:a91c8d3715142927b3967f05a4fbf1575"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a26e8508a2bae10a6574cec697a270eea"><td class="memItemLeft" align="right" valign="top">aggregate anyarray&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="array__ops_8sql__in.html#a26e8508a2bae10a6574cec697a270eea">sum</a> (anyarray)</td></tr>
+<tr class="memdesc:a26e8508a2bae10a6574cec697a270eea"><td class="mdescLeft">&#160;</td><td class="mdescRight">Aggregate, element-wise sum of arrays. It requires that all the values are NON-NULL. Return type is the same as the input type.  <a href="#a26e8508a2bae10a6574cec697a270eea">More...</a><br /></td></tr>
+<tr class="separator:a26e8508a2bae10a6574cec697a270eea"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2875a161a01c7dcdea9a4997b074eefc"><td class="memItemLeft" align="right" valign="top">anyarray&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="array__ops_8sql__in.html#a2875a161a01c7dcdea9a4997b074eefc">array_sub</a> (anyarray x, anyarray y)</td></tr>
+<tr class="memdesc:a2875a161a01c7dcdea9a4997b074eefc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Subtracts two arrays. It requires that all the values are NON-NULL. Return type is the same as the input type.  <a href="#a2875a161a01c7dcdea9a4997b074eefc">More...</a><br /></td></tr>
+<tr class="separator:a2875a161a01c7dcdea9a4997b074eefc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a652d70c480d484c4a1a92ded384b0dd7"><td class="memItemLeft" align="right" valign="top">anyarray&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="array__ops_8sql__in.html#a652d70c480d484c4a1a92ded384b0dd7">array_mult</a> (anyarray x, anyarray y)</td></tr>
+<tr class="memdesc:a652d70c480d484c4a1a92ded384b0dd7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Element-wise product of two arrays. It requires that all the values are NON-NULL. Return type is the same as the input type.  <a href="#a652d70c480d484c4a1a92ded384b0dd7">More...</a><br /></td></tr>
+<tr class="separator:a652d70c480d484c4a1a92ded384b0dd7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6cc05e7052495f8b64692faf40219576"><td class="memItemLeft" align="right" valign="top">anyarray&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="array__ops_8sql__in.html#a6cc05e7052495f8b64692faf40219576">array_div</a> (anyarray x, anyarray y)</td></tr>
+<tr class="memdesc:a6cc05e7052495f8b64692faf40219576"><td class="mdescLeft">&#160;</td><td class="mdescRight">Element-wise division of two arrays. It requires that all the values are NON-NULL. Return type is the same as the input type.  <a href="#a6cc05e7052495f8b64692faf40219576">More...</a><br /></td></tr>
+<tr class="separator:a6cc05e7052495f8b64692faf40219576"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acde10964ed23b7c8da515fb84cb8d5e0"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="array__ops_8sql__in.html#acde10964ed23b7c8da515fb84cb8d5e0">array_dot</a> (anyarray x, anyarray y)</td></tr>
+<tr class="memdesc:acde10964ed23b7c8da515fb84cb8d5e0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Dot-product of two arrays. It requires that all the values are NON-NULL. Return type is the same as the input type.  <a href="#acde10964ed23b7c8da515fb84cb8d5e0">More...</a><br /></td></tr>
+<tr class="separator:acde10964ed23b7c8da515fb84cb8d5e0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aedf6cb13eb4803bcc12dc4d95ea8ff4e"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="array__ops_8sql__in.html#aedf6cb13eb4803bcc12dc4d95ea8ff4e">array_contains</a> (anyarray x, anyarray y)</td></tr>
+<tr class="memdesc:aedf6cb13eb4803bcc12dc4d95ea8ff4e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks whether one array contains the other. This function returns TRUE if each non-zero element in the right array equals to the element with the same index in the left array.  <a href="#aedf6cb13eb4803bcc12dc4d95ea8ff4e">More...</a><br /></td></tr>
+<tr class="separator:aedf6cb13eb4803bcc12dc4d95ea8ff4e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae891429cc50705c530f3e5ca15541849"><td class="memItemLeft" align="right" valign="top">anyelement&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="array__ops_8sql__in.html#ae891429cc50705c530f3e5ca15541849">array_max</a> (anyarray x)</td></tr>
+<tr class="memdesc:ae891429cc50705c530f3e5ca15541849"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function finds the maximum value in the array. NULLs are ignored. Return type is the same as the input type.  <a href="#ae891429cc50705c530f3e5ca15541849">More...</a><br /></td></tr>
+<tr class="separator:ae891429cc50705c530f3e5ca15541849"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa415256a9064aecc600dfb5e377fb7b1"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="array__ops_8sql__in.html#aa415256a9064aecc600dfb5e377fb7b1">array_max_index</a> (anyarray x)</td></tr>
+<tr class="memdesc:aa415256a9064aecc600dfb5e377fb7b1"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function finds the maximum value and corresponding index in the array. NULLs are ignored. Return type is the same as the input type.  <a href="#aa415256a9064aecc600dfb5e377fb7b1">More...</a><br /></td></tr>
+<tr class="separator:aa415256a9064aecc600dfb5e377fb7b1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6659bf9d9363eb179fab34f81f8ac59b"><td class="memItemLeft" align="right" valign="top">anyelement&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="array__ops_8sql__in.html#a6659bf9d9363eb179fab34f81f8ac59b">array_min</a> (anyarray x)</td></tr>
+<tr class="memdesc:a6659bf9d9363eb179fab34f81f8ac59b"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function finds the minimum value in the array. NULLs are ignored. Return type is the same as the input type.  <a href="#a6659bf9d9363eb179fab34f81f8ac59b">More...</a><br /></td></tr>
+<tr class="separator:a6659bf9d9363eb179fab34f81f8ac59b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a813a4d9ffc1c18b1b3e18f6ecdb2051f"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="array__ops_8sql__in.html#a813a4d9ffc1c18b1b3e18f6ecdb2051f">array_min_index</a> (anyarray x)</td></tr>
+<tr class="memdesc:a813a4d9ffc1c18b1b3e18f6ecdb2051f"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function finds the minimum value and corresponding index in the array. NULLs are ignored. Return type is the same as the input type.  <a href="#a813a4d9ffc1c18b1b3e18f6ecdb2051f">More...</a><br /></td></tr>
+<tr class="separator:a813a4d9ffc1c18b1b3e18f6ecdb2051f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4c98f20e6a737358806f63318daea5ec"><td class="memItemLeft" align="right" valign="top">anyelement&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="array__ops_8sql__in.html#a4c98f20e6a737358806f63318daea5ec">array_sum</a> (anyarray x)</td></tr>
+<tr class="memdesc:a4c98f20e6a737358806f63318daea5ec"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function finds the sum of the values in the array. NULLs are ignored. Return type is the same as the input type.  <a href="#a4c98f20e6a737358806f63318daea5ec">More...</a><br /></td></tr>
+<tr class="separator:a4c98f20e6a737358806f63318daea5ec"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a418de59800833aa95f9b7cbd6b12901c"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="array__ops_8sql__in.html#a418de59800833aa95f9b7cbd6b12901c">array_sum_big</a> (anyarray x)</td></tr>
+<tr class="memdesc:a418de59800833aa95f9b7cbd6b12901c"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function finds the sum of the values in the array. NULLs are ignored. Return type is always FLOAT8 regardless of input. This function is meant to replace <a class="el" href="array__ops_8sql__in.html#a4c98f20e6a737358806f63318daea5ec" title="This function finds the sum of the values in the array. NULLs are ignored. Return type is the same as...">array_sum()</a> in the cases when sum may overflow the element type.  <a href="#a418de59800833aa95f9b7cbd6b12901c">More...</a><br /></td></tr>
+<tr class="separator:a418de59800833aa95f9b7cbd6b12901c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a13c0b0c53e8b0dc4e08c21bb8152ee7d"><td class="memItemLeft" align="right" valign="top">anyelement&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="array__ops_8sql__in.html#a13c0b0c53e8b0dc4e08c21bb8152ee7d">array_abs_sum</a> (anyarray x)</td></tr>
+<tr class="memdesc:a13c0b0c53e8b0dc4e08c21bb8152ee7d"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function finds the sum of abs of the values in the array. NULLs are ignored. Return type is the same as the input type.  <a href="#a13c0b0c53e8b0dc4e08c21bb8152ee7d">More...</a><br /></td></tr>
+<tr class="separator:a13c0b0c53e8b0dc4e08c21bb8152ee7d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac14e74c10b58f5518cd0e3e56067e5ba"><td class="memItemLeft" align="right" valign="top">anyarray&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="array__ops_8sql__in.html#ac14e74c10b58f5518cd0e3e56067e5ba">array_abs</a> (anyarray x)</td></tr>
+<tr class="memdesc:ac14e74c10b58f5518cd0e3e56067e5ba"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function takes an array as the input and finds absolute value of each element in the array, returning the resulting array. It requires that all the values are NON-NULL.  <a href="#ac14e74c10b58f5518cd0e3e56067e5ba">More...</a><br /></td></tr>
+<tr class="separator:ac14e74c10b58f5518cd0e3e56067e5ba"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a407598f9eb70637798b02fd731bfca2c"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="array__ops_8sql__in.html#a407598f9eb70637798b02fd731bfca2c">array_mean</a> (anyarray x)</td></tr>
+<tr class="memdesc:a407598f9eb70637798b02fd731bfca2c"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function finds the mean of the values in the array. NULLs are ignored.  <a href="#a407598f9eb70637798b02fd731bfca2c">More...</a><br /></td></tr>
+<tr class="separator:a407598f9eb70637798b02fd731bfca2c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3b6c2d173a611e6d6b184d825c2b336d"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="array__ops_8sql__in.html#a3b6c2d173a611e6d6b184d825c2b336d">array_stddev</a> (anyarray x)</td></tr>
+<tr class="memdesc:a3b6c2d173a611e6d6b184d825c2b336d"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function finds the standard deviation of the values in the array. NULLs are ignored.  <a href="#a3b6c2d173a611e6d6b184d825c2b336d">More...</a><br /></td></tr>
+<tr class="separator:a3b6c2d173a611e6d6b184d825c2b336d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab066e65a41db78b00b4532996b2a6efc"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="array__ops_8sql__in.html#ab066e65a41db78b00b4532996b2a6efc">array_of_float</a> (integer k)</td></tr>
+<tr class="memdesc:ab066e65a41db78b00b4532996b2a6efc"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function creates an array of set size (the argument value) of FLOAT8, initializing the values to 0.0;.  <a href="#ab066e65a41db78b00b4532996b2a6efc">More...</a><br /></td></tr>
+<tr class="separator:ab066e65a41db78b00b4532996b2a6efc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab7d8550e66d2e0bd54b8f0997d93880c"><td class="memItemLeft" align="right" valign="top">bigint []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="array__ops_8sql__in.html#ab7d8550e66d2e0bd54b8f0997d93880c">array_of_bigint</a> (integer k)</td></tr>
+<tr class="memdesc:ab7d8550e66d2e0bd54b8f0997d93880c"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function creates an array of set size (the argument value) of BIGINT, initializing the values to 0;.  <a href="#ab7d8550e66d2e0bd54b8f0997d93880c">More...</a><br /></td></tr>
+<tr class="separator:ab7d8550e66d2e0bd54b8f0997d93880c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a065a5323f3b742be47e39ad8b4c90fc2"><td class="memItemLeft" align="right" valign="top">anyarray&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="array__ops_8sql__in.html#a065a5323f3b742be47e39ad8b4c90fc2">array_fill</a> (anyarray x, anyelement k)</td></tr>
+<tr class="memdesc:a065a5323f3b742be47e39ad8b4c90fc2"><td class="mdescLeft">&#160;</td><td class="mdescRight">This functions set every values in the array to some desired value (provided as the argument).  <a href="#a065a5323f3b742be47e39ad8b4c90fc2">More...</a><br /></td></tr>
+<tr class="separator:a065a5323f3b742be47e39ad8b4c90fc2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8855869bb9f124c3ff5b10041988610c"><td class="memItemLeft" align="right" valign="top">anyarray&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="array__ops_8sql__in.html#a8855869bb9f124c3ff5b10041988610c">array_cos</a> (anyarray x)</td></tr>
+<tr class="memdesc:a8855869bb9f124c3ff5b10041988610c"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function takes an array as the input and apply cos function element-wise, returning the resulting array. It requires that all the values are NON-NULL. Return type is the same as the input type.  <a href="#a8855869bb9f124c3ff5b10041988610c">More...</a><br /></td></tr>
+<tr class="separator:a8855869bb9f124c3ff5b10041988610c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae6881cc5c86941b6ffca35d7f3cd5c12"><td class="memItemLeft" align="right" valign="top">anyarray&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="array__ops_8sql__in.html#ae6881cc5c86941b6ffca35d7f3cd5c12">array_scalar_mult</a> (anyarray x, anyelement k)</td></tr>
+<tr class="memdesc:ae6881cc5c86941b6ffca35d7f3cd5c12"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function takes an array as the input and executes element-wise multiplication by the scalar provided as the second argument, returning the resulting array. It requires that all the values are NON-NULL. Return type is the same as the input type.  <a href="#ae6881cc5c86941b6ffca35d7f3cd5c12">More...</a><br /></td></tr>
+<tr class="separator:ae6881cc5c86941b6ffca35d7f3cd5c12"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0b6ffe59b12c3dee076c3059f9ab363f"><td class="memItemLeft" align="right" valign="top">anyarray&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="array__ops_8sql__in.html#a0b6ffe59b12c3dee076c3059f9ab363f">array_scalar_add</a> (anyarray x, anyelement k)</td></tr>
+<tr class="memdesc:a0b6ffe59b12c3dee076c3059f9ab363f"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function takes an array as the input and executes element-wise addition by the scalar provided as the second argument, returning the resulting array. It requires that all the values are NON-NULL. Return type is the same as the input type.  <a href="#a0b6ffe59b12c3dee076c3059f9ab363f">More...</a><br /></td></tr>
+<tr class="separator:a0b6ffe59b12c3dee076c3059f9ab363f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acc295a568878940ffc3e2c9a75990efb"><td class="memItemLeft" align="right" valign="top">anyarray&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="array__ops_8sql__in.html#acc295a568878940ffc3e2c9a75990efb">array_filter</a> (anyarray x, anyelement k, text op)</td></tr>
+<tr class="memdesc:acc295a568878940ffc3e2c9a75990efb"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function takes an array as the input and keep only elements that satisfy the operator on specified scalar. It requires that all the values are NON-NULL. Return type is the same as the input type.  <a href="#acc295a568878940ffc3e2c9a75990efb">More...</a><br /></td></tr>
+<tr class="separator:acc295a568878940ffc3e2c9a75990efb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0c3c44e81ff158ce8914258aa5604872"><td class="memItemLeft" align="right" valign="top">anyarray&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="array__ops_8sql__in.html#a0c3c44e81ff158ce8914258aa5604872">array_filter</a> (anyarray x, anyelement k)</td></tr>
+<tr class="memdesc:a0c3c44e81ff158ce8914258aa5604872"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function takes an array as the input and removes elements that equal to specified scalar. It requires that all the values are NON-NULL. Return type is the same as the input type.  <a href="#a0c3c44e81ff158ce8914258aa5604872">More...</a><br /></td></tr>
+<tr class="separator:a0c3c44e81ff158ce8914258aa5604872"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac4490f150ecb7aaab0933c223ccde5bd"><td class="memItemLeft" align="right" valign="top">anyarray&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="array__ops_8sql__in.html#ac4490f150ecb7aaab0933c223ccde5bd">array_filter</a> (anyarray x)</td></tr>
+<tr class="memdesc:ac4490f150ecb7aaab0933c223ccde5bd"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function takes an array as the input and removes elements that equal to 0. It requires that all the values are NON-NULL. Return type is the same as the input type.  <a href="#ac4490f150ecb7aaab0933c223ccde5bd">More...</a><br /></td></tr>
+<tr class="separator:ac4490f150ecb7aaab0933c223ccde5bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a83451ed0c3ca5a9c62751dba47e45df7"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="array__ops_8sql__in.html#a83451ed0c3ca5a9c62751dba47e45df7">array_sqrt</a> (anyarray x)</td></tr>
+<tr class="memdesc:a83451ed0c3ca5a9c62751dba47e45df7"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function takes an array as the input and finds square root of each element in the array, returning the resulting array. It requires that all the values are NON-NULL.  <a href="#a83451ed0c3ca5a9c62751dba47e45df7">More...</a><br /></td></tr>
+<tr class="separator:a83451ed0c3ca5a9c62751dba47e45df7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a761e7ca753a5e1acf26896b37ed8b0bd"><td class="memItemLeft" align="right" valign="top">anyarray&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="array__ops_8sql__in.html#a761e7ca753a5e1acf26896b37ed8b0bd">array_pow</a> (anyarray x, anyelement y)</td></tr>
+<tr class="memdesc:a761e7ca753a5e1acf26896b37ed8b0bd"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function takes an array and a float8 as the input and finds power of each element in the array, returning the resulting array. It requires that all the values are NON-NULL.  <a href="#a761e7ca753a5e1acf26896b37ed8b0bd">More...</a><br /></td></tr>
+<tr class="separator:a761e7ca753a5e1acf26896b37ed8b0bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aff60f4091bed6374683f047c8a70ef9a"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="array__ops_8sql__in.html#aff60f4091bed6374683f047c8a70ef9a">array_square</a> (anyarray x)</td></tr>
+<tr class="memdesc:aff60f4091bed6374683f047c8a70ef9a"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function takes an array as the input and finds square of each element in the array, returning the resulting array. It requires that all the values are NON-NULL.  <a href="#aff60f4091bed6374683f047c8a70ef9a">More...</a><br /></td></tr>
+<tr class="separator:aff60f4091bed6374683f047c8a70ef9a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acb57ea4521dcb717f9e3148e0acccc74"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="array__ops_8sql__in.html#acb57ea4521dcb717f9e3148e0acccc74">normalize</a> (anyarray x)</td></tr>
+<tr class="memdesc:acb57ea4521dcb717f9e3148e0acccc74"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function normalizes an array as sum of squares to be 1.  <a href="#acb57ea4521dcb717f9e3148e0acccc74">More...</a><br /></td></tr>
+<tr class="separator:acb57ea4521dcb717f9e3148e0acccc74"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a86e48d6f0ed7572cfc10576a07f84d25"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="array__ops_8sql__in.html#a86e48d6f0ed7572cfc10576a07f84d25">array_contains_null</a> (anyarray x)</td></tr>
+<tr class="memdesc:a86e48d6f0ed7572cfc10576a07f84d25"><td class="mdescLeft">&#160;</td><td class="mdescRight">Function to check if array contains NULL.  <a href="#a86e48d6f0ed7572cfc10576a07f84d25">More...</a><br /></td></tr>
+<tr class="separator:a86e48d6f0ed7572cfc10576a07f84d25"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a819f395ada41a446dd4941f172d0bfef"><td class="memItemLeft" align="right" valign="top">anyarray&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="array__ops_8sql__in.html#a819f395ada41a446dd4941f172d0bfef">array_cum_sum</a> (anyarray x)</td></tr>
+<tr class="memdesc:a819f395ada41a446dd4941f172d0bfef"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function takes an array as the input and computes the cumulative sum with the first element being the same. It requires that all the values are NON-NULL.  <a href="#a819f395ada41a446dd4941f172d0bfef">More...</a><br /></td></tr>
+<tr class="separator:a819f395ada41a446dd4941f172d0bfef"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a69642cec81403897436d3c286bf2b36b"><td class="memItemLeft" align="right" valign="top">anyarray&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="array__ops_8sql__in.html#a69642cec81403897436d3c286bf2b36b">array_cum_prod</a> (anyarray x)</td></tr>
+<tr class="memdesc:a69642cec81403897436d3c286bf2b36b"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function takes an array as the input and computes the cumulative product with the first element being the same. It requires that all the values are NON-NULL.  <a href="#a69642cec81403897436d3c286bf2b36b">More...</a><br /></td></tr>
+<tr class="separator:a69642cec81403897436d3c286bf2b36b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af057b589f2a2cb1095caa99feaeb3d70"><td class="memItemLeft" align="right" valign="top">set&lt; record &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="array__ops_8sql__in.html#af057b589f2a2cb1095caa99feaeb3d70">array_unnest_2d_to_1d</a> (anyarray x, int unnest_row_id, anyarray unnest_result)</td></tr>
+<tr class="memdesc:af057b589f2a2cb1095caa99feaeb3d70"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function takes a 2-D array as the input and unnests it by one level. It returns a set of 1-D arrays that correspond to rows of the input array as well as an ID column containing row positions occupied by those 1-D arrays within the 2-D array (the ID column values start with 1 and not 0)  <a href="#af057b589f2a2cb1095caa99feaeb3d70">More...</a><br /></td></tr>
+<tr class="separator:af057b589f2a2cb1095caa99feaeb3d70"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa86efceb2ac80f621db00844bab77553"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="array__ops_8sql__in.html#aa86efceb2ac80f621db00844bab77553">array_unnest_2d_to_1d</a> ()</td></tr>
+<tr class="separator:aa86efceb2ac80f621db00844bab77553"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae82f5f104ce04c1b0e6cf8dbf9c110ee"><td class="memItemLeft" align="right" valign="top">bytea&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="array__ops_8sql__in.html#ae82f5f104ce04c1b0e6cf8dbf9c110ee">array_to_bytea</a> (anyarray)</td></tr>
+<tr class="separator:ae82f5f104ce04c1b0e6cf8dbf9c110ee"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><dl class="section date"><dt>Date</dt><dd>April 2011 </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="ac14e74c10b58f5518cd0e3e56067e5ba"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac14e74c10b58f5518cd0e3e56067e5ba">&#9670;&nbsp;</a></span>array_abs()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">anyarray array_abs </td>
+          <td>(</td>
+          <td class="paramtype">anyarray&#160;</td>
+          <td class="paramname"><em>x</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Array x </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Absolute value of all elements of x. </dd></dl>
+
+</div>
+</div>
+<a id="a13c0b0c53e8b0dc4e08c21bb8152ee7d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a13c0b0c53e8b0dc4e08c21bb8152ee7d">&#9670;&nbsp;</a></span>array_abs_sum()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">anyelement array_abs_sum </td>
+          <td>(</td>
+          <td class="paramtype">anyarray&#160;</td>
+          <td class="paramname"><em>x</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Array x </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Sum of absolute value of x </dd></dl>
+
+</div>
+</div>
+<a id="a91c8d3715142927b3967f05a4fbf1575"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a91c8d3715142927b3967f05a4fbf1575">&#9670;&nbsp;</a></span>array_add()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">anyarray array_add </td>
+          <td>(</td>
+          <td class="paramtype">anyarray&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">anyarray&#160;</td>
+          <td class="paramname"><em>y</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Array x </td></tr>
+    <tr><td class="paramname">y</td><td>Array y </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Sum of x and y. </dd></dl>
+
+</div>
+</div>
+<a id="aedf6cb13eb4803bcc12dc4d95ea8ff4e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aedf6cb13eb4803bcc12dc4d95ea8ff4e">&#9670;&nbsp;</a></span>array_contains()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool array_contains </td>
+          <td>(</td>
+          <td class="paramtype">anyarray&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">anyarray&#160;</td>
+          <td class="paramname"><em>y</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Array x </td></tr>
+    <tr><td class="paramname">y</td><td>Array y </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Returns true if x contains y. </dd></dl>
+
+</div>
+</div>
+<a id="a86e48d6f0ed7572cfc10576a07f84d25"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a86e48d6f0ed7572cfc10576a07f84d25">&#9670;&nbsp;</a></span>array_contains_null()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">boolean array_contains_null </td>
+          <td>(</td>
+          <td class="paramtype">anyarray&#160;</td>
+          <td class="paramname"><em>x</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Array x. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>True if x has NULL value else False. </dd></dl>
+
+</div>
+</div>
+<a id="a8855869bb9f124c3ff5b10041988610c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8855869bb9f124c3ff5b10041988610c">&#9670;&nbsp;</a></span>array_cos()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">anyarray array_cos </td>
+          <td>(</td>
+          <td class="paramtype">anyarray&#160;</td>
+          <td class="paramname"><em>x</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Array x </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Array with each element of cos(x). </dd></dl>
+
+</div>
+</div>
+<a id="a69642cec81403897436d3c286bf2b36b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a69642cec81403897436d3c286bf2b36b">&#9670;&nbsp;</a></span>array_cum_prod()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">anyarray array_cum_prod </td>
+          <td>(</td>
+          <td class="paramtype">anyarray&#160;</td>
+          <td class="paramname"><em>x</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Array x </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Cumulative product of the elements in x. </dd></dl>
+
+</div>
+</div>
+<a id="a819f395ada41a446dd4941f172d0bfef"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a819f395ada41a446dd4941f172d0bfef">&#9670;&nbsp;</a></span>array_cum_sum()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">anyarray array_cum_sum </td>
+          <td>(</td>
+          <td class="paramtype">anyarray&#160;</td>
+          <td class="paramname"><em>x</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Array x </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Cumulative sum of the elements in x. </dd></dl>
+
+</div>
+</div>
+<a id="a6cc05e7052495f8b64692faf40219576"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6cc05e7052495f8b64692faf40219576">&#9670;&nbsp;</a></span>array_div()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">anyarray array_div </td>
+          <td>(</td>
+          <td class="paramtype">anyarray&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">anyarray&#160;</td>
+          <td class="paramname"><em>y</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Array x </td></tr>
+    <tr><td class="paramname">y</td><td>Array y </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Element-wise division of x and y. </dd></dl>
+
+</div>
+</div>
+<a id="acde10964ed23b7c8da515fb84cb8d5e0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acde10964ed23b7c8da515fb84cb8d5e0">&#9670;&nbsp;</a></span>array_dot()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 array_dot </td>
+          <td>(</td>
+          <td class="paramtype">anyarray&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">anyarray&#160;</td>
+          <td class="paramname"><em>y</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Array x </td></tr>
+    <tr><td class="paramname">y</td><td>Array y </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Dot-product of x and y. </dd></dl>
+
+</div>
+</div>
+<a id="a065a5323f3b742be47e39ad8b4c90fc2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a065a5323f3b742be47e39ad8b4c90fc2">&#9670;&nbsp;</a></span>array_fill()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">anyarray array_fill </td>
+          <td>(</td>
+          <td class="paramtype">anyarray&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">anyelement&#160;</td>
+          <td class="paramname"><em>k</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Some array </td></tr>
+    <tr><td class="paramname">k</td><td>Desired value </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Fills array with desired value. </dd></dl>
+
+</div>
+</div>
+<a id="acc295a568878940ffc3e2c9a75990efb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acc295a568878940ffc3e2c9a75990efb">&#9670;&nbsp;</a></span>array_filter() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">anyarray array_filter </td>
+          <td>(</td>
+          <td class="paramtype">anyarray&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">anyelement&#160;</td>
+          <td class="paramname"><em>k</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>op</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Array x </td></tr>
+    <tr><td class="paramname">k</td><td>Scalar </td></tr>
+    <tr><td class="paramname">op</td><td>Operator </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Filtered array. </dd></dl>
+
+</div>
+</div>
+<a id="a0c3c44e81ff158ce8914258aa5604872"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0c3c44e81ff158ce8914258aa5604872">&#9670;&nbsp;</a></span>array_filter() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">anyarray array_filter </td>
+          <td>(</td>
+          <td class="paramtype">anyarray&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">anyelement&#160;</td>
+          <td class="paramname"><em>k</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Array x </td></tr>
+    <tr><td class="paramname">k</td><td>Scalar </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Filtered array. </dd></dl>
+
+</div>
+</div>
+<a id="ac4490f150ecb7aaab0933c223ccde5bd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac4490f150ecb7aaab0933c223ccde5bd">&#9670;&nbsp;</a></span>array_filter() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">anyarray array_filter </td>
+          <td>(</td>
+          <td class="paramtype">anyarray&#160;</td>
+          <td class="paramname"><em>x</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Array x </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Filtered array. </dd></dl>
+
+</div>
+</div>
+<a id="ae891429cc50705c530f3e5ca15541849"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae891429cc50705c530f3e5ca15541849">&#9670;&nbsp;</a></span>array_max()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">anyelement array_max </td>
+          <td>(</td>
+          <td class="paramtype">anyarray&#160;</td>
+          <td class="paramname"><em>x</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Array x </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Max of x. </dd></dl>
+
+</div>
+</div>
+<a id="aa415256a9064aecc600dfb5e377fb7b1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa415256a9064aecc600dfb5e377fb7b1">&#9670;&nbsp;</a></span>array_max_index()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] array_max_index </td>
+          <td>(</td>
+          <td class="paramtype">anyarray&#160;</td>
+          <td class="paramname"><em>x</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Array x </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Array as [max, index]. </dd></dl>
+
+</div>
+</div>
+<a id="a407598f9eb70637798b02fd731bfca2c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a407598f9eb70637798b02fd731bfca2c">&#9670;&nbsp;</a></span>array_mean()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 array_mean </td>
+          <td>(</td>
+          <td class="paramtype">anyarray&#160;</td>
+          <td class="paramname"><em>x</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Array x </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Mean of x. </dd></dl>
+
+</div>
+</div>
+<a id="a6659bf9d9363eb179fab34f81f8ac59b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6659bf9d9363eb179fab34f81f8ac59b">&#9670;&nbsp;</a></span>array_min()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">anyelement array_min </td>
+          <td>(</td>
+          <td class="paramtype">anyarray&#160;</td>
+          <td class="paramname"><em>x</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Array x </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Min of x. </dd></dl>
+
+</div>
+</div>
+<a id="a813a4d9ffc1c18b1b3e18f6ecdb2051f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a813a4d9ffc1c18b1b3e18f6ecdb2051f">&#9670;&nbsp;</a></span>array_min_index()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] array_min_index </td>
+          <td>(</td>
+          <td class="paramtype">anyarray&#160;</td>
+          <td class="paramname"><em>x</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Array x </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Array as [min, index]. </dd></dl>
+
+</div>
+</div>
+<a id="a652d70c480d484c4a1a92ded384b0dd7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a652d70c480d484c4a1a92ded384b0dd7">&#9670;&nbsp;</a></span>array_mult()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">anyarray array_mult </td>
+          <td>(</td>
+          <td class="paramtype">anyarray&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">anyarray&#160;</td>
+          <td class="paramname"><em>y</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Array x </td></tr>
+    <tr><td class="paramname">y</td><td>Array y </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Element-wise product of x and y. </dd></dl>
+
+</div>
+</div>
+<a id="ab7d8550e66d2e0bd54b8f0997d93880c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab7d8550e66d2e0bd54b8f0997d93880c">&#9670;&nbsp;</a></span>array_of_bigint()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bigint [] array_of_bigint </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>k</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">k</td><td>Array size. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Array of size k. </dd></dl>
+
+</div>
+</div>
+<a id="ab066e65a41db78b00b4532996b2a6efc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab066e65a41db78b00b4532996b2a6efc">&#9670;&nbsp;</a></span>array_of_float()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] array_of_float </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>k</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">k</td><td>Array size </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Array of size k. </dd></dl>
+
+</div>
+</div>
+<a id="a761e7ca753a5e1acf26896b37ed8b0bd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a761e7ca753a5e1acf26896b37ed8b0bd">&#9670;&nbsp;</a></span>array_pow()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">anyarray array_pow </td>
+          <td>(</td>
+          <td class="paramtype">anyarray&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">anyelement&#160;</td>
+          <td class="paramname"><em>y</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Array x </td></tr>
+    <tr><td class="paramname">y</td><td>Desired power </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Power of y for all elements of x. </dd></dl>
+
+</div>
+</div>
+<a id="a0b6ffe59b12c3dee076c3059f9ab363f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0b6ffe59b12c3dee076c3059f9ab363f">&#9670;&nbsp;</a></span>array_scalar_add()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">anyarray array_scalar_add </td>
+          <td>(</td>
+          <td class="paramtype">anyarray&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">anyelement&#160;</td>
+          <td class="paramname"><em>k</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Array x </td></tr>
+    <tr><td class="paramname">k</td><td>Scalar </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Array with each element of x added by scalar. </dd></dl>
+
+</div>
+</div>
+<a id="ae6881cc5c86941b6ffca35d7f3cd5c12"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae6881cc5c86941b6ffca35d7f3cd5c12">&#9670;&nbsp;</a></span>array_scalar_mult()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">anyarray array_scalar_mult </td>
+          <td>(</td>
+          <td class="paramtype">anyarray&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">anyelement&#160;</td>
+          <td class="paramname"><em>k</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Array x </td></tr>
+    <tr><td class="paramname">k</td><td>Scalar </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Array with each element of x multiplied by scalar. </dd></dl>
+
+</div>
+</div>
+<a id="a83451ed0c3ca5a9c62751dba47e45df7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a83451ed0c3ca5a9c62751dba47e45df7">&#9670;&nbsp;</a></span>array_sqrt()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] array_sqrt </td>
+          <td>(</td>
+          <td class="paramtype">anyarray&#160;</td>
+          <td class="paramname"><em>x</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Array x </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Square root of all elements of x. </dd></dl>
+
+</div>
+</div>
+<a id="aff60f4091bed6374683f047c8a70ef9a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aff60f4091bed6374683f047c8a70ef9a">&#9670;&nbsp;</a></span>array_square()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] array_square </td>
+          <td>(</td>
+          <td class="paramtype">anyarray&#160;</td>
+          <td class="paramname"><em>x</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Array x </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Square of all elements of x. </dd></dl>
+
+</div>
+</div>
+<a id="a3b6c2d173a611e6d6b184d825c2b336d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3b6c2d173a611e6d6b184d825c2b336d">&#9670;&nbsp;</a></span>array_stddev()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 array_stddev </td>
+          <td>(</td>
+          <td class="paramtype">anyarray&#160;</td>
+          <td class="paramname"><em>x</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Array x </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Standard deviation of x. </dd></dl>
+
+</div>
+</div>
+<a id="a2875a161a01c7dcdea9a4997b074eefc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2875a161a01c7dcdea9a4997b074eefc">&#9670;&nbsp;</a></span>array_sub()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">anyarray array_sub </td>
+          <td>(</td>
+          <td class="paramtype">anyarray&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">anyarray&#160;</td>
+          <td class="paramname"><em>y</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Array x </td></tr>
+    <tr><td class="paramname">y</td><td>Array y </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>x-y. </dd></dl>
+
+</div>
+</div>
+<a id="a4c98f20e6a737358806f63318daea5ec"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4c98f20e6a737358806f63318daea5ec">&#9670;&nbsp;</a></span>array_sum()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">anyelement array_sum </td>
+          <td>(</td>
+          <td class="paramtype">anyarray&#160;</td>
+          <td class="paramname"><em>x</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Array x </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Sum of x. </dd></dl>
+
+</div>
+</div>
+<a id="a418de59800833aa95f9b7cbd6b12901c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a418de59800833aa95f9b7cbd6b12901c">&#9670;&nbsp;</a></span>array_sum_big()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 array_sum_big </td>
+          <td>(</td>
+          <td class="paramtype">anyarray&#160;</td>
+          <td class="paramname"><em>x</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Array x </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Sum of x. </dd></dl>
+
+</div>
+</div>
+<a id="ae82f5f104ce04c1b0e6cf8dbf9c110ee"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae82f5f104ce04c1b0e6cf8dbf9c110ee">&#9670;&nbsp;</a></span>array_to_bytea()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea array_to_bytea </td>
+          <td>(</td>
+          <td class="paramtype">anyarray&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="af057b589f2a2cb1095caa99feaeb3d70"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af057b589f2a2cb1095caa99feaeb3d70">&#9670;&nbsp;</a></span>array_unnest_2d_to_1d() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">set&lt;record&gt; array_unnest_2d_to_1d </td>
+          <td>(</td>
+          <td class="paramtype">anyarray&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>unnest_row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">anyarray&#160;</td>
+          <td class="paramname"><em>unnest_result</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Array x </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Set of 1-D arrays that corrspond to rows of x and an ID column. </dd></dl>
+
+</div>
+</div>
+<a id="aa86efceb2ac80f621db00844bab77553"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa86efceb2ac80f621db00844bab77553">&#9670;&nbsp;</a></span>array_unnest_2d_to_1d() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text array_unnest_2d_to_1d </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="acb57ea4521dcb717f9e3148e0acccc74"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acb57ea4521dcb717f9e3148e0acccc74">&#9670;&nbsp;</a></span>normalize()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] normalize </td>
+          <td>(</td>
+          <td class="paramtype">anyarray&#160;</td>
+          <td class="paramname"><em>x</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Array x. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Array normalized by its 2-norm. </dd></dl>
+
+</div>
+</div>
+<a id="a26e8508a2bae10a6574cec697a270eea"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a26e8508a2bae10a6574cec697a270eea">&#9670;&nbsp;</a></span>sum()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate anyarray sum </td>
+          <td>(</td>
+          <td class="paramtype">anyarray&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Array x </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Sum of x </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_704eb8350b43e1ca74c0f90ed1ba450e.html">methods</a></li><li class="navelem"><a class="el" href="dir_834e55cf992733df24fbe86b49356157.html">array_ops</a></li><li class="navelem"><a class="el" href="dir_c8a9890f716ab6621b63d44c36a168eb.html">src</a></li><li class="navelem"><a class="el" href="dir_fe647384fff178c2cff5ce75fb4044e5.html">pg_gp</a></li><li class="navelem"><a class="el" href="array__ops_8sql__in.html">array_ops.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:56 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/assoc__rules_8sql__in.html b/docs/rc/assoc__rules_8sql__in.html
new file mode 100644
index 0000000..aa7d967
--- /dev/null
+++ b/docs/rc/assoc__rules_8sql__in.html
@@ -0,0 +1,570 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: assoc_rules.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('assoc__rules_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">assoc_rules.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>The <a class="el" href="assoc__rules_8sql__in.html#a8362eb54bb0eeb551d5a1aadb96e7092">assoc_rules</a> function computes association rules for a given set of data. The data is assumed to have two dimensions; items (between which we are trying to discover associations), and a transaction id. This tranaction id groups the items by event and could also be a user id, date, etc. depending on the context of the data. This function assumes the data is stored in two columns with one transaction id and one item per row.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a6af43dbd2fe9400f96c1ebf486e8ea40"><td class="memItemLeft" align="right" valign="top">set&lt; text[]&gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="assoc__rules_8sql__in.html#a6af43dbd2fe9400f96c1ebf486e8ea40">gen_rules_from_cfp</a> (text, int, int, int)</td></tr>
+<tr class="separator:a6af43dbd2fe9400f96c1ebf486e8ea40"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7c215a102cc18276a3ca14c38ed35f89"><td class="memItemLeft" align="right" valign="top">assoc_rules_results&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="assoc__rules_8sql__in.html#a7c215a102cc18276a3ca14c38ed35f89">assoc_rules</a> (float8 support, float8 confidence, text tid_col, text item_col, text input_table, text output_schema, boolean verbose, integer max_itemset_size, integer max_lhs_size, integer max_rhs_size)</td></tr>
+<tr class="separator:a7c215a102cc18276a3ca14c38ed35f89"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a033f13252ebfc88b21f18835e5d3ce37"><td class="memItemLeft" align="right" valign="top">assoc_rules_results&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="assoc__rules_8sql__in.html#a033f13252ebfc88b21f18835e5d3ce37">assoc_rules</a> (float8 support, float8 confidence, text tid_col, text item_col, text input_table, text output_schema, boolean verbose, integer max_itemset_size, integer max_lhs_size)</td></tr>
+<tr class="separator:a033f13252ebfc88b21f18835e5d3ce37"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2ce0222d57332da628eb98220130e905"><td class="memItemLeft" align="right" valign="top">assoc_rules_results&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="assoc__rules_8sql__in.html#a2ce0222d57332da628eb98220130e905">assoc_rules</a> (float8 support, float8 confidence, text tid_col, text item_col, text input_table, text output_schema, boolean verbose, integer max_itemset_size)</td></tr>
+<tr class="separator:a2ce0222d57332da628eb98220130e905"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a68a256d98b82ac15bac7df92e806f6f8"><td class="memItemLeft" align="right" valign="top">assoc_rules_results&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="assoc__rules_8sql__in.html#a68a256d98b82ac15bac7df92e806f6f8">assoc_rules</a> (float8 support, float8 confidence, text tid_col, text item_col, text input_table, text output_schema)</td></tr>
+<tr class="memdesc:a68a256d98b82ac15bac7df92e806f6f8"><td class="mdescLeft">&#160;</td><td class="mdescRight">The short form of the above function with vobose removed.  <a href="#a68a256d98b82ac15bac7df92e806f6f8">More...</a><br /></td></tr>
+<tr class="separator:a68a256d98b82ac15bac7df92e806f6f8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af9456adb6dad01e452415b9a0a5371dc"><td class="memItemLeft" align="right" valign="top">assoc_rules_results&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="assoc__rules_8sql__in.html#af9456adb6dad01e452415b9a0a5371dc">assoc_rules</a> (float8 support, float8 confidence, text tid_col, text item_col, text input_table, text output_schema, boolean verbose)</td></tr>
+<tr class="separator:af9456adb6dad01e452415b9a0a5371dc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aeddb752c12b9af779d796b135f900e38"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="assoc__rules_8sql__in.html#aeddb752c12b9af779d796b135f900e38">assoc_rules</a> (text message)</td></tr>
+<tr class="separator:aeddb752c12b9af779d796b135f900e38"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8362eb54bb0eeb551d5a1aadb96e7092"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="assoc__rules_8sql__in.html#a8362eb54bb0eeb551d5a1aadb96e7092">assoc_rules</a> ()</td></tr>
+<tr class="separator:a8362eb54bb0eeb551d5a1aadb96e7092"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><dl class="section date"><dt>Date</dt><dd>June 2011 </dd>
+<dd>
+August 2012</dd></dl>
+<dl class="section see"><dt>See also</dt><dd>For a brief introduction to the association rules implementation, see the module description <a class="el" href="group__grp__assoc__rules.html">Apriori Algorithm</a>. </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="a7c215a102cc18276a3ca14c38ed35f89"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7c215a102cc18276a3ca14c38ed35f89">&#9670;&nbsp;</a></span>assoc_rules() <span class="overload">[1/7]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">assoc_rules_results assoc_rules </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>support</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>confidence</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>tid_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>item_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>input_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_schema</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>verbose</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_itemset_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_lhs_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_rhs_size</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">support</td><td>minimum level of support needed for each itemset to be included in result </td></tr>
+    <tr><td class="paramname">confidence</td><td>minimum level of confidence needed for each rule to be included in result </td></tr>
+    <tr><td class="paramname">tid_col</td><td>name of the column storing the transaction ids </td></tr>
+    <tr><td class="paramname">item_col</td><td>name of the column storing the products </td></tr>
+    <tr><td class="paramname">input_table</td><td>name of the table where the data is stored </td></tr>
+    <tr><td class="paramname">output_schema</td><td>name of the schema where the final results will be stored </td></tr>
+    <tr><td class="paramname">verbose</td><td>determining if output contains comments</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The schema and table name containing association rules, and total number of rules found.</dd></dl>
+<p>This function computes the association rules between products in a data set. It reads the name of the table, the column names of the product and ids, and computes ssociation rules using the Apriori algorithm, and subject to the support and confidence constraints as input by the user. This version of association rules has verbose functionality. When verbose is true, output of function includes iteration steps and comments on Apriori algorithm steps. </p>
+
+</div>
+</div>
+<a id="a033f13252ebfc88b21f18835e5d3ce37"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a033f13252ebfc88b21f18835e5d3ce37">&#9670;&nbsp;</a></span>assoc_rules() <span class="overload">[2/7]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">assoc_rules_results assoc_rules </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>support</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>confidence</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>tid_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>item_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>input_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_schema</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>verbose</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_itemset_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_lhs_size</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a2ce0222d57332da628eb98220130e905"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2ce0222d57332da628eb98220130e905">&#9670;&nbsp;</a></span>assoc_rules() <span class="overload">[3/7]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">assoc_rules_results assoc_rules </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>support</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>confidence</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>tid_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>item_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>input_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_schema</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>verbose</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_itemset_size</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a68a256d98b82ac15bac7df92e806f6f8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a68a256d98b82ac15bac7df92e806f6f8">&#9670;&nbsp;</a></span>assoc_rules() <span class="overload">[4/7]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">assoc_rules_results assoc_rules </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>support</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>confidence</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>tid_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>item_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>input_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_schema</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="af9456adb6dad01e452415b9a0a5371dc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af9456adb6dad01e452415b9a0a5371dc">&#9670;&nbsp;</a></span>assoc_rules() <span class="overload">[5/7]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">assoc_rules_results assoc_rules </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>support</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>confidence</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>tid_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>item_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>input_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_schema</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>verbose</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aeddb752c12b9af779d796b135f900e38"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aeddb752c12b9af779d796b135f900e38">&#9670;&nbsp;</a></span>assoc_rules() <span class="overload">[6/7]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text assoc_rules </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8362eb54bb0eeb551d5a1aadb96e7092"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8362eb54bb0eeb551d5a1aadb96e7092">&#9670;&nbsp;</a></span>assoc_rules() <span class="overload">[7/7]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text assoc_rules </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a6af43dbd2fe9400f96c1ebf486e8ea40"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6af43dbd2fe9400f96c1ebf486e8ea40">&#9670;&nbsp;</a></span>gen_rules_from_cfp()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">set&lt;text[]&gt; gen_rules_from_cfp </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_df86748cb94fb6c2fa09e991cce090c0.html">assoc_rules</a></li><li class="navelem"><a class="el" href="assoc__rules_8sql__in.html">assoc_rules.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:56 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/balance__sample_8sql__in.html b/docs/rc/balance__sample_8sql__in.html
new file mode 100644
index 0000000..d7e18c1
--- /dev/null
+++ b/docs/rc/balance__sample_8sql__in.html
@@ -0,0 +1,490 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: balance_sample.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('balance__sample_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">balance_sample.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>SQL functions for balanced data sets sampling.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a784a10b3aba906635e6e3b1ec8dd7f78"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="balance__sample_8sql__in.html#a784a10b3aba906635e6e3b1ec8dd7f78">balance_sample</a> (text source_table, text output_table, text class_col, varchar class_sizes, integer output_table_size, text grouping_cols, boolean with_replacement, boolean keep_null)</td></tr>
+<tr class="separator:a784a10b3aba906635e6e3b1ec8dd7f78"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a03241df3f6930c0bc0a784edb3d51e09"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="balance__sample_8sql__in.html#a03241df3f6930c0bc0a784edb3d51e09">balance_sample</a> (text source_table, text output_table, text class_col, varchar class_sizes, integer output_table_size, text grouping_cols, boolean with_replacement)</td></tr>
+<tr class="separator:a03241df3f6930c0bc0a784edb3d51e09"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a257836db4a9f9f8dbc16f96d80b16218"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="balance__sample_8sql__in.html#a257836db4a9f9f8dbc16f96d80b16218">balance_sample</a> (text source_table, text output_table, text class_col, varchar class_sizes, integer output_table_size, text grouping_cols)</td></tr>
+<tr class="separator:a257836db4a9f9f8dbc16f96d80b16218"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5a37e006e61355fa804164a42430dc38"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="balance__sample_8sql__in.html#a5a37e006e61355fa804164a42430dc38">balance_sample</a> (text source_table, text output_table, text class_col, varchar class_sizes, integer output_table_size)</td></tr>
+<tr class="separator:a5a37e006e61355fa804164a42430dc38"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae968393f98279747bd1ef13f8359856d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="balance__sample_8sql__in.html#ae968393f98279747bd1ef13f8359856d">balance_sample</a> (text source_table, text output_table, text class_col, varchar class_sizes)</td></tr>
+<tr class="separator:ae968393f98279747bd1ef13f8359856d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac384701cfb2653e0ce4ac2bcf54a7980"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="balance__sample_8sql__in.html#ac384701cfb2653e0ce4ac2bcf54a7980">balance_sample</a> (text source_table, text output_table, text class_col)</td></tr>
+<tr class="separator:ac384701cfb2653e0ce4ac2bcf54a7980"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a850769c45d8925743edcf4125b148524"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="balance__sample_8sql__in.html#a850769c45d8925743edcf4125b148524">balance_sample</a> (varchar message)</td></tr>
+<tr class="separator:a850769c45d8925743edcf4125b148524"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3836a8987b2d9b4b8a21ce09bb7ef441"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="balance__sample_8sql__in.html#a3836a8987b2d9b4b8a21ce09bb7ef441">balance_sample</a> ()</td></tr>
+<tr class="separator:a3836a8987b2d9b4b8a21ce09bb7ef441"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>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</p>
+<p><a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a></p>
+<p>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.</p>
+<dl class="section date"><dt>Date</dt><dd>12/14/2017</dd></dl>
+<dl class="section see"><dt>See also</dt><dd>Given a table, balanced sampling returns a sampled data set with specified proportions for each class (defaults to uniform sampling). </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="a784a10b3aba906635e6e3b1ec8dd7f78"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a784a10b3aba906635e6e3b1ec8dd7f78">&#9670;&nbsp;</a></span>balance_sample() <span class="overload">[1/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void balance_sample </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>class_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>class_sizes</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>output_table_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>with_replacement</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>keep_null</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a03241df3f6930c0bc0a784edb3d51e09"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a03241df3f6930c0bc0a784edb3d51e09">&#9670;&nbsp;</a></span>balance_sample() <span class="overload">[2/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void balance_sample </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>class_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>class_sizes</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>output_table_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>with_replacement</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a257836db4a9f9f8dbc16f96d80b16218"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a257836db4a9f9f8dbc16f96d80b16218">&#9670;&nbsp;</a></span>balance_sample() <span class="overload">[3/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void balance_sample </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>class_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>class_sizes</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>output_table_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5a37e006e61355fa804164a42430dc38"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5a37e006e61355fa804164a42430dc38">&#9670;&nbsp;</a></span>balance_sample() <span class="overload">[4/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void balance_sample </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>class_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>class_sizes</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>output_table_size</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae968393f98279747bd1ef13f8359856d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae968393f98279747bd1ef13f8359856d">&#9670;&nbsp;</a></span>balance_sample() <span class="overload">[5/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void balance_sample </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>class_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>class_sizes</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac384701cfb2653e0ce4ac2bcf54a7980"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac384701cfb2653e0ce4ac2bcf54a7980">&#9670;&nbsp;</a></span>balance_sample() <span class="overload">[6/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void balance_sample </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>class_col</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a850769c45d8925743edcf4125b148524"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a850769c45d8925743edcf4125b148524">&#9670;&nbsp;</a></span>balance_sample() <span class="overload">[7/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar balance_sample </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a3836a8987b2d9b4b8a21ce09bb7ef441"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3836a8987b2d9b4b8a21ce09bb7ef441">&#9670;&nbsp;</a></span>balance_sample() <span class="overload">[8/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar balance_sample </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_e6c126a997181663ba81c11cbf416bb1.html">sample</a></li><li class="navelem"><a class="el" href="balance__sample_8sql__in.html">balance_sample.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:56 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/bayes_8sql__in.html b/docs/rc/bayes_8sql__in.html
new file mode 100644
index 0000000..e9849cf
--- /dev/null
+++ b/docs/rc/bayes_8sql__in.html
@@ -0,0 +1,987 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: bayes.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('bayes_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">bayes.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>SQL functions for naive Bayes.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a0671e6ac35a1967f41d2efb9e8417e1b"><td class="memItemLeft" align="right" valign="top">args_and_value_double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bayes_8sql__in.html#a0671e6ac35a1967f41d2efb9e8417e1b">argmax_transition</a> (args_and_value_double oldmax, integer newkey, float8 newvalue)</td></tr>
+<tr class="separator:a0671e6ac35a1967f41d2efb9e8417e1b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab150442ec577f4a0a3948176baf5ebd0"><td class="memItemLeft" align="right" valign="top">args_and_value_double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bayes_8sql__in.html#ab150442ec577f4a0a3948176baf5ebd0">argmax_combine</a> (args_and_value_double max1, args_and_value_double max2)</td></tr>
+<tr class="separator:ab150442ec577f4a0a3948176baf5ebd0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa7017323fd6fad40c9acbbee5f1fec7e"><td class="memItemLeft" align="right" valign="top">integer []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bayes_8sql__in.html#aa7017323fd6fad40c9acbbee5f1fec7e">argmax_final</a> (args_and_value_double finalstate)</td></tr>
+<tr class="separator:aa7017323fd6fad40c9acbbee5f1fec7e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad47c68a2b8aeedf66d509f0c32a9732d"><td class="memItemLeft" align="right" valign="top">aggregate integer []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bayes_8sql__in.html#ad47c68a2b8aeedf66d509f0c32a9732d">argmax</a> (integer key, float8 value)</td></tr>
+<tr class="separator:ad47c68a2b8aeedf66d509f0c32a9732d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aeb4eae7843dd789cc38d5fc57f4ccfb2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bayes_8sql__in.html#aeb4eae7843dd789cc38d5fc57f4ccfb2">create_nb_prepared_data_tables</a> (varchar trainingSource, varchar trainingClassColumn, varchar trainingAttrColumn, integer numAttrs, varchar featureProbsDestName, varchar classPriorsDestName)</td></tr>
+<tr class="memdesc:aeb4eae7843dd789cc38d5fc57f4ccfb2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Precompute all class priors and feature probabilities.  <a href="#aeb4eae7843dd789cc38d5fc57f4ccfb2">More...</a><br /></td></tr>
+<tr class="separator:aeb4eae7843dd789cc38d5fc57f4ccfb2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3ed5ddbc4cab1013db8604be58a6da3d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bayes_8sql__in.html#a3ed5ddbc4cab1013db8604be58a6da3d">create_nb_prepared_data_tables</a> (varchar trainingSource, varchar trainingClassColumn, varchar trainingAttrColumn, varchar numericAttrsColumnIndices, integer numAttrs, varchar featureProbsDestName, varchar numericFeatureStatsDestName, varchar classPriorsDestName)</td></tr>
+<tr class="separator:a3ed5ddbc4cab1013db8604be58a6da3d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a798402280fc6db710957ae3ab58767e0"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bayes_8sql__in.html#a798402280fc6db710957ae3ab58767e0">create_nb_classify_view</a> (varchar featureProbsSource, varchar classPriorsSource, varchar classifySource, varchar classifyKeyColumn, varchar classifyAttrColumn, integer numAttrs, varchar destName)</td></tr>
+<tr class="memdesc:a798402280fc6db710957ae3ab58767e0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create a view with columns <code>(key, nb_classification)</code>  <a href="#a798402280fc6db710957ae3ab58767e0">More...</a><br /></td></tr>
+<tr class="separator:a798402280fc6db710957ae3ab58767e0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4e8e24120269be2b58f959ab5473b2cb"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bayes_8sql__in.html#a4e8e24120269be2b58f959ab5473b2cb">create_nb_classify_view</a> (varchar featureProbsSource, varchar classPriorsSource, varchar classifySource, varchar classifyKeyColumn, varchar classifyAttrColumn, integer numAttrs, varchar numericFeatureStatsSource, varchar destName)</td></tr>
+<tr class="separator:a4e8e24120269be2b58f959ab5473b2cb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6472f620099368cb8c334e0badb12133"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bayes_8sql__in.html#a6472f620099368cb8c334e0badb12133">create_nb_classify_view</a> (varchar trainingSource, varchar trainingClassColumn, varchar trainingAttrColumn, varchar classifySource, varchar classifyKeyColumn, varchar classifyAttrColumn, integer numAttrs, varchar destName)</td></tr>
+<tr class="separator:a6472f620099368cb8c334e0badb12133"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a76a03f1d7ff2b1891cb310668077b386"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bayes_8sql__in.html#a76a03f1d7ff2b1891cb310668077b386">create_nb_classify_view</a> (varchar trainingSource, varchar trainingClassColumn, varchar trainingAttrColumn, varchar numericAttrsColumnIndices, varchar classifySource, varchar classifyKeyColumn, varchar classifyAttrColumn, integer numAttrs, varchar destName)</td></tr>
+<tr class="separator:a76a03f1d7ff2b1891cb310668077b386"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a163afffd0c845d325f060f74bcf02243"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bayes_8sql__in.html#a163afffd0c845d325f060f74bcf02243">create_nb_probs_view</a> (varchar featureProbsSource, varchar classPriorsSource, varchar classifySource, varchar classifyKeyColumn, varchar classifyAttrColumn, integer numAttrs, varchar destName)</td></tr>
+<tr class="memdesc:a163afffd0c845d325f060f74bcf02243"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create view with columns <code>(key, class, nb_prob)</code>  <a href="#a163afffd0c845d325f060f74bcf02243">More...</a><br /></td></tr>
+<tr class="separator:a163afffd0c845d325f060f74bcf02243"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2e02b0ebb0b4c2ca77b1748662bae78f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bayes_8sql__in.html#a2e02b0ebb0b4c2ca77b1748662bae78f">create_nb_probs_view</a> (varchar featureProbsSource, varchar classPriorsSource, varchar classifySource, varchar classifyKeyColumn, varchar classifyAttrColumn, integer numAttrs, varchar numericFeatureStatsSource, varchar destName)</td></tr>
+<tr class="separator:a2e02b0ebb0b4c2ca77b1748662bae78f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aba5d695641530e55b25c8007b77142b9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bayes_8sql__in.html#aba5d695641530e55b25c8007b77142b9">create_nb_probs_view</a> (varchar trainingSource, varchar trainingClassColumn, varchar trainingAttrColumn, varchar classifySource, varchar classifyKeyColumn, varchar classifyAttrColumn, integer numAttrs, varchar destName)</td></tr>
+<tr class="separator:aba5d695641530e55b25c8007b77142b9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6d1186aa04f4d4e3ac44035467818d3c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bayes_8sql__in.html#a6d1186aa04f4d4e3ac44035467818d3c">create_nb_probs_view</a> (varchar trainingSource, varchar trainingClassColumn, varchar trainingAttrColumn, varchar numericAttrsColumnIndices, varchar classifySource, varchar classifyKeyColumn, varchar classifyAttrColumn, integer numAttrs, varchar destName)</td></tr>
+<tr class="separator:a6d1186aa04f4d4e3ac44035467818d3c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><dl class="section date"><dt>Date</dt><dd>January 2011</dd></dl>
+<dl class="section see"><dt>See also</dt><dd>For a brief introduction to Naive Bayes Classification, see the module description <a class="el" href="group__grp__bayes.html">Naive Bayes Classification</a>. </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="ad47c68a2b8aeedf66d509f0c32a9732d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad47c68a2b8aeedf66d509f0c32a9732d">&#9670;&nbsp;</a></span>argmax()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate integer [] argmax </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>key</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>value</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab150442ec577f4a0a3948176baf5ebd0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab150442ec577f4a0a3948176baf5ebd0">&#9670;&nbsp;</a></span>argmax_combine()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">args_and_value_double argmax_combine </td>
+          <td>(</td>
+          <td class="paramtype">args_and_value_double&#160;</td>
+          <td class="paramname"><em>max1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">args_and_value_double&#160;</td>
+          <td class="paramname"><em>max2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa7017323fd6fad40c9acbbee5f1fec7e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa7017323fd6fad40c9acbbee5f1fec7e">&#9670;&nbsp;</a></span>argmax_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">integer [] argmax_final </td>
+          <td>(</td>
+          <td class="paramtype">args_and_value_double&#160;</td>
+          <td class="paramname"><em>finalstate</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a0671e6ac35a1967f41d2efb9e8417e1b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0671e6ac35a1967f41d2efb9e8417e1b">&#9670;&nbsp;</a></span>argmax_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">args_and_value_double argmax_transition </td>
+          <td>(</td>
+          <td class="paramtype">args_and_value_double&#160;</td>
+          <td class="paramname"><em>oldmax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>newkey</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>newvalue</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a798402280fc6db710957ae3ab58767e0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a798402280fc6db710957ae3ab58767e0">&#9670;&nbsp;</a></span>create_nb_classify_view() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void create_nb_classify_view </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>featureProbsSource</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>classPriorsSource</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>classifySource</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>classifyKeyColumn</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>classifyAttrColumn</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>numAttrs</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>destName</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>The created relation will be</p>
+<p><code>{TABLE|VIEW} <em>destName</em> (key, nb_classification)</code></p>
+<p>where <code>nb_classification</code> is an array containing the most likely class(es) of the record in <em>classifySource</em> identified by <code>key</code>.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">featureProbsSource</td><td>Name of table with precomputed feature probabilities, as created with <a class="el" href="bayes_8sql__in.html#aeb4eae7843dd789cc38d5fc57f4ccfb2" title="Precompute all class priors and feature probabilities. ">create_nb_prepared_data_tables()</a> </td></tr>
+    <tr><td class="paramname">classPriorsSource</td><td>Name of table with precomputed class priors, as created with <a class="el" href="bayes_8sql__in.html#aeb4eae7843dd789cc38d5fc57f4ccfb2" title="Precompute all class priors and feature probabilities. ">create_nb_prepared_data_tables()</a> </td></tr>
+    <tr><td class="paramname">classifySource</td><td>Name of the relation that contains data to be classified </td></tr>
+    <tr><td class="paramname">classifyKeyColumn</td><td>Name of column in <em>classifySource</em> that can serve as unique identifier (the key of the source relation) </td></tr>
+    <tr><td class="paramname">classifyAttrColumn</td><td>Name of attributes-array column in <em>classifySource</em> </td></tr>
+    <tr><td class="paramname">numAttrs</td><td>Number of attributes to use for classification </td></tr>
+    <tr><td class="paramname">destName</td><td>Name of the view to create</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section note"><dt>Note</dt><dd><code>create_nb_classify_view</code> can be called in an ad-hoc fashion. See <a class="el" href="group__grp__bayes.html">Naive Bayes Classification</a> for instructions.</dd></dl>
+<dl class="section user"><dt>Usage</dt><dd><ol type="1">
+<li>Create Naive Bayes classifications view: <pre>SELECT <a class="el" href="bayes_8sql__in.html#a76a03f1d7ff2b1891cb310668077b386">create_nb_classify_view</a>(
+    '<em>featureProbsName</em>', '<em>classPriorsName</em>',
+    '<em>classifySource</em>', '<em>classifyKeyColumn</em>', '<em>classifyAttrColumn</em>',
+    <em>numAttrs</em>, '<em>destName</em>'
+);</pre></li>
+<li>Show Naive Bayes classifications: <pre>SELECT * FROM <em>destName</em>;</pre> </li>
+</ol>
+</dd></dl>
+
+</div>
+</div>
+<a id="a4e8e24120269be2b58f959ab5473b2cb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4e8e24120269be2b58f959ab5473b2cb">&#9670;&nbsp;</a></span>create_nb_classify_view() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void create_nb_classify_view </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>featureProbsSource</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>classPriorsSource</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>classifySource</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>classifyKeyColumn</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>classifyAttrColumn</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>numAttrs</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>numericFeatureStatsSource</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>destName</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a6472f620099368cb8c334e0badb12133"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6472f620099368cb8c334e0badb12133">&#9670;&nbsp;</a></span>create_nb_classify_view() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void create_nb_classify_view </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>trainingSource</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>trainingClassColumn</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>trainingAttrColumn</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>classifySource</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>classifyKeyColumn</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>classifyAttrColumn</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>numAttrs</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>destName</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a76a03f1d7ff2b1891cb310668077b386"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a76a03f1d7ff2b1891cb310668077b386">&#9670;&nbsp;</a></span>create_nb_classify_view() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void create_nb_classify_view </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>trainingSource</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>trainingClassColumn</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>trainingAttrColumn</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>numericAttrsColumnIndices</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>classifySource</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>classifyKeyColumn</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>classifyAttrColumn</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>numAttrs</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>destName</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aeb4eae7843dd789cc38d5fc57f4ccfb2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aeb4eae7843dd789cc38d5fc57f4ccfb2">&#9670;&nbsp;</a></span>create_nb_prepared_data_tables() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void create_nb_prepared_data_tables </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>trainingSource</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>trainingClassColumn</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>trainingAttrColumn</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>numAttrs</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>featureProbsDestName</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>classPriorsDestName</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Feature probabilities are stored in a table of format </p><pre>TABLE <em>featureProbsDestName</em> (
+    class INTEGER,
+    attr INTEGER,
+    value INTEGER,
+    cnt INTEGER,
+    attr_cnt INTEGER
+)</pre><p>Class priors are stored in a table of format </p><pre>TABLE <em>classPriorsDestName</em> (
+    class INTEGER,
+    class_cnt INTEGER,
+    all_cnt INTEGER
+)</pre><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">trainingSource</td><td>Name of relation containing the training data </td></tr>
+    <tr><td class="paramname">trainingClassColumn</td><td>Name of class column in training data </td></tr>
+    <tr><td class="paramname">trainingAttrColumn</td><td>Name of attributes-array column in training data </td></tr>
+    <tr><td class="paramname">numAttrs</td><td>Number of attributes to use for classification </td></tr>
+    <tr><td class="paramname">featureProbsDestName</td><td>Name of feature-probabilities table to create </td></tr>
+    <tr><td class="paramname">classPriorsDestName</td><td>Name of class-priors table to create</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section user"><dt>Usage</dt><dd>Precompute feature probabilities and class priors: <pre>SELECT <a class="el" href="bayes_8sql__in.html#a3ed5ddbc4cab1013db8604be58a6da3d">create_nb_prepared_data_tables</a>(
+    '<em>trainingSource</em>', '<em>trainingClassColumn</em>', '<em>trainingAttrColumn</em>',
+    <em>numAttrs</em>, '<em>featureProbsName</em>', '<em>classPriorsName</em>'
+);</pre> </dd></dl>
+
+</div>
+</div>
+<a id="a3ed5ddbc4cab1013db8604be58a6da3d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3ed5ddbc4cab1013db8604be58a6da3d">&#9670;&nbsp;</a></span>create_nb_prepared_data_tables() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void create_nb_prepared_data_tables </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>trainingSource</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>trainingClassColumn</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>trainingAttrColumn</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>numericAttrsColumnIndices</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>numAttrs</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>featureProbsDestName</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>numericFeatureStatsDestName</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>classPriorsDestName</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a163afffd0c845d325f060f74bcf02243"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a163afffd0c845d325f060f74bcf02243">&#9670;&nbsp;</a></span>create_nb_probs_view() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void create_nb_probs_view </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>featureProbsSource</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>classPriorsSource</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>classifySource</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>classifyKeyColumn</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>classifyAttrColumn</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>numAttrs</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>destName</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>The created view will be of the following form:</p>
+<pre>VIEW <em>destName</em> (
+    key ANYTYPE,
+    class INTEGER,
+    nb_prob FLOAT8
+)</pre><p>where <code>nb_prob</code> is the Naive-Bayes probability that <code>class</code> is the true class of the record in <em>classifySource</em> identified by <code>key</code>.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">featureProbsSource</td><td>Name of table with precomputed feature probabilities, as created with <a class="el" href="bayes_8sql__in.html#aeb4eae7843dd789cc38d5fc57f4ccfb2" title="Precompute all class priors and feature probabilities. ">create_nb_prepared_data_tables()</a> </td></tr>
+    <tr><td class="paramname">classPriorsSource</td><td>Name of table with precomputed class priors, as created with <a class="el" href="bayes_8sql__in.html#aeb4eae7843dd789cc38d5fc57f4ccfb2" title="Precompute all class priors and feature probabilities. ">create_nb_prepared_data_tables()</a> </td></tr>
+    <tr><td class="paramname">classifySource</td><td>Name of the relation that contains data to be classified </td></tr>
+    <tr><td class="paramname">classifyKeyColumn</td><td>Name of column in <em>classifySource</em> that can serve as unique identifier (the key of the source relation) </td></tr>
+    <tr><td class="paramname">classifyAttrColumn</td><td>Name of attributes-array column in <em>classifySource</em> </td></tr>
+    <tr><td class="paramname">numAttrs</td><td>Number of attributes to use for classification </td></tr>
+    <tr><td class="paramname">destName</td><td>Name of the view to create</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section note"><dt>Note</dt><dd><code>create_nb_probs_view</code> can be called in an ad-hoc fashion. See <a class="el" href="group__grp__bayes.html">Naive Bayes Classification</a> for instructions.</dd></dl>
+<dl class="section user"><dt>Usage</dt><dd><ol type="1">
+<li>Create Naive Bayes probabilities view: <pre>SELECT <a class="el" href="bayes_8sql__in.html#a6d1186aa04f4d4e3ac44035467818d3c">create_nb_probs_view</a>(
+    '<em>featureProbsName</em>', '<em>classPriorsName</em>',
+    '<em>classifySource</em>', '<em>classifyKeyColumn</em>', '<em>classifyAttrColumn</em>',
+    <em>numAttrs</em>, '<em>destName</em>'
+);</pre></li>
+<li>Show Naive Bayes probabilities: <pre>SELECT * FROM <em>destName</em>;</pre> </li>
+</ol>
+</dd></dl>
+
+</div>
+</div>
+<a id="a2e02b0ebb0b4c2ca77b1748662bae78f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2e02b0ebb0b4c2ca77b1748662bae78f">&#9670;&nbsp;</a></span>create_nb_probs_view() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void create_nb_probs_view </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>featureProbsSource</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>classPriorsSource</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>classifySource</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>classifyKeyColumn</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>classifyAttrColumn</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>numAttrs</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>numericFeatureStatsSource</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>destName</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aba5d695641530e55b25c8007b77142b9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aba5d695641530e55b25c8007b77142b9">&#9670;&nbsp;</a></span>create_nb_probs_view() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void create_nb_probs_view </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>trainingSource</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>trainingClassColumn</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>trainingAttrColumn</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>classifySource</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>classifyKeyColumn</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>classifyAttrColumn</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>numAttrs</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>destName</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a6d1186aa04f4d4e3ac44035467818d3c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6d1186aa04f4d4e3ac44035467818d3c">&#9670;&nbsp;</a></span>create_nb_probs_view() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void create_nb_probs_view </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>trainingSource</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>trainingClassColumn</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>trainingAttrColumn</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>numericAttrsColumnIndices</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>classifySource</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>classifyKeyColumn</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>classifyAttrColumn</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>numAttrs</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>destName</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_3ee26ceeadb429f807bd6cd822eca1b9.html">bayes</a></li><li class="navelem"><a class="el" href="bayes_8sql__in.html">bayes.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:56 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/bc_s.png b/docs/rc/bc_s.png
new file mode 100644
index 0000000..224b29a
--- /dev/null
+++ b/docs/rc/bc_s.png
Binary files differ
diff --git a/docs/rc/bdwn.png b/docs/rc/bdwn.png
new file mode 100644
index 0000000..940a0b9
--- /dev/null
+++ b/docs/rc/bdwn.png
Binary files differ
diff --git a/docs/rc/bfs_8sql__in.html b/docs/rc/bfs_8sql__in.html
new file mode 100644
index 0000000..1c33536
--- /dev/null
+++ b/docs/rc/bfs_8sql__in.html
@@ -0,0 +1,436 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: bfs.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('bfs_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">bfs.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>SQL functions for graph analytics.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:adf1cdb7c2211062fba08c3d3a67ff5fb"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bfs_8sql__in.html#adf1cdb7c2211062fba08c3d3a67ff5fb">graph_bfs</a> (text vertex_table, text vertex_id, text edge_table, text edge_args, int source_vertex, text out_table, int max_distance, boolean directed, text grouping_cols)</td></tr>
+<tr class="separator:adf1cdb7c2211062fba08c3d3a67ff5fb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8e4e39648537cbf3cb97b4b5e2096130"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bfs_8sql__in.html#a8e4e39648537cbf3cb97b4b5e2096130">graph_bfs</a> (text vertex_table, text vertex_id, text edge_table, text edge_args, int source_vertex, text out_table, int max_distance, boolean directed)</td></tr>
+<tr class="separator:a8e4e39648537cbf3cb97b4b5e2096130"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8da98efc5bdf8bb0884b5e9f7fe0e6c2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bfs_8sql__in.html#a8da98efc5bdf8bb0884b5e9f7fe0e6c2">graph_bfs</a> (text vertex_table, text vertex_id, text edge_table, text edge_args, int source_vertex, text out_table, int max_distance)</td></tr>
+<tr class="separator:a8da98efc5bdf8bb0884b5e9f7fe0e6c2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4646561abd4554b14e677549ec39b1df"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bfs_8sql__in.html#a4646561abd4554b14e677549ec39b1df">graph_bfs</a> (text vertex_table, text vertex_id, text edge_table, text edge_args, int source_vertex, text out_table)</td></tr>
+<tr class="separator:a4646561abd4554b14e677549ec39b1df"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8f48e07f319931c8614067271910950e"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bfs_8sql__in.html#a8f48e07f319931c8614067271910950e">graph_bfs</a> (varchar message)</td></tr>
+<tr class="separator:a8f48e07f319931c8614067271910950e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa2f42b689595986506a18a2478924d51"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bfs_8sql__in.html#aa2f42b689595986506a18a2478924d51">graph_bfs</a> ()</td></tr>
+<tr class="separator:aa2f42b689595986506a18a2478924d51"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>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</p>
+<p><a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a></p>
+<p>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.</p>
+<dl class="section date"><dt>Date</dt><dd>Jun 2017</dd></dl>
+<dl class="section see"><dt>See also</dt><dd>Provides a breadth first search graph algorithm. </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="adf1cdb7c2211062fba08c3d3a67ff5fb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adf1cdb7c2211062fba08c3d3a67ff5fb">&#9670;&nbsp;</a></span>graph_bfs() <span class="overload">[1/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void graph_bfs </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>vertex_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>vertex_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>edge_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>edge_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>source_vertex</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>max_distance</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>directed</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8e4e39648537cbf3cb97b4b5e2096130"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8e4e39648537cbf3cb97b4b5e2096130">&#9670;&nbsp;</a></span>graph_bfs() <span class="overload">[2/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void graph_bfs </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>vertex_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>vertex_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>edge_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>edge_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>source_vertex</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>max_distance</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>directed</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8da98efc5bdf8bb0884b5e9f7fe0e6c2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8da98efc5bdf8bb0884b5e9f7fe0e6c2">&#9670;&nbsp;</a></span>graph_bfs() <span class="overload">[3/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void graph_bfs </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>vertex_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>vertex_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>edge_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>edge_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>source_vertex</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>max_distance</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a4646561abd4554b14e677549ec39b1df"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4646561abd4554b14e677549ec39b1df">&#9670;&nbsp;</a></span>graph_bfs() <span class="overload">[4/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void graph_bfs </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>vertex_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>vertex_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>edge_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>edge_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>source_vertex</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8f48e07f319931c8614067271910950e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8f48e07f319931c8614067271910950e">&#9670;&nbsp;</a></span>graph_bfs() <span class="overload">[5/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar graph_bfs </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa2f42b689595986506a18a2478924d51"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa2f42b689595986506a18a2478924d51">&#9670;&nbsp;</a></span>graph_bfs() <span class="overload">[6/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar graph_bfs </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_1c3de670490e30b2adf792227ef51e32.html">graph</a></li><li class="navelem"><a class="el" href="bfs_8sql__in.html">bfs.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:56 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/closed.png b/docs/rc/closed.png
new file mode 100644
index 0000000..98cc2c9
--- /dev/null
+++ b/docs/rc/closed.png
Binary files differ
diff --git a/docs/rc/clustered__variance_8sql__in.html b/docs/rc/clustered__variance_8sql__in.html
new file mode 100644
index 0000000..2f0e7d6
--- /dev/null
+++ b/docs/rc/clustered__variance_8sql__in.html
@@ -0,0 +1,1947 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: clustered_variance.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('clustered__variance_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">clustered_variance.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:abaa6702a3482f65199ce64b8a14316d7"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clustered__variance_8sql__in.html#abaa6702a3482f65199ce64b8a14316d7">clustered_variance_linregr</a> (text source_table, text out_table, text depvar, text indvar, text clustervar, text grouping_col)</td></tr>
+<tr class="memdesc:abaa6702a3482f65199ce64b8a14316d7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute the clustered errors.  <a href="#abaa6702a3482f65199ce64b8a14316d7">More...</a><br /></td></tr>
+<tr class="separator:abaa6702a3482f65199ce64b8a14316d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adb6227023444552a37f3ea52502b1c37"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clustered__variance_8sql__in.html#adb6227023444552a37f3ea52502b1c37">clustered_variance_linregr</a> (text source_table, text out_table, text depvar, text indvar, text clustervar)</td></tr>
+<tr class="separator:adb6227023444552a37f3ea52502b1c37"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0548d26efc4f0b22c41516dabcd7d32b"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clustered__variance_8sql__in.html#a0548d26efc4f0b22c41516dabcd7d32b">clustered_variance_linregr</a> ()</td></tr>
+<tr class="separator:a0548d26efc4f0b22c41516dabcd7d32b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ade1843a5cf8c7c72fb1aae07d82d5a4e"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clustered__variance_8sql__in.html#ade1843a5cf8c7c72fb1aae07d82d5a4e">clustered_variance_linregr</a> (text msg)</td></tr>
+<tr class="separator:ade1843a5cf8c7c72fb1aae07d82d5a4e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab3548ff761b9d720e4db767dcf419e66"><td class="memItemLeft" align="right" valign="top">bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clustered__variance_8sql__in.html#ab3548ff761b9d720e4db767dcf419e66">__clustered_err_lin_transition</a> (bytea8 state, float8 y, float8[] x, float8[] coef)</td></tr>
+<tr class="separator:ab3548ff761b9d720e4db767dcf419e66"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a876867228d62f422f10c03dc93d1e9eb"><td class="memItemLeft" align="right" valign="top">bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clustered__variance_8sql__in.html#a876867228d62f422f10c03dc93d1e9eb">__clustered_err_lin_merge</a> (bytea8 state1, bytea8 state2)</td></tr>
+<tr class="separator:a876867228d62f422f10c03dc93d1e9eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad772976f85e2f1dd3927f84a7f96e9ae"><td class="memItemLeft" align="right" valign="top">__clustered_agg_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clustered__variance_8sql__in.html#ad772976f85e2f1dd3927f84a7f96e9ae">__clustered_err_lin_final</a> (bytea8 state)</td></tr>
+<tr class="separator:ad772976f85e2f1dd3927f84a7f96e9ae"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad4b627f3a2aa513b8809e3fc2f5e4c5f"><td class="memItemLeft" align="right" valign="top">aggregate __clustered_agg_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clustered__variance_8sql__in.html#ad4b627f3a2aa513b8809e3fc2f5e4c5f">__clustered_err_lin_step</a> (float8, float8[], float8[])</td></tr>
+<tr class="separator:ad4b627f3a2aa513b8809e3fc2f5e4c5f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abebc8d70763c7264857b4b14d3ddf280"><td class="memItemLeft" align="right" valign="top">__clustered_lin_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clustered__variance_8sql__in.html#abebc8d70763c7264857b4b14d3ddf280">__clustered_lin_compute_stats</a> (float8[] coef, float8[] meatvec, float8[] breadvec, integer mcluster, integer numrows)</td></tr>
+<tr class="separator:abebc8d70763c7264857b4b14d3ddf280"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2d33f7a6a98dfc92c6d4a017ceabbd9a"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clustered__variance_8sql__in.html#a2d33f7a6a98dfc92c6d4a017ceabbd9a">__array_add</a> (float8[] x, float8[] y)</td></tr>
+<tr class="separator:a2d33f7a6a98dfc92c6d4a017ceabbd9a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a329c662f02c985ed68b886cf2bd29f37"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clustered__variance_8sql__in.html#a329c662f02c985ed68b886cf2bd29f37">__array_sum</a> (float8[])</td></tr>
+<tr class="separator:a329c662f02c985ed68b886cf2bd29f37"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0debc923b0494f8259938d9c6f5cdbcd"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clustered__variance_8sql__in.html#a0debc923b0494f8259938d9c6f5cdbcd">clustered_variance_logregr</a> (text source_table, text out_table, text depvar, text indvar, text clustervar, text grouping_col, integer max_iter, text optimizer, float8 tolerance, boolean verbose_mode)</td></tr>
+<tr class="separator:a0debc923b0494f8259938d9c6f5cdbcd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5d526752e92cbe1282bf581c49f9c31c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clustered__variance_8sql__in.html#a5d526752e92cbe1282bf581c49f9c31c">clustered_variance_logregr</a> (text source_table, text out_table, text depvar, text indvar, text clustervar)</td></tr>
+<tr class="separator:a5d526752e92cbe1282bf581c49f9c31c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab060fb03fdcab9e702024eee940ba61c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clustered__variance_8sql__in.html#ab060fb03fdcab9e702024eee940ba61c">clustered_variance_logregr</a> (text source_table, text out_table, text depvar, text indvar, text clustervar, text grouping_col)</td></tr>
+<tr class="separator:ab060fb03fdcab9e702024eee940ba61c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab58eebaf13ef21e59e50362fe9ad658f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clustered__variance_8sql__in.html#ab58eebaf13ef21e59e50362fe9ad658f">clustered_variance_logregr</a> (text source_table, text out_table, text depvar, text indvar, text clustervar, text grouping_col, integer max_iter)</td></tr>
+<tr class="separator:ab58eebaf13ef21e59e50362fe9ad658f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8d8bd2b7d26981e7de10597222d99f7c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clustered__variance_8sql__in.html#a8d8bd2b7d26981e7de10597222d99f7c">clustered_variance_logregr</a> (text source_table, text out_table, text depvar, text indvar, text clustervar, text grouping_col, integer max_iter, text optimizer)</td></tr>
+<tr class="separator:a8d8bd2b7d26981e7de10597222d99f7c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5c10605246186fc87442274b66948f52"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clustered__variance_8sql__in.html#a5c10605246186fc87442274b66948f52">clustered_variance_logregr</a> (text source_table, text out_table, text depvar, text indvar, text clustervar, text grouping_col, integer max_iter, text optimizer, float8 tolerance)</td></tr>
+<tr class="separator:a5c10605246186fc87442274b66948f52"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3d702174c793b0c4afc5453d553f0e29"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clustered__variance_8sql__in.html#a3d702174c793b0c4afc5453d553f0e29">clustered_variance_logregr</a> ()</td></tr>
+<tr class="separator:a3d702174c793b0c4afc5453d553f0e29"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4450b02e72471fa85f441b9abdc65ff8"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clustered__variance_8sql__in.html#a4450b02e72471fa85f441b9abdc65ff8">clustered_variance_logregr</a> (text msg)</td></tr>
+<tr class="separator:a4450b02e72471fa85f441b9abdc65ff8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adbddf55ce3fbb5c99024298566a33cf2"><td class="memItemLeft" align="right" valign="top">bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clustered__variance_8sql__in.html#adbddf55ce3fbb5c99024298566a33cf2">__clustered_err_log_transition</a> (bytea8 state, boolean y, float8[] x, float8[] coef)</td></tr>
+<tr class="separator:adbddf55ce3fbb5c99024298566a33cf2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab3dcbdb7edc8575a660656a2ce680d21"><td class="memItemLeft" align="right" valign="top">bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clustered__variance_8sql__in.html#ab3dcbdb7edc8575a660656a2ce680d21">__clustered_err_log_merge</a> (bytea8 state1, bytea8 state2)</td></tr>
+<tr class="separator:ab3dcbdb7edc8575a660656a2ce680d21"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a790988e40da04d13e5b56197d35546d8"><td class="memItemLeft" align="right" valign="top">__clustered_agg_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clustered__variance_8sql__in.html#a790988e40da04d13e5b56197d35546d8">__clustered_err_log_final</a> (bytea8 state)</td></tr>
+<tr class="separator:a790988e40da04d13e5b56197d35546d8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6f17f900dfce2d0a53a9f9ab06631386"><td class="memItemLeft" align="right" valign="top">aggregate __clustered_agg_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clustered__variance_8sql__in.html#a6f17f900dfce2d0a53a9f9ab06631386">__clustered_err_log_step</a> (boolean, float8[], float8[])</td></tr>
+<tr class="separator:a6f17f900dfce2d0a53a9f9ab06631386"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a621c23b2be30469873870797b1dab995"><td class="memItemLeft" align="right" valign="top">__clustered_log_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clustered__variance_8sql__in.html#a621c23b2be30469873870797b1dab995">__clustered_log_compute_stats</a> (float8[] coef, float8[] meatvec, float8[] breadvec, integer mcluster, integer numrows)</td></tr>
+<tr class="separator:a621c23b2be30469873870797b1dab995"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa72cfa6f9259cceea3e36b6db45a7624"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clustered__variance_8sql__in.html#aa72cfa6f9259cceea3e36b6db45a7624">clustered_variance_mlogregr</a> (text source_table, text out_table, text dependent_varname, text independent_varname, text cluster_varname, integer ref_category, text grouping_cols, text optimizer_params, boolean verbose_mode)</td></tr>
+<tr class="separator:aa72cfa6f9259cceea3e36b6db45a7624"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac614f56394b00ad9286c7c83a060b079"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clustered__variance_8sql__in.html#ac614f56394b00ad9286c7c83a060b079">clustered_variance_mlogregr</a> (text source_table, text out_table, text dependent_varname, text independent_varname, text cluster_varname, integer ref_category, text grouping_cols, text optimizer_params)</td></tr>
+<tr class="separator:ac614f56394b00ad9286c7c83a060b079"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a201adea876fbcf7f0d18685d0ae44ffb"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clustered__variance_8sql__in.html#a201adea876fbcf7f0d18685d0ae44ffb">clustered_variance_mlogregr</a> (text source_table, text out_table, text dependent_varname, text independent_varname, text cluster_varname, integer ref_category, text grouping_cols)</td></tr>
+<tr class="separator:a201adea876fbcf7f0d18685d0ae44ffb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7b2f2f1cc814cecb5b62bf28615fa8fe"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clustered__variance_8sql__in.html#a7b2f2f1cc814cecb5b62bf28615fa8fe">clustered_variance_mlogregr</a> (text source_table, text out_table, text dependent_varname, text independent_varname, text cluster_varname, integer ref_category)</td></tr>
+<tr class="separator:a7b2f2f1cc814cecb5b62bf28615fa8fe"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6438de2e98e86468ab741ee3c3b337da"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clustered__variance_8sql__in.html#a6438de2e98e86468ab741ee3c3b337da">clustered_variance_mlogregr</a> (text source_table, text out_table, text dependent_varname, text independent_varname, text cluster_varname)</td></tr>
+<tr class="separator:a6438de2e98e86468ab741ee3c3b337da"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7b55f727b8beea7cf06c1561bbffb6ca"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clustered__variance_8sql__in.html#a7b55f727b8beea7cf06c1561bbffb6ca">clustered_variance_mlogregr</a> ()</td></tr>
+<tr class="separator:a7b55f727b8beea7cf06c1561bbffb6ca"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a133a97d8eee41ed57ed0b16a592774e4"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clustered__variance_8sql__in.html#a133a97d8eee41ed57ed0b16a592774e4">clustered_variance_mlogregr</a> (text msg)</td></tr>
+<tr class="separator:a133a97d8eee41ed57ed0b16a592774e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aacb9639e3031010d9d69ab57ba2a5b1f"><td class="memItemLeft" align="right" valign="top">bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clustered__variance_8sql__in.html#aacb9639e3031010d9d69ab57ba2a5b1f">__clustered_err_mlog_transition</a> (bytea8 state, integer y, float8[] x, float8[] coef, integer num_cat, integer ref_cat)</td></tr>
+<tr class="separator:aacb9639e3031010d9d69ab57ba2a5b1f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a12b136a5f17b60527a0b38d0dd553c97"><td class="memItemLeft" align="right" valign="top">bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clustered__variance_8sql__in.html#a12b136a5f17b60527a0b38d0dd553c97">__clustered_err_mlog_merge</a> (bytea8 state1, bytea8 state2)</td></tr>
+<tr class="separator:a12b136a5f17b60527a0b38d0dd553c97"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adcf2cf1ec7b2a376be25ed3a0a466e67"><td class="memItemLeft" align="right" valign="top">__clustered_agg_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clustered__variance_8sql__in.html#adcf2cf1ec7b2a376be25ed3a0a466e67">__clustered_err_mlog_final</a> (bytea8 state)</td></tr>
+<tr class="separator:adcf2cf1ec7b2a376be25ed3a0a466e67"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad2112683f96b35cee6fcaa44a2831a49"><td class="memItemLeft" align="right" valign="top">aggregate __clustered_agg_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clustered__variance_8sql__in.html#ad2112683f96b35cee6fcaa44a2831a49">__clustered_err_mlog_step</a> (integer, float8[], float8[], integer, integer)</td></tr>
+<tr class="separator:ad2112683f96b35cee6fcaa44a2831a49"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5497d5be990c0efb11508b23f128f154"><td class="memItemLeft" align="right" valign="top">__clustered_mlog_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clustered__variance_8sql__in.html#a5497d5be990c0efb11508b23f128f154">__clustered_mlog_compute_stats</a> (float8[] coef, float8[] meatvec, float8[] breadvec, integer mcluster, integer numrows)</td></tr>
+<tr class="separator:a5497d5be990c0efb11508b23f128f154"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab6a6297525bcd589311d7e085b830123"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clustered__variance_8sql__in.html#ab6a6297525bcd589311d7e085b830123">clustered_variance_mlogregr</a> (text source_table, text out_table, text dependent_varname, text independent_varname, text cluster_varname, integer ref_category, text grouping_cols, integer max_iter, varchar optimizer, float8 tolerance, boolean verbose_mode)</td></tr>
+<tr class="separator:ab6a6297525bcd589311d7e085b830123"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa864a6c22942e33348725c6cf5a79a14"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clustered__variance_8sql__in.html#aa864a6c22942e33348725c6cf5a79a14">clustered_variance_mlogregr</a> (text source_table, text out_table, text dependent_varname, text independent_varname, text cluster_varname, integer ref_category, text grouping_cols, integer max_iter, varchar optimizer, float8 tolerance)</td></tr>
+<tr class="separator:aa864a6c22942e33348725c6cf5a79a14"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adec204a306e05ef8506b3b03e8e37ba3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clustered__variance_8sql__in.html#adec204a306e05ef8506b3b03e8e37ba3">clustered_variance_mlogregr</a> (text source_table, text out_table, text dependent_varname, text independent_varname, text cluster_varname, integer ref_category, text grouping_cols, integer max_iter, varchar optimizer)</td></tr>
+<tr class="separator:adec204a306e05ef8506b3b03e8e37ba3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7d90589980d2779a149a81513bab79e9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clustered__variance_8sql__in.html#a7d90589980d2779a149a81513bab79e9">clustered_variance_mlogregr</a> (text source_table, text out_table, text dependent_varname, text independent_varname, text cluster_varname, integer ref_category, text grouping_cols, integer max_iter)</td></tr>
+<tr class="separator:a7d90589980d2779a149a81513bab79e9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a2d33f7a6a98dfc92c6d4a017ceabbd9a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2d33f7a6a98dfc92c6d4a017ceabbd9a">&#9670;&nbsp;</a></span>__array_add()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __array_add </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>y</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a329c662f02c985ed68b886cf2bd29f37"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a329c662f02c985ed68b886cf2bd29f37">&#9670;&nbsp;</a></span>__array_sum()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] __array_sum </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[]</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ad772976f85e2f1dd3927f84a7f96e9ae"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad772976f85e2f1dd3927f84a7f96e9ae">&#9670;&nbsp;</a></span>__clustered_err_lin_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">__clustered_agg_result __clustered_err_lin_final </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a876867228d62f422f10c03dc93d1e9eb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a876867228d62f422f10c03dc93d1e9eb">&#9670;&nbsp;</a></span>__clustered_err_lin_merge()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea8 __clustered_err_lin_merge </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ad4b627f3a2aa513b8809e3fc2f5e4c5f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad4b627f3a2aa513b8809e3fc2f5e4c5f">&#9670;&nbsp;</a></span>__clustered_err_lin_step()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate __clustered_agg_result __clustered_err_lin_step </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[]&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab3548ff761b9d720e4db767dcf419e66"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab3548ff761b9d720e4db767dcf419e66">&#9670;&nbsp;</a></span>__clustered_err_lin_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea8 __clustered_err_lin_transition </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>coef</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a790988e40da04d13e5b56197d35546d8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a790988e40da04d13e5b56197d35546d8">&#9670;&nbsp;</a></span>__clustered_err_log_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">__clustered_agg_result __clustered_err_log_final </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab3dcbdb7edc8575a660656a2ce680d21"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab3dcbdb7edc8575a660656a2ce680d21">&#9670;&nbsp;</a></span>__clustered_err_log_merge()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea8 __clustered_err_log_merge </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a6f17f900dfce2d0a53a9f9ab06631386"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6f17f900dfce2d0a53a9f9ab06631386">&#9670;&nbsp;</a></span>__clustered_err_log_step()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate __clustered_agg_result __clustered_err_log_step </td>
+          <td>(</td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[]&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="adbddf55ce3fbb5c99024298566a33cf2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adbddf55ce3fbb5c99024298566a33cf2">&#9670;&nbsp;</a></span>__clustered_err_log_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea8 __clustered_err_log_transition </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>coef</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="adcf2cf1ec7b2a376be25ed3a0a466e67"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adcf2cf1ec7b2a376be25ed3a0a466e67">&#9670;&nbsp;</a></span>__clustered_err_mlog_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">__clustered_agg_result __clustered_err_mlog_final </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a12b136a5f17b60527a0b38d0dd553c97"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a12b136a5f17b60527a0b38d0dd553c97">&#9670;&nbsp;</a></span>__clustered_err_mlog_merge()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea8 __clustered_err_mlog_merge </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ad2112683f96b35cee6fcaa44a2831a49"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad2112683f96b35cee6fcaa44a2831a49">&#9670;&nbsp;</a></span>__clustered_err_mlog_step()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate __clustered_agg_result __clustered_err_mlog_step </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aacb9639e3031010d9d69ab57ba2a5b1f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aacb9639e3031010d9d69ab57ba2a5b1f">&#9670;&nbsp;</a></span>__clustered_err_mlog_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea8 __clustered_err_mlog_transition </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>coef</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_cat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>ref_cat</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="abebc8d70763c7264857b4b14d3ddf280"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abebc8d70763c7264857b4b14d3ddf280">&#9670;&nbsp;</a></span>__clustered_lin_compute_stats()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">__clustered_lin_result __clustered_lin_compute_stats </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>coef</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>meatvec</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>breadvec</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>mcluster</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>numrows</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a621c23b2be30469873870797b1dab995"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a621c23b2be30469873870797b1dab995">&#9670;&nbsp;</a></span>__clustered_log_compute_stats()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">__clustered_log_result __clustered_log_compute_stats </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>coef</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>meatvec</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>breadvec</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>mcluster</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>numrows</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5497d5be990c0efb11508b23f128f154"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5497d5be990c0efb11508b23f128f154">&#9670;&nbsp;</a></span>__clustered_mlog_compute_stats()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">__clustered_mlog_result __clustered_mlog_compute_stats </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>coef</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>meatvec</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>breadvec</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>mcluster</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>numrows</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="abaa6702a3482f65199ce64b8a14316d7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abaa6702a3482f65199ce64b8a14316d7">&#9670;&nbsp;</a></span>clustered_variance_linregr() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void clustered_variance_linregr </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>depvar</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>indvar</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>clustervar</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_col</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">source_table</td><td>Data table name </td></tr>
+    <tr><td class="paramname">out_table</td><td>The result table </td></tr>
+    <tr><td class="paramname">depvar</td><td>Dependent variable expression </td></tr>
+    <tr><td class="paramname">indvar</td><td>Independent variable expression </td></tr>
+    <tr><td class="paramname">clustervar</td><td>The expressions used to clustering </td></tr>
+    <tr><td class="paramname">grouping_col</td><td>The names of grouping columns </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="adb6227023444552a37f3ea52502b1c37"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adb6227023444552a37f3ea52502b1c37">&#9670;&nbsp;</a></span>clustered_variance_linregr() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void clustered_variance_linregr </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>depvar</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>indvar</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>clustervar</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a0548d26efc4f0b22c41516dabcd7d32b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0548d26efc4f0b22c41516dabcd7d32b">&#9670;&nbsp;</a></span>clustered_variance_linregr() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text clustered_variance_linregr </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ade1843a5cf8c7c72fb1aae07d82d5a4e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ade1843a5cf8c7c72fb1aae07d82d5a4e">&#9670;&nbsp;</a></span>clustered_variance_linregr() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text clustered_variance_linregr </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>msg</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a0debc923b0494f8259938d9c6f5cdbcd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0debc923b0494f8259938d9c6f5cdbcd">&#9670;&nbsp;</a></span>clustered_variance_logregr() <span class="overload">[1/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void clustered_variance_logregr </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>depvar</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>indvar</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>clustervar</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_iter</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>optimizer</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>tolerance</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>verbose_mode</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5d526752e92cbe1282bf581c49f9c31c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5d526752e92cbe1282bf581c49f9c31c">&#9670;&nbsp;</a></span>clustered_variance_logregr() <span class="overload">[2/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void clustered_variance_logregr </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>depvar</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>indvar</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>clustervar</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab060fb03fdcab9e702024eee940ba61c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab060fb03fdcab9e702024eee940ba61c">&#9670;&nbsp;</a></span>clustered_variance_logregr() <span class="overload">[3/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void clustered_variance_logregr </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>depvar</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>indvar</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>clustervar</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_col</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab58eebaf13ef21e59e50362fe9ad658f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab58eebaf13ef21e59e50362fe9ad658f">&#9670;&nbsp;</a></span>clustered_variance_logregr() <span class="overload">[4/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void clustered_variance_logregr </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>depvar</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>indvar</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>clustervar</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_iter</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8d8bd2b7d26981e7de10597222d99f7c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8d8bd2b7d26981e7de10597222d99f7c">&#9670;&nbsp;</a></span>clustered_variance_logregr() <span class="overload">[5/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void clustered_variance_logregr </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>depvar</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>indvar</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>clustervar</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_iter</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>optimizer</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5c10605246186fc87442274b66948f52"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5c10605246186fc87442274b66948f52">&#9670;&nbsp;</a></span>clustered_variance_logregr() <span class="overload">[6/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void clustered_variance_logregr </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>depvar</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>indvar</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>clustervar</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_iter</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>optimizer</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>tolerance</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a3d702174c793b0c4afc5453d553f0e29"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3d702174c793b0c4afc5453d553f0e29">&#9670;&nbsp;</a></span>clustered_variance_logregr() <span class="overload">[7/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text clustered_variance_logregr </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a4450b02e72471fa85f441b9abdc65ff8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4450b02e72471fa85f441b9abdc65ff8">&#9670;&nbsp;</a></span>clustered_variance_logregr() <span class="overload">[8/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text clustered_variance_logregr </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>msg</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa72cfa6f9259cceea3e36b6db45a7624"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa72cfa6f9259cceea3e36b6db45a7624">&#9670;&nbsp;</a></span>clustered_variance_mlogregr() <span class="overload">[1/11]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void clustered_variance_mlogregr </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>cluster_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>ref_category</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>optimizer_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>verbose_mode</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac614f56394b00ad9286c7c83a060b079"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac614f56394b00ad9286c7c83a060b079">&#9670;&nbsp;</a></span>clustered_variance_mlogregr() <span class="overload">[2/11]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void clustered_variance_mlogregr </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>cluster_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>ref_category</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>optimizer_params</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a201adea876fbcf7f0d18685d0ae44ffb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a201adea876fbcf7f0d18685d0ae44ffb">&#9670;&nbsp;</a></span>clustered_variance_mlogregr() <span class="overload">[3/11]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void clustered_variance_mlogregr </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>cluster_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>ref_category</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7b2f2f1cc814cecb5b62bf28615fa8fe"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7b2f2f1cc814cecb5b62bf28615fa8fe">&#9670;&nbsp;</a></span>clustered_variance_mlogregr() <span class="overload">[4/11]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void clustered_variance_mlogregr </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>cluster_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>ref_category</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a6438de2e98e86468ab741ee3c3b337da"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6438de2e98e86468ab741ee3c3b337da">&#9670;&nbsp;</a></span>clustered_variance_mlogregr() <span class="overload">[5/11]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void clustered_variance_mlogregr </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>cluster_varname</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7b55f727b8beea7cf06c1561bbffb6ca"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7b55f727b8beea7cf06c1561bbffb6ca">&#9670;&nbsp;</a></span>clustered_variance_mlogregr() <span class="overload">[6/11]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text clustered_variance_mlogregr </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a133a97d8eee41ed57ed0b16a592774e4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a133a97d8eee41ed57ed0b16a592774e4">&#9670;&nbsp;</a></span>clustered_variance_mlogregr() <span class="overload">[7/11]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text clustered_variance_mlogregr </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>msg</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab6a6297525bcd589311d7e085b830123"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab6a6297525bcd589311d7e085b830123">&#9670;&nbsp;</a></span>clustered_variance_mlogregr() <span class="overload">[8/11]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void clustered_variance_mlogregr </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>cluster_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>ref_category</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_iter</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>optimizer</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>tolerance</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>verbose_mode</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa864a6c22942e33348725c6cf5a79a14"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa864a6c22942e33348725c6cf5a79a14">&#9670;&nbsp;</a></span>clustered_variance_mlogregr() <span class="overload">[9/11]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void clustered_variance_mlogregr </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>cluster_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>ref_category</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_iter</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>optimizer</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>tolerance</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="adec204a306e05ef8506b3b03e8e37ba3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adec204a306e05ef8506b3b03e8e37ba3">&#9670;&nbsp;</a></span>clustered_variance_mlogregr() <span class="overload">[10/11]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void clustered_variance_mlogregr </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>cluster_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>ref_category</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_iter</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>optimizer</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7d90589980d2779a149a81513bab79e9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7d90589980d2779a149a81513bab79e9">&#9670;&nbsp;</a></span>clustered_variance_mlogregr() <span class="overload">[11/11]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void clustered_variance_mlogregr </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>cluster_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>ref_category</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_iter</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_ac52a4b89b7b1b1591f2952b5cbd041a.html">regress</a></li><li class="navelem"><a class="el" href="clustered__variance_8sql__in.html">clustered_variance.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:56 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/clustered__variance__coxph_8sql__in.html b/docs/rc/clustered__variance__coxph_8sql__in.html
new file mode 100644
index 0000000..3a19cdc
--- /dev/null
+++ b/docs/rc/clustered__variance__coxph_8sql__in.html
@@ -0,0 +1,489 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: clustered_variance_coxph.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('clustered__variance__coxph_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">clustered_variance_coxph.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>SQL functions for clustered robust cox proportional hazards regression.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a91f46572f245f34c9fe92d0ec806a998"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clustered__variance__coxph_8sql__in.html#a91f46572f245f34c9fe92d0ec806a998">clustered_variance_coxph</a> ()</td></tr>
+<tr class="separator:a91f46572f245f34c9fe92d0ec806a998"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9e6c0f27cb3ba9ad583055c96c847795"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clustered__variance__coxph_8sql__in.html#a9e6c0f27cb3ba9ad583055c96c847795">clustered_variance_coxph</a> (varchar message)</td></tr>
+<tr class="separator:a9e6c0f27cb3ba9ad583055c96c847795"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acc0a2119671931eea54e021a4db6168c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clustered__variance__coxph_8sql__in.html#acc0a2119671931eea54e021a4db6168c">clustered_variance_coxph</a> (text model_table, text output_table, text clustervar)</td></tr>
+<tr class="separator:acc0a2119671931eea54e021a4db6168c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7081022015c00a14ecca27e017a4458b"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clustered__variance__coxph_8sql__in.html#a7081022015c00a14ecca27e017a4458b">coxph_a_b_transition</a> (float8[], integer, boolean, float8[], float8)</td></tr>
+<tr class="separator:a7081022015c00a14ecca27e017a4458b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a62bff141ced5972df28ceecdfe522888"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clustered__variance__coxph_8sql__in.html#a62bff141ced5972df28ceecdfe522888">coxph_a_b_merge</a> (float8[], float8[])</td></tr>
+<tr class="separator:a62bff141ced5972df28ceecdfe522888"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2373d116ad1e2b2090f8c23a0c15edb5"><td class="memItemLeft" align="right" valign="top">__coxph_a_b_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clustered__variance__coxph_8sql__in.html#a2373d116ad1e2b2090f8c23a0c15edb5">coxph_a_b_final</a> (float8[])</td></tr>
+<tr class="separator:a2373d116ad1e2b2090f8c23a0c15edb5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5f5ca89e3265e170c325125e61ef191d"><td class="memItemLeft" align="right" valign="top">aggregate __coxph_a_b_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clustered__variance__coxph_8sql__in.html#a5f5ca89e3265e170c325125e61ef191d">coxph_a_b</a> (integer, boolean, float8[], float8)</td></tr>
+<tr class="separator:a5f5ca89e3265e170c325125e61ef191d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a523e61b6d56c8ff59fa8ae3121073a49"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clustered__variance__coxph_8sql__in.html#a523e61b6d56c8ff59fa8ae3121073a49">coxph_compute_w</a> (float8[] x, boolean status, float8[] coef, float8[] h, float8 s, float8 a, float8[] b)</td></tr>
+<tr class="separator:a523e61b6d56c8ff59fa8ae3121073a49"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a713f413fc571244b7cec6c0084a61eb9"><td class="memItemLeft" align="right" valign="top">__coxph_cl_var_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clustered__variance__coxph_8sql__in.html#a713f413fc571244b7cec6c0084a61eb9">coxph_compute_clustered_stats</a> (float8[] coef, float8[] hessian, float8[] a)</td></tr>
+<tr class="separator:a713f413fc571244b7cec6c0084a61eb9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abaeae5d6cd30db4b06a49d24d714812e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clustered__variance__coxph_8sql__in.html#abaeae5d6cd30db4b06a49d24d714812e">robust_variance_coxph</a> (varchar model_table, varchar output_table, varchar clustervar)</td></tr>
+<tr class="separator:abaeae5d6cd30db4b06a49d24d714812e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><dl class="section date"><dt>Date</dt><dd>Oct 2013</dd></dl>
+<dl class="section see"><dt>See also</dt><dd>For a brief introduction to clustered robust cox regression, see the module description <a class="el" href="group__grp__clustered__errors.html">Clustered Variance</a> </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="a91f46572f245f34c9fe92d0ec806a998"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a91f46572f245f34c9fe92d0ec806a998">&#9670;&nbsp;</a></span>clustered_variance_coxph() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar clustered_variance_coxph </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a9e6c0f27cb3ba9ad583055c96c847795"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9e6c0f27cb3ba9ad583055c96c847795">&#9670;&nbsp;</a></span>clustered_variance_coxph() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar clustered_variance_coxph </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="acc0a2119671931eea54e021a4db6168c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acc0a2119671931eea54e021a4db6168c">&#9670;&nbsp;</a></span>clustered_variance_coxph() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void clustered_variance_coxph </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>clustervar</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5f5ca89e3265e170c325125e61ef191d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5f5ca89e3265e170c325125e61ef191d">&#9670;&nbsp;</a></span>coxph_a_b()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate __coxph_a_b_result coxph_a_b </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a2373d116ad1e2b2090f8c23a0c15edb5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2373d116ad1e2b2090f8c23a0c15edb5">&#9670;&nbsp;</a></span>coxph_a_b_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">__coxph_a_b_result coxph_a_b_final </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[]</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a62bff141ced5972df28ceecdfe522888"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a62bff141ced5972df28ceecdfe522888">&#9670;&nbsp;</a></span>coxph_a_b_merge()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] coxph_a_b_merge </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[]&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7081022015c00a14ecca27e017a4458b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7081022015c00a14ecca27e017a4458b">&#9670;&nbsp;</a></span>coxph_a_b_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] coxph_a_b_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a713f413fc571244b7cec6c0084a61eb9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a713f413fc571244b7cec6c0084a61eb9">&#9670;&nbsp;</a></span>coxph_compute_clustered_stats()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">__coxph_cl_var_result coxph_compute_clustered_stats </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>coef</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>hessian</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>a</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a523e61b6d56c8ff59fa8ae3121073a49"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a523e61b6d56c8ff59fa8ae3121073a49">&#9670;&nbsp;</a></span>coxph_compute_w()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] coxph_compute_w </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>status</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>coef</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>h</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>s</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>a</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>b</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="abaeae5d6cd30db4b06a49d24d714812e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abaeae5d6cd30db4b06a49d24d714812e">&#9670;&nbsp;</a></span>robust_variance_coxph()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void robust_variance_coxph </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>clustervar</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_505cd743a8a717435eca324f49291a46.html">stats</a></li><li class="navelem"><a class="el" href="clustered__variance__coxph_8sql__in.html">clustered_variance_coxph.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:56 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/cols2vec_8sql__in.html b/docs/rc/cols2vec_8sql__in.html
new file mode 100644
index 0000000..d76da84
--- /dev/null
+++ b/docs/rc/cols2vec_8sql__in.html
@@ -0,0 +1,309 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: cols2vec.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('cols2vec_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">cols2vec.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>A set of utilities to ease basic table transformations (such as *aggregating multiple columns in an array)  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ae8b2fa9bc82ffb1ed0ca970803dca07a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cols2vec_8sql__in.html#ae8b2fa9bc82ffb1ed0ca970803dca07a">cols2vec</a> (varchar source_table, varchar output_table, varchar list_of_features, varchar list_of_features_to_exclude, varchar cols_to_output)</td></tr>
+<tr class="separator:ae8b2fa9bc82ffb1ed0ca970803dca07a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa8faa742795f4084309c9a87bc2e8c83"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cols2vec_8sql__in.html#aa8faa742795f4084309c9a87bc2e8c83">cols2vec</a> (varchar source_table, varchar output_table, varchar list_of_features, varchar list_of_features_to_exclude)</td></tr>
+<tr class="separator:aa8faa742795f4084309c9a87bc2e8c83"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5b9abee9bb093b05b1e4d4c67ad81126"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cols2vec_8sql__in.html#a5b9abee9bb093b05b1e4d4c67ad81126">cols2vec</a> (varchar source_table, varchar output_table, varchar list_of_features)</td></tr>
+<tr class="separator:a5b9abee9bb093b05b1e4d4c67ad81126"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a68b12d4f57f8ba33643b698c7ccb98c5"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cols2vec_8sql__in.html#a68b12d4f57f8ba33643b698c7ccb98c5">cols2vec</a> (text message)</td></tr>
+<tr class="separator:a68b12d4f57f8ba33643b698c7ccb98c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a116d49e418babfcc6a93e75f79154d66"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cols2vec_8sql__in.html#a116d49e418babfcc6a93e75f79154d66">cols2vec</a> ()</td></tr>
+<tr class="separator:a116d49e418babfcc6a93e75f79154d66"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>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</p>
+<p><a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a></p>
+<p>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.</p>
+<dl class="section date"><dt>Date</dt><dd>July 2018 </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="ae8b2fa9bc82ffb1ed0ca970803dca07a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae8b2fa9bc82ffb1ed0ca970803dca07a">&#9670;&nbsp;</a></span>cols2vec() <span class="overload">[1/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cols2vec </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>list_of_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>list_of_features_to_exclude</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>cols_to_output</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa8faa742795f4084309c9a87bc2e8c83"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa8faa742795f4084309c9a87bc2e8c83">&#9670;&nbsp;</a></span>cols2vec() <span class="overload">[2/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cols2vec </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>list_of_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>list_of_features_to_exclude</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5b9abee9bb093b05b1e4d4c67ad81126"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5b9abee9bb093b05b1e4d4c67ad81126">&#9670;&nbsp;</a></span>cols2vec() <span class="overload">[3/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cols2vec </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>list_of_features</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a68b12d4f57f8ba33643b698c7ccb98c5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a68b12d4f57f8ba33643b698c7ccb98c5">&#9670;&nbsp;</a></span>cols2vec() <span class="overload">[4/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text cols2vec </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a116d49e418babfcc6a93e75f79154d66"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a116d49e418babfcc6a93e75f79154d66">&#9670;&nbsp;</a></span>cols2vec() <span class="overload">[5/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text cols2vec </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_8d53e1c0026e7e34b4cd68f8b91426d6.html">utilities</a></li><li class="navelem"><a class="el" href="cols2vec_8sql__in.html">cols2vec.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:56 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/conjugate__gradient_8sql__in.html b/docs/rc/conjugate__gradient_8sql__in.html
new file mode 100644
index 0000000..ff13ac0
--- /dev/null
+++ b/docs/rc/conjugate__gradient_8sql__in.html
@@ -0,0 +1,256 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: conjugate_gradient.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('conjugate__gradient_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">conjugate_gradient.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>SQL function computing Conjugate Gradient.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ab94e8a12cc9c2d0dac35168721ec8585"><td class="memItemLeft" align="right" valign="top">float []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="conjugate__gradient_8sql__in.html#ab94e8a12cc9c2d0dac35168721ec8585">conjugate_gradient</a> (text matrix, text val_id, text row_id, float[] b, float precision_limit, int verbosity)</td></tr>
+<tr class="memdesc:ab94e8a12cc9c2d0dac35168721ec8585"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute conjugate gradient.  <a href="#ab94e8a12cc9c2d0dac35168721ec8585">More...</a><br /></td></tr>
+<tr class="separator:ab94e8a12cc9c2d0dac35168721ec8585"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abe53a640e2287e06587eb1541fb6b4a3"><td class="memItemLeft" align="right" valign="top">float []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="conjugate__gradient_8sql__in.html#abe53a640e2287e06587eb1541fb6b4a3">conjugate_gradient</a> (text matrix, text val_id, text row_id, float[] b, float precision_limit)</td></tr>
+<tr class="separator:abe53a640e2287e06587eb1541fb6b4a3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><dl class="section date"><dt>Date</dt><dd>March 2011 </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="ab94e8a12cc9c2d0dac35168721ec8585"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab94e8a12cc9c2d0dac35168721ec8585">&#9670;&nbsp;</a></span>conjugate_gradient() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float [] conjugate_gradient </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>val_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float []&#160;</td>
+          <td class="paramname"><em>b</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float&#160;</td>
+          <td class="paramname"><em>precision_limit</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>verbosity</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">matrix</td><td>Name of the table containing argument matrix A </td></tr>
+    <tr><td class="paramname">val_id</td><td>Name of the column contains row values </td></tr>
+    <tr><td class="paramname">row_id</td><td>Name of the column contains row number </td></tr>
+    <tr><td class="paramname">b</td><td>Array containing values of b </td></tr>
+    <tr><td class="paramname">precision_limit</td><td>Precision threshold after which process will terminate </td></tr>
+    <tr><td class="paramname">verbosity</td><td>Verbose flag (0 = false, 1 = true) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Array containing values of x </dd></dl>
+
+</div>
+</div>
+<a id="abe53a640e2287e06587eb1541fb6b4a3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abe53a640e2287e06587eb1541fb6b4a3">&#9670;&nbsp;</a></span>conjugate_gradient() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float [] conjugate_gradient </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>val_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float []&#160;</td>
+          <td class="paramname"><em>b</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float&#160;</td>
+          <td class="paramname"><em>precision_limit</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_42e4eb27424bda9fbbfa95509de09bad.html">conjugate_gradient</a></li><li class="navelem"><a class="el" href="conjugate__gradient_8sql__in.html">conjugate_gradient.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:56 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/correlation_8sql__in.html b/docs/rc/correlation_8sql__in.html
new file mode 100644
index 0000000..521a5bd
--- /dev/null
+++ b/docs/rc/correlation_8sql__in.html
@@ -0,0 +1,786 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: correlation.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('correlation_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">correlation.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>SQL functions for correlation computation.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ae6223d0ba3e2b8a2d298ee78a293be6a"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="correlation_8sql__in.html#ae6223d0ba3e2b8a2d298ee78a293be6a">correlation_transition</a> (float8[] state, float8[] x, float8[] <a class="el" href="svec__util_8sql__in.html#a546b947319c9f48237120a31929bdfd9">mean</a>)</td></tr>
+<tr class="separator:ae6223d0ba3e2b8a2d298ee78a293be6a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac53cf4dd28185715a1798176bce44b1b"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="correlation_8sql__in.html#ac53cf4dd28185715a1798176bce44b1b">correlation_merge</a> (float8[] left_state, float8[] right_state)</td></tr>
+<tr class="separator:ac53cf4dd28185715a1798176bce44b1b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a85a1a9b0ae5e608fd235f08ae01ff966"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="correlation_8sql__in.html#a85a1a9b0ae5e608fd235f08ae01ff966">correlation_final</a> (float8[] state)</td></tr>
+<tr class="separator:a85a1a9b0ae5e608fd235f08ae01ff966"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1c3081444f6bafc88a9b377f2af32968"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="correlation_8sql__in.html#a1c3081444f6bafc88a9b377f2af32968">correlation_agg</a> (float8[], float8[])</td></tr>
+<tr class="separator:a1c3081444f6bafc88a9b377f2af32968"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5c4f4adaf75fe3406bf1d0a20f8512ac"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="correlation_8sql__in.html#a5c4f4adaf75fe3406bf1d0a20f8512ac">covariance_agg</a> (float8[], float8[])</td></tr>
+<tr class="separator:a5c4f4adaf75fe3406bf1d0a20f8512ac"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a91bb3c218f470e1184a1c16b66307393"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="correlation_8sql__in.html#a91bb3c218f470e1184a1c16b66307393">correlation</a> (varchar source_table, varchar output_table, varchar target_cols, boolean verbose, varchar grouping_cols, integer n_groups_per_run)</td></tr>
+<tr class="separator:a91bb3c218f470e1184a1c16b66307393"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a23198d24ba486323eea49bb2ef97ddb8"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="correlation_8sql__in.html#a23198d24ba486323eea49bb2ef97ddb8">correlation</a> (varchar source_table, varchar output_table, varchar target_cols, boolean verbose, varchar grouping_cols)</td></tr>
+<tr class="separator:a23198d24ba486323eea49bb2ef97ddb8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ada17a10ea8a6c4580e7413c86ae5345e"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="correlation_8sql__in.html#ada17a10ea8a6c4580e7413c86ae5345e">correlation</a> (varchar source_table, varchar output_table, varchar target_cols, boolean verbose)</td></tr>
+<tr class="separator:ada17a10ea8a6c4580e7413c86ae5345e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a30437d71937df60681be42769d5d3a29"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="correlation_8sql__in.html#a30437d71937df60681be42769d5d3a29">correlation</a> (varchar source_table, varchar output_table, varchar target_cols)</td></tr>
+<tr class="separator:a30437d71937df60681be42769d5d3a29"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a79c79a64e2145e640e410d8ebae078f7"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="correlation_8sql__in.html#a79c79a64e2145e640e410d8ebae078f7">correlation</a> (varchar source_table, varchar output_table)</td></tr>
+<tr class="separator:a79c79a64e2145e640e410d8ebae078f7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a703be245d20fa6ac1cc1ae433f08c4eb"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="correlation_8sql__in.html#a703be245d20fa6ac1cc1ae433f08c4eb">correlation</a> (text input_message)</td></tr>
+<tr class="separator:a703be245d20fa6ac1cc1ae433f08c4eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad81ac0ea4b9675fe257b2f5c2cee385e"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="correlation_8sql__in.html#ad81ac0ea4b9675fe257b2f5c2cee385e">correlation</a> ()</td></tr>
+<tr class="separator:ad81ac0ea4b9675fe257b2f5c2cee385e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afee4f63248d2030dbc7ee37697e3c7e1"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="correlation_8sql__in.html#afee4f63248d2030dbc7ee37697e3c7e1">covariance</a> (varchar source_table, varchar output_table, varchar target_cols, boolean verbose, varchar grouping_cols, integer n_groups_per_run)</td></tr>
+<tr class="separator:afee4f63248d2030dbc7ee37697e3c7e1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab2b75724c8361482265991e13f0f34e9"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="correlation_8sql__in.html#ab2b75724c8361482265991e13f0f34e9">covariance</a> (varchar source_table, varchar output_table, varchar target_cols, boolean verbose, varchar grouping_cols)</td></tr>
+<tr class="separator:ab2b75724c8361482265991e13f0f34e9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa962df7076b6a57914e766c8ab4fea78"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="correlation_8sql__in.html#aa962df7076b6a57914e766c8ab4fea78">covariance</a> (varchar source_table, varchar output_table, varchar target_cols, boolean verbose)</td></tr>
+<tr class="separator:aa962df7076b6a57914e766c8ab4fea78"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a63aaa72fa4a4003a4b92b0b46eb69e00"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="correlation_8sql__in.html#a63aaa72fa4a4003a4b92b0b46eb69e00">covariance</a> (varchar source_table, varchar output_table, varchar target_cols)</td></tr>
+<tr class="separator:a63aaa72fa4a4003a4b92b0b46eb69e00"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ada9ca243ead62cda1ec4faf8940e9b52"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="correlation_8sql__in.html#ada9ca243ead62cda1ec4faf8940e9b52">covariance</a> (varchar source_table, varchar output_table)</td></tr>
+<tr class="separator:ada9ca243ead62cda1ec4faf8940e9b52"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a986c54ff5cc92d3d530b494a8ee6f112"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="correlation_8sql__in.html#a986c54ff5cc92d3d530b494a8ee6f112">covariance</a> (text input_message)</td></tr>
+<tr class="separator:a986c54ff5cc92d3d530b494a8ee6f112"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3ef3717dbd8916187ea111b933a52470"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="correlation_8sql__in.html#a3ef3717dbd8916187ea111b933a52470">covariance</a> ()</td></tr>
+<tr class="separator:a3ef3717dbd8916187ea111b933a52470"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><dl class="section date"><dt>Date</dt><dd>April 2013</dd></dl>
+<dl class="section see"><dt>See also</dt><dd>For a brief introduction to <a class="el" href="correlation_8sql__in.html#a91bb3c218f470e1184a1c16b66307393">correlation</a>, see the module description <a class="el" href="group__grp__correlation.html">Covariance and Correlation</a> </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="a91bb3c218f470e1184a1c16b66307393"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a91bb3c218f470e1184a1c16b66307393">&#9670;&nbsp;</a></span>correlation() <span class="overload">[1/7]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text correlation </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>target_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>verbose</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>n_groups_per_run</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a23198d24ba486323eea49bb2ef97ddb8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a23198d24ba486323eea49bb2ef97ddb8">&#9670;&nbsp;</a></span>correlation() <span class="overload">[2/7]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text correlation </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>target_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>verbose</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ada17a10ea8a6c4580e7413c86ae5345e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ada17a10ea8a6c4580e7413c86ae5345e">&#9670;&nbsp;</a></span>correlation() <span class="overload">[3/7]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text correlation </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>target_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>verbose</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a30437d71937df60681be42769d5d3a29"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a30437d71937df60681be42769d5d3a29">&#9670;&nbsp;</a></span>correlation() <span class="overload">[4/7]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text correlation </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>target_cols</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a79c79a64e2145e640e410d8ebae078f7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a79c79a64e2145e640e410d8ebae078f7">&#9670;&nbsp;</a></span>correlation() <span class="overload">[5/7]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text correlation </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a703be245d20fa6ac1cc1ae433f08c4eb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a703be245d20fa6ac1cc1ae433f08c4eb">&#9670;&nbsp;</a></span>correlation() <span class="overload">[6/7]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text correlation </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>input_message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ad81ac0ea4b9675fe257b2f5c2cee385e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad81ac0ea4b9675fe257b2f5c2cee385e">&#9670;&nbsp;</a></span>correlation() <span class="overload">[7/7]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text correlation </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1c3081444f6bafc88a9b377f2af32968"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1c3081444f6bafc88a9b377f2af32968">&#9670;&nbsp;</a></span>correlation_agg()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] correlation_agg </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[]&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a85a1a9b0ae5e608fd235f08ae01ff966"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a85a1a9b0ae5e608fd235f08ae01ff966">&#9670;&nbsp;</a></span>correlation_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] correlation_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac53cf4dd28185715a1798176bce44b1b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac53cf4dd28185715a1798176bce44b1b">&#9670;&nbsp;</a></span>correlation_merge()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] correlation_merge </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>left_state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>right_state</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae6223d0ba3e2b8a2d298ee78a293be6a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae6223d0ba3e2b8a2d298ee78a293be6a">&#9670;&nbsp;</a></span>correlation_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] correlation_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>mean</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="afee4f63248d2030dbc7ee37697e3c7e1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afee4f63248d2030dbc7ee37697e3c7e1">&#9670;&nbsp;</a></span>covariance() <span class="overload">[1/7]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text covariance </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>target_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>verbose</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>n_groups_per_run</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab2b75724c8361482265991e13f0f34e9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab2b75724c8361482265991e13f0f34e9">&#9670;&nbsp;</a></span>covariance() <span class="overload">[2/7]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text covariance </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>target_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>verbose</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa962df7076b6a57914e766c8ab4fea78"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa962df7076b6a57914e766c8ab4fea78">&#9670;&nbsp;</a></span>covariance() <span class="overload">[3/7]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text covariance </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>target_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>verbose</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a63aaa72fa4a4003a4b92b0b46eb69e00"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a63aaa72fa4a4003a4b92b0b46eb69e00">&#9670;&nbsp;</a></span>covariance() <span class="overload">[4/7]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text covariance </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>target_cols</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ada9ca243ead62cda1ec4faf8940e9b52"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ada9ca243ead62cda1ec4faf8940e9b52">&#9670;&nbsp;</a></span>covariance() <span class="overload">[5/7]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text covariance </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a986c54ff5cc92d3d530b494a8ee6f112"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a986c54ff5cc92d3d530b494a8ee6f112">&#9670;&nbsp;</a></span>covariance() <span class="overload">[6/7]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text covariance </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>input_message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a3ef3717dbd8916187ea111b933a52470"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3ef3717dbd8916187ea111b933a52470">&#9670;&nbsp;</a></span>covariance() <span class="overload">[7/7]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text covariance </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5c4f4adaf75fe3406bf1d0a20f8512ac"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5c4f4adaf75fe3406bf1d0a20f8512ac">&#9670;&nbsp;</a></span>covariance_agg()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] covariance_agg </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[]&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_505cd743a8a717435eca324f49291a46.html">stats</a></li><li class="navelem"><a class="el" href="correlation_8sql__in.html">correlation.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:56 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/cox__prop__hazards_8sql__in.html b/docs/rc/cox__prop__hazards_8sql__in.html
new file mode 100644
index 0000000..f7a612e
--- /dev/null
+++ b/docs/rc/cox__prop__hazards_8sql__in.html
@@ -0,0 +1,2143 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: cox_prop_hazards.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('cox__prop__hazards_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">cox_prop_hazards.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>SQL functions for cox proportional hazards.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a0ffc559f8f54d7ea49c8d1a865ef5a37"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#a0ffc559f8f54d7ea49c8d1a865ef5a37">array_avg_transition</a> (float8[] state, float8[] x, boolean use_abs)</td></tr>
+<tr class="separator:a0ffc559f8f54d7ea49c8d1a865ef5a37"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a45bd6774621ad8fe0baa9427f7ce8fd4"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#a45bd6774621ad8fe0baa9427f7ce8fd4">array_avg_merge</a> (float8[] left, float8[] right)</td></tr>
+<tr class="separator:a45bd6774621ad8fe0baa9427f7ce8fd4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1f5594f3a1199bfd91d7479292e25b5c"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#a1f5594f3a1199bfd91d7479292e25b5c">array_avg_final</a> (float8[] state)</td></tr>
+<tr class="separator:a1f5594f3a1199bfd91d7479292e25b5c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5734f5796a403ebf2e765cba136f54c8"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#a5734f5796a403ebf2e765cba136f54c8">array_avg</a> (float8[], boolean)</td></tr>
+<tr class="separator:a5734f5796a403ebf2e765cba136f54c8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a737450bbfe0f10204b0074a9d45b0cef"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#a737450bbfe0f10204b0074a9d45b0cef">coxph_train</a> (varchar source_table, varchar output_table, varchar dependent_varname, varchar independent_varname, varchar right_censoring_status, varchar strata, varchar optimizer_params)</td></tr>
+<tr class="memdesc:a737450bbfe0f10204b0074a9d45b0cef"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute cox-regression coefficients and diagnostic statistics.  <a href="#a737450bbfe0f10204b0074a9d45b0cef">More...</a><br /></td></tr>
+<tr class="separator:a737450bbfe0f10204b0074a9d45b0cef"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae7edb9499e07fdf835c3bbc297a99c01"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#ae7edb9499e07fdf835c3bbc297a99c01">coxph_train</a> ()</td></tr>
+<tr class="separator:ae7edb9499e07fdf835c3bbc297a99c01"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6f527631dc32178716221cc9dfa1fde4"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#a6f527631dc32178716221cc9dfa1fde4">coxph_train</a> (varchar message)</td></tr>
+<tr class="separator:a6f527631dc32178716221cc9dfa1fde4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3fd1cd09fd5de41d6dc8aca0a18eec8b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#a3fd1cd09fd5de41d6dc8aca0a18eec8b">coxph_train</a> (varchar source_table, varchar output_table, varchar dependent_variable, varchar independent_variable, varchar right_censoring_status, varchar strata)</td></tr>
+<tr class="memdesc:a3fd1cd09fd5de41d6dc8aca0a18eec8b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Cox regression training function.  <a href="#a3fd1cd09fd5de41d6dc8aca0a18eec8b">More...</a><br /></td></tr>
+<tr class="separator:a3fd1cd09fd5de41d6dc8aca0a18eec8b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afd5fb08d419aab4a8b8eb103afa30f29"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#afd5fb08d419aab4a8b8eb103afa30f29">coxph_train</a> (varchar source_table, varchar output_table, varchar dependent_variable, varchar independent_variable, varchar right_censoring_status)</td></tr>
+<tr class="memdesc:afd5fb08d419aab4a8b8eb103afa30f29"><td class="mdescLeft">&#160;</td><td class="mdescRight">Cox regression training function.  <a href="#afd5fb08d419aab4a8b8eb103afa30f29">More...</a><br /></td></tr>
+<tr class="separator:afd5fb08d419aab4a8b8eb103afa30f29"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a76aeb28f6e0fc47fd59c0d6c6c7be063"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#a76aeb28f6e0fc47fd59c0d6c6c7be063">coxph_train</a> (varchar source_table, varchar output_table, varchar dependent_variable, varchar independent_variable)</td></tr>
+<tr class="memdesc:a76aeb28f6e0fc47fd59c0d6c6c7be063"><td class="mdescLeft">&#160;</td><td class="mdescRight">Cox regression training function.  <a href="#a76aeb28f6e0fc47fd59c0d6c6c7be063">More...</a><br /></td></tr>
+<tr class="separator:a76aeb28f6e0fc47fd59c0d6c6c7be063"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0ad613a529ee147565a605d6f443a4bd"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#a0ad613a529ee147565a605d6f443a4bd">coxph_predict</a> (text model_table, text source_table, text id_col_name, text output_table, text pred_type, text reference)</td></tr>
+<tr class="memdesc:a0ad613a529ee147565a605d6f443a4bd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Predict the linear Predictor or the risk for the given data.  <a href="#a0ad613a529ee147565a605d6f443a4bd">More...</a><br /></td></tr>
+<tr class="separator:a0ad613a529ee147565a605d6f443a4bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a815961d52fb8ce998071eb92056ee1dd"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#a815961d52fb8ce998071eb92056ee1dd">coxph_predict</a> (text model_table, text source_table, text id_col_name, text output_table, text pred_type)</td></tr>
+<tr class="separator:a815961d52fb8ce998071eb92056ee1dd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acd445fe632e93b2c8260b0455478e2e5"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#acd445fe632e93b2c8260b0455478e2e5">coxph_predict</a> (text model_table, text source_table, text id_col_name, text output_table)</td></tr>
+<tr class="separator:acd445fe632e93b2c8260b0455478e2e5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1d53d501174ed20ace7108db2ca8863d"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#a1d53d501174ed20ace7108db2ca8863d">_coxph_predict_resp</a> (float8[] coef, float8[] col_ind_var, float8[] mean_ind_var, text pred_type)</td></tr>
+<tr class="separator:a1d53d501174ed20ace7108db2ca8863d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a063f714c9a2c0f618007f0274febb266"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#a063f714c9a2c0f618007f0274febb266">_coxph_predict_terms</a> (float8[] coef, float8[] col_ind_var, float8[] mean_ind_var)</td></tr>
+<tr class="separator:a063f714c9a2c0f618007f0274febb266"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9edc6c578176561159b2ecde7415a751"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#a9edc6c578176561159b2ecde7415a751">coxph_predict</a> (varchar message)</td></tr>
+<tr class="separator:a9edc6c578176561159b2ecde7415a751"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3f1a4a5844c5b2629bcba051e75eee70"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#a3f1a4a5844c5b2629bcba051e75eee70">coxph_predict</a> ()</td></tr>
+<tr class="separator:a3f1a4a5844c5b2629bcba051e75eee70"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a842f88fb0d1f17d5410ac30fb1445deb"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#a842f88fb0d1f17d5410ac30fb1445deb">_split_transition</a> (float8[], float8, integer, integer)</td></tr>
+<tr class="separator:a842f88fb0d1f17d5410ac30fb1445deb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2e641566026ce44f191e722db6d4f4d3"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#a2e641566026ce44f191e722db6d4f4d3">_split_merge</a> (float8[], float8[])</td></tr>
+<tr class="separator:a2e641566026ce44f191e722db6d4f4d3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac5ba4af69415de3372e5a9d9f97a96af"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#ac5ba4af69415de3372e5a9d9f97a96af">_split_final</a> (float8[])</td></tr>
+<tr class="separator:ac5ba4af69415de3372e5a9d9f97a96af"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a138656eb9696e48be0c5a90ee2de5a44"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#a138656eb9696e48be0c5a90ee2de5a44">_compute_splits</a> (float8, integer, integer)</td></tr>
+<tr class="separator:a138656eb9696e48be0c5a90ee2de5a44"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a85be1c85fcf03e9b1bc25798e6fa9914"><td class="memItemLeft" align="right" valign="top">integer&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#a85be1c85fcf03e9b1bc25798e6fa9914">_compute_grpid</a> (float8[] splits, float8 split_col, boolean reverse)</td></tr>
+<tr class="separator:a85be1c85fcf03e9b1bc25798e6fa9914"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae94792f3fb4a0697e11db4334f643164"><td class="memItemLeft" align="right" valign="top">integer&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#ae94792f3fb4a0697e11db4334f643164">_compute_grpid</a> (float8[] splits, float8 split_col)</td></tr>
+<tr class="separator:ae94792f3fb4a0697e11db4334f643164"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a74fe60f99c3808e38421c71286850ea8"><td class="memItemLeft" align="right" valign="top">coxph_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#a74fe60f99c3808e38421c71286850ea8">compute_coxph_result</a> (float8[] coef, float8 l, float8[] d2l, integer niter, float8[] stds)</td></tr>
+<tr class="separator:a74fe60f99c3808e38421c71286850ea8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac5ae827993064fd6e0ccf13a96262cdc"><td class="memItemLeft" align="right" valign="top">coxph_step_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#ac5ae827993064fd6e0ccf13a96262cdc">coxph_improved_step_final</a> (float8[] state)</td></tr>
+<tr class="separator:ac5ae827993064fd6e0ccf13a96262cdc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6a9ae1ea761b31e1522c47a9794cc233"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#a6a9ae1ea761b31e1522c47a9794cc233">coxph_improved_step_transition</a> (float8[] state, float8[] x, float8[] y, integer[] status, float8[] coef, float8[] max_coef)</td></tr>
+<tr class="separator:a6a9ae1ea761b31e1522c47a9794cc233"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3c96655e41fd17c86dfc9ad37b0959d0"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#a3c96655e41fd17c86dfc9ad37b0959d0">coxph_step_inner_final</a> (float8[] state)</td></tr>
+<tr class="separator:a3c96655e41fd17c86dfc9ad37b0959d0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abaf93fc77a284f0b765a64ef827c1bed"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#abaf93fc77a284f0b765a64ef827c1bed">coxph_step_outer_transition</a> (float8[] state1, float8[] state2)</td></tr>
+<tr class="separator:abaf93fc77a284f0b765a64ef827c1bed"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a41a415076894d3844475208b2163a267"><td class="memItemLeft" align="right" valign="top">coxph_step_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#a41a415076894d3844475208b2163a267">coxph_improved_strata_step_final</a> (float8[] state)</td></tr>
+<tr class="separator:a41a415076894d3844475208b2163a267"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abb21bacbff7362724d2698568d857555"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#abb21bacbff7362724d2698568d857555">coxph_improved_strata_step_outer</a> (float8[] state)</td></tr>
+<tr class="separator:abb21bacbff7362724d2698568d857555"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a682d95d5475ce33e47937067cadc2766"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#a682d95d5475ce33e47937067cadc2766">cox_zph</a> (varchar coxph_model_table, varchar output_table)</td></tr>
+<tr class="memdesc:a682d95d5475ce33e47937067cadc2766"><td class="mdescLeft">&#160;</td><td class="mdescRight">Test the proportional hazards assumption for a Cox regression model fit (coxph_train)  <a href="#a682d95d5475ce33e47937067cadc2766">More...</a><br /></td></tr>
+<tr class="separator:a682d95d5475ce33e47937067cadc2766"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aad77f665f0030202444e99f5a0b895d3"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#aad77f665f0030202444e99f5a0b895d3">cox_zph</a> ()</td></tr>
+<tr class="separator:aad77f665f0030202444e99f5a0b895d3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af3aee9274235a9a44511e8cc57f15bcb"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#af3aee9274235a9a44511e8cc57f15bcb">cox_zph</a> (varchar message)</td></tr>
+<tr class="separator:af3aee9274235a9a44511e8cc57f15bcb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abb83dc1e36c379287e4dfdf14a350647"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#abb83dc1e36c379287e4dfdf14a350647">__zph_transition</a> (float8[] state, float8[] x, float8[] coef)</td></tr>
+<tr class="separator:abb83dc1e36c379287e4dfdf14a350647"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afe87ae70e07135bc657b6c9db58a2820"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#afe87ae70e07135bc657b6c9db58a2820">__zph_merge</a> (float8[] left_state, float8[] right_state)</td></tr>
+<tr class="separator:afe87ae70e07135bc657b6c9db58a2820"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac4025de22406c470e32e35376d0f54a4"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#ac4025de22406c470e32e35376d0f54a4">__zph_final</a> (float8[] left_state)</td></tr>
+<tr class="separator:ac4025de22406c470e32e35376d0f54a4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a91e1a4b2a2d13454f9e65dd3d40a329b"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#a91e1a4b2a2d13454f9e65dd3d40a329b">zph_agg</a> (float8[] x, float8[] coef)</td></tr>
+<tr class="separator:a91e1a4b2a2d13454f9e65dd3d40a329b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a97191f842120124d56329b8b20ed837c"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#a97191f842120124d56329b8b20ed837c">__coxph_scale_resid</a> (integer m, float8[] hessian, float8[] resid)</td></tr>
+<tr class="separator:a97191f842120124d56329b8b20ed837c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a597e43a46842b113412d0940b3d175e4"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#a597e43a46842b113412d0940b3d175e4">__array_elem_corr_transition</a> (float8[] state, float8[] x, float8 y)</td></tr>
+<tr class="separator:a597e43a46842b113412d0940b3d175e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a189426c7d99c600856205d15d2fe445c"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#a189426c7d99c600856205d15d2fe445c">__array_elem_corr_merge</a> (float8[] left_state, float8[] right_state)</td></tr>
+<tr class="separator:a189426c7d99c600856205d15d2fe445c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a31f48cba79d114f8f251c5aa77b3c32a"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#a31f48cba79d114f8f251c5aa77b3c32a">__array_elem_corr_final</a> (float8[] state)</td></tr>
+<tr class="separator:a31f48cba79d114f8f251c5aa77b3c32a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8928da50ddcf85de812ab058214324db"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#a8928da50ddcf85de812ab058214324db">array_elem_corr_agg</a> (float8[] array_input, float8 common_elem)</td></tr>
+<tr class="separator:a8928da50ddcf85de812ab058214324db"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab3b596b440d3850d742ebab0245dbf61"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#ab3b596b440d3850d742ebab0245dbf61">__coxph_resid_stat_transition</a> (float8[] state, float8 w, float8[] residual, float8[] hessian, integer m)</td></tr>
+<tr class="separator:ab3b596b440d3850d742ebab0245dbf61"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a51da9d74afff6f4ec5a34bbdbec5c868"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#a51da9d74afff6f4ec5a34bbdbec5c868">__coxph_resid_stat_merge</a> (float8[] state1, float8[] state2)</td></tr>
+<tr class="separator:a51da9d74afff6f4ec5a34bbdbec5c868"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3e6c330ccd548a25c3ef0153f0c956e4"><td class="memItemLeft" align="right" valign="top">__cox_resid_stat_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#a3e6c330ccd548a25c3ef0153f0c956e4">__coxph_resid_stat_final</a> (float8[] state)</td></tr>
+<tr class="separator:a3e6c330ccd548a25c3ef0153f0c956e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a41a4e85912f00b5b73207f837dccc359"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#a41a4e85912f00b5b73207f837dccc359">__coxph_resid_stat_agg</a> (float8 w, float8[] residual, float8[] hessian, integer m)</td></tr>
+<tr class="separator:a41a4e85912f00b5b73207f837dccc359"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad778b289eb19ae0bb2b7e02a89bab3bc"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#ad778b289eb19ae0bb2b7e02a89bab3bc">cox_prop_hazards</a> (varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, varchar status)</td></tr>
+<tr class="memdesc:ad778b289eb19ae0bb2b7e02a89bab3bc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Cox regression training function.  <a href="#ad778b289eb19ae0bb2b7e02a89bab3bc">More...</a><br /></td></tr>
+<tr class="separator:ad778b289eb19ae0bb2b7e02a89bab3bc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5e52f9a98bce4ec74230eb95c95e68c4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#a5e52f9a98bce4ec74230eb95c95e68c4">cox_prop_hazards</a> (varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable)</td></tr>
+<tr class="memdesc:a5e52f9a98bce4ec74230eb95c95e68c4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Cox regression training function.  <a href="#a5e52f9a98bce4ec74230eb95c95e68c4">More...</a><br /></td></tr>
+<tr class="separator:a5e52f9a98bce4ec74230eb95c95e68c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a03909f1c14894303fca80ea8503ae7f0"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#a03909f1c14894303fca80ea8503ae7f0">cox_prop_hazards</a> (varchar usage_string)</td></tr>
+<tr class="separator:a03909f1c14894303fca80ea8503ae7f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af92ac384ab346034dc42a4049613a47a"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#af92ac384ab346034dc42a4049613a47a">cox_prop_hazards</a> ()</td></tr>
+<tr class="separator:af92ac384ab346034dc42a4049613a47a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3310cf98478b7c1e400e8fb1b3965d30"><td class="memItemLeft" align="right" valign="top">cox_prop_hazards_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#a3310cf98478b7c1e400e8fb1b3965d30">cox_prop_hazards_regr</a> (varchar source, varchar indepColumn, varchar depColumn, varchar status, integer maxNumIterations=20, varchar optimizer=&quot;newton&quot;, float8 precision=0.0001)</td></tr>
+<tr class="separator:a3310cf98478b7c1e400e8fb1b3965d30"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a79ca0bbf1a3a5c1f83ede9596d4b43cc"><td class="memItemLeft" align="right" valign="top">cox_prop_hazards_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#a79ca0bbf1a3a5c1f83ede9596d4b43cc">cox_prop_hazards_regr</a> (varchar source, varchar indepColumn, varchar depColumn, varchar status)</td></tr>
+<tr class="separator:a79ca0bbf1a3a5c1f83ede9596d4b43cc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a217c18984301c16b39a6deffa8c677df"><td class="memItemLeft" align="right" valign="top">cox_prop_hazards_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#a217c18984301c16b39a6deffa8c677df">cox_prop_hazards_regr</a> (varchar source, varchar indepColumn, varchar depColumn, varchar status, integer maxNumIterations)</td></tr>
+<tr class="separator:a217c18984301c16b39a6deffa8c677df"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6508b2b2b8e0b6a0d0027c3d8b487df8"><td class="memItemLeft" align="right" valign="top">cox_prop_hazards_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#a6508b2b2b8e0b6a0d0027c3d8b487df8">cox_prop_hazards_regr</a> (varchar source, varchar indepColumn, varchar depColumn, varchar status, integer maxNumIterations, varchar optimizer)</td></tr>
+<tr class="separator:a6508b2b2b8e0b6a0d0027c3d8b487df8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abd49fa0a100bfe513baa90e32fe37839"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#abd49fa0a100bfe513baa90e32fe37839">__array_element_min</a> (float8[], float8[])</td></tr>
+<tr class="separator:abd49fa0a100bfe513baa90e32fe37839"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2ec0ea5a3faba236a75d4d9cc16e40a4"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#a2ec0ea5a3faba236a75d4d9cc16e40a4">array_element_min</a> (float8[])</td></tr>
+<tr class="separator:a2ec0ea5a3faba236a75d4d9cc16e40a4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8e3917098eeb129096fa871e7e593e1d"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#a8e3917098eeb129096fa871e7e593e1d">__array_element_max</a> (float8[], float8[])</td></tr>
+<tr class="separator:a8e3917098eeb129096fa871e7e593e1d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1de2b192c73ede707b42726e9469664d"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html#a1de2b192c73ede707b42726e9469664d">array_element_max</a> (float8[])</td></tr>
+<tr class="separator:a1de2b192c73ede707b42726e9469664d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><dl class="section date"><dt>Date</dt><dd>July 2012</dd></dl>
+<dl class="section see"><dt>See also</dt><dd>For a brief introduction to cox regression, see the module description <a class="el" href="group__grp__cox__prop__hazards.html">Cox-Proportional Hazards Regression</a> </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="a31f48cba79d114f8f251c5aa77b3c32a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a31f48cba79d114f8f251c5aa77b3c32a">&#9670;&nbsp;</a></span>__array_elem_corr_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __array_elem_corr_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a189426c7d99c600856205d15d2fe445c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a189426c7d99c600856205d15d2fe445c">&#9670;&nbsp;</a></span>__array_elem_corr_merge()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __array_elem_corr_merge </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>left_state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>right_state</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a597e43a46842b113412d0940b3d175e4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a597e43a46842b113412d0940b3d175e4">&#9670;&nbsp;</a></span>__array_elem_corr_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __array_elem_corr_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>y</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8e3917098eeb129096fa871e7e593e1d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8e3917098eeb129096fa871e7e593e1d">&#9670;&nbsp;</a></span>__array_element_max()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __array_element_max </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[]&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="abd49fa0a100bfe513baa90e32fe37839"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abd49fa0a100bfe513baa90e32fe37839">&#9670;&nbsp;</a></span>__array_element_min()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __array_element_min </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[]&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a41a4e85912f00b5b73207f837dccc359"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a41a4e85912f00b5b73207f837dccc359">&#9670;&nbsp;</a></span>__coxph_resid_stat_agg()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] __coxph_resid_stat_agg </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>w</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>residual</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>hessian</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>m</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a3e6c330ccd548a25c3ef0153f0c956e4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3e6c330ccd548a25c3ef0153f0c956e4">&#9670;&nbsp;</a></span>__coxph_resid_stat_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">__cox_resid_stat_result __coxph_resid_stat_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a51da9d74afff6f4ec5a34bbdbec5c868"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a51da9d74afff6f4ec5a34bbdbec5c868">&#9670;&nbsp;</a></span>__coxph_resid_stat_merge()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __coxph_resid_stat_merge </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab3b596b440d3850d742ebab0245dbf61"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab3b596b440d3850d742ebab0245dbf61">&#9670;&nbsp;</a></span>__coxph_resid_stat_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __coxph_resid_stat_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>w</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>residual</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>hessian</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>m</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a97191f842120124d56329b8b20ed837c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a97191f842120124d56329b8b20ed837c">&#9670;&nbsp;</a></span>__coxph_scale_resid()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __coxph_scale_resid </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>hessian</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>resid</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac4025de22406c470e32e35376d0f54a4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac4025de22406c470e32e35376d0f54a4">&#9670;&nbsp;</a></span>__zph_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __zph_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>left_state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="afe87ae70e07135bc657b6c9db58a2820"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afe87ae70e07135bc657b6c9db58a2820">&#9670;&nbsp;</a></span>__zph_merge()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __zph_merge </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>left_state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>right_state</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="abb83dc1e36c379287e4dfdf14a350647"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abb83dc1e36c379287e4dfdf14a350647">&#9670;&nbsp;</a></span>__zph_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __zph_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>coef</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a85be1c85fcf03e9b1bc25798e6fa9914"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a85be1c85fcf03e9b1bc25798e6fa9914">&#9670;&nbsp;</a></span>_compute_grpid() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">integer _compute_grpid </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>splits</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>split_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>reverse</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae94792f3fb4a0697e11db4334f643164"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae94792f3fb4a0697e11db4334f643164">&#9670;&nbsp;</a></span>_compute_grpid() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">integer _compute_grpid </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>splits</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>split_col</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a138656eb9696e48be0c5a90ee2de5a44"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a138656eb9696e48be0c5a90ee2de5a44">&#9670;&nbsp;</a></span>_compute_splits()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] _compute_splits </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1d53d501174ed20ace7108db2ca8863d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1d53d501174ed20ace7108db2ca8863d">&#9670;&nbsp;</a></span>_coxph_predict_resp()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 _coxph_predict_resp </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>coef</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>col_ind_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>mean_ind_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pred_type</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a063f714c9a2c0f618007f0274febb266"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a063f714c9a2c0f618007f0274febb266">&#9670;&nbsp;</a></span>_coxph_predict_terms()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] _coxph_predict_terms </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>coef</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>col_ind_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>mean_ind_var</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac5ba4af69415de3372e5a9d9f97a96af"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac5ba4af69415de3372e5a9d9f97a96af">&#9670;&nbsp;</a></span>_split_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] _split_final </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[]</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a2e641566026ce44f191e722db6d4f4d3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2e641566026ce44f191e722db6d4f4d3">&#9670;&nbsp;</a></span>_split_merge()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] _split_merge </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[]&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a842f88fb0d1f17d5410ac30fb1445deb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a842f88fb0d1f17d5410ac30fb1445deb">&#9670;&nbsp;</a></span>_split_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] _split_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5734f5796a403ebf2e765cba136f54c8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5734f5796a403ebf2e765cba136f54c8">&#9670;&nbsp;</a></span>array_avg()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] array_avg </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1f5594f3a1199bfd91d7479292e25b5c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1f5594f3a1199bfd91d7479292e25b5c">&#9670;&nbsp;</a></span>array_avg_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] array_avg_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a45bd6774621ad8fe0baa9427f7ce8fd4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a45bd6774621ad8fe0baa9427f7ce8fd4">&#9670;&nbsp;</a></span>array_avg_merge()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] array_avg_merge </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>left</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>right</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a0ffc559f8f54d7ea49c8d1a865ef5a37"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0ffc559f8f54d7ea49c8d1a865ef5a37">&#9670;&nbsp;</a></span>array_avg_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] array_avg_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>use_abs</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8928da50ddcf85de812ab058214324db"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8928da50ddcf85de812ab058214324db">&#9670;&nbsp;</a></span>array_elem_corr_agg()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] array_elem_corr_agg </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>array_input</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>common_elem</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1de2b192c73ede707b42726e9469664d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1de2b192c73ede707b42726e9469664d">&#9670;&nbsp;</a></span>array_element_max()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] array_element_max </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[]</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a2ec0ea5a3faba236a75d4d9cc16e40a4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2ec0ea5a3faba236a75d4d9cc16e40a4">&#9670;&nbsp;</a></span>array_element_min()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] array_element_min </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[]</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a74fe60f99c3808e38421c71286850ea8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a74fe60f99c3808e38421c71286850ea8">&#9670;&nbsp;</a></span>compute_coxph_result()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">coxph_result compute_coxph_result </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>coef</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>l</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>d2l</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>niter</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>stds</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ad778b289eb19ae0bb2b7e02a89bab3bc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad778b289eb19ae0bb2b7e02a89bab3bc">&#9670;&nbsp;</a></span>cox_prop_hazards() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cox_prop_hazards </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>status</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5e52f9a98bce4ec74230eb95c95e68c4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5e52f9a98bce4ec74230eb95c95e68c4">&#9670;&nbsp;</a></span>cox_prop_hazards() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cox_prop_hazards </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_variable</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a03909f1c14894303fca80ea8503ae7f0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a03909f1c14894303fca80ea8503ae7f0">&#9670;&nbsp;</a></span>cox_prop_hazards() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar cox_prop_hazards </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>usage_string</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="af92ac384ab346034dc42a4049613a47a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af92ac384ab346034dc42a4049613a47a">&#9670;&nbsp;</a></span>cox_prop_hazards() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar cox_prop_hazards </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a3310cf98478b7c1e400e8fb1b3965d30"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3310cf98478b7c1e400e8fb1b3965d30">&#9670;&nbsp;</a></span>cox_prop_hazards_regr() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">cox_prop_hazards_result cox_prop_hazards_regr </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>indepColumn</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>depColumn</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>status</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>maxNumIterations</em> = <code>20</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>optimizer</em> = <code>&quot;newton&quot;</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>precision</em> = <code>0.0001</code>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a79ca0bbf1a3a5c1f83ede9596d4b43cc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a79ca0bbf1a3a5c1f83ede9596d4b43cc">&#9670;&nbsp;</a></span>cox_prop_hazards_regr() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">cox_prop_hazards_result cox_prop_hazards_regr </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>indepColumn</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>depColumn</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>status</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a217c18984301c16b39a6deffa8c677df"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a217c18984301c16b39a6deffa8c677df">&#9670;&nbsp;</a></span>cox_prop_hazards_regr() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">cox_prop_hazards_result cox_prop_hazards_regr </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>indepColumn</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>depColumn</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>status</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>maxNumIterations</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a6508b2b2b8e0b6a0d0027c3d8b487df8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6508b2b2b8e0b6a0d0027c3d8b487df8">&#9670;&nbsp;</a></span>cox_prop_hazards_regr() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">cox_prop_hazards_result cox_prop_hazards_regr </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>indepColumn</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>depColumn</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>status</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>maxNumIterations</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>optimizer</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a682d95d5475ce33e47937067cadc2766"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a682d95d5475ce33e47937067cadc2766">&#9670;&nbsp;</a></span>cox_zph() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cox_zph </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>coxph_model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">coxph_model_table</td><td>Name of the table that contains the Cox Proportional Hazards model </td></tr>
+    <tr><td class="paramname">output_table</td><td>Name of the output table to contain the statistics to test the proportional hazards assumption</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>An output table with following columns: Columns of the matrix contain the correlation coefficient between transformed , a chi-square, and the two-sided p-value.<ul>
+<li><code>rho FLOAT8[]</code> - Array of correlation coefficient between survival time and the scaled Schoenfeld residuals</li>
+<li><code>chi_square FLOAT8[]</code> - Chi-square test statistic for the</li>
+<li><code>p_value FLOAT8[]</code> - Two-side p-value for the chi-square test </li>
+</ul>
+</dd></dl>
+
+</div>
+</div>
+<a id="aad77f665f0030202444e99f5a0b895d3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aad77f665f0030202444e99f5a0b895d3">&#9670;&nbsp;</a></span>cox_zph() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar cox_zph </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="af3aee9274235a9a44511e8cc57f15bcb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af3aee9274235a9a44511e8cc57f15bcb">&#9670;&nbsp;</a></span>cox_zph() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar cox_zph </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac5ae827993064fd6e0ccf13a96262cdc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac5ae827993064fd6e0ccf13a96262cdc">&#9670;&nbsp;</a></span>coxph_improved_step_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">coxph_step_result coxph_improved_step_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a6a9ae1ea761b31e1522c47a9794cc233"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6a9ae1ea761b31e1522c47a9794cc233">&#9670;&nbsp;</a></span>coxph_improved_step_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] coxph_improved_step_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>status</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>coef</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>max_coef</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a41a415076894d3844475208b2163a267"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a41a415076894d3844475208b2163a267">&#9670;&nbsp;</a></span>coxph_improved_strata_step_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">coxph_step_result coxph_improved_strata_step_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="abb21bacbff7362724d2698568d857555"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abb21bacbff7362724d2698568d857555">&#9670;&nbsp;</a></span>coxph_improved_strata_step_outer()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] coxph_improved_strata_step_outer </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a0ad613a529ee147565a605d6f443a4bd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0ad613a529ee147565a605d6f443a4bd">&#9670;&nbsp;</a></span>coxph_predict() <span class="overload">[1/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void coxph_predict </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>id_col_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pred_type</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>reference</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">model_table</td><td>Name of the table containing the cox model. </td></tr>
+    <tr><td class="paramname">source_table</td><td>Name of the table containing the prediction data. </td></tr>
+    <tr><td class="paramname">output_table</td><td>Name of the table to store the prediction results into. </td></tr>
+    <tr><td class="paramname">pred_type</td><td>Type of prediction. Can be one of 'linear_predictors', 'risk' or 'terms'. </td></tr>
+    <tr><td class="paramname">reference</td><td>Reference level to use for centering predictions. Can be one of 'overall' or 'strata'. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a815961d52fb8ce998071eb92056ee1dd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a815961d52fb8ce998071eb92056ee1dd">&#9670;&nbsp;</a></span>coxph_predict() <span class="overload">[2/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void coxph_predict </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>id_col_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pred_type</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="acd445fe632e93b2c8260b0455478e2e5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acd445fe632e93b2c8260b0455478e2e5">&#9670;&nbsp;</a></span>coxph_predict() <span class="overload">[3/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void coxph_predict </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>id_col_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a9edc6c578176561159b2ecde7415a751"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9edc6c578176561159b2ecde7415a751">&#9670;&nbsp;</a></span>coxph_predict() <span class="overload">[4/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar coxph_predict </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a3f1a4a5844c5b2629bcba051e75eee70"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3f1a4a5844c5b2629bcba051e75eee70">&#9670;&nbsp;</a></span>coxph_predict() <span class="overload">[5/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar coxph_predict </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a3c96655e41fd17c86dfc9ad37b0959d0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3c96655e41fd17c86dfc9ad37b0959d0">&#9670;&nbsp;</a></span>coxph_step_inner_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] coxph_step_inner_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="abaf93fc77a284f0b765a64ef827c1bed"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abaf93fc77a284f0b765a64ef827c1bed">&#9670;&nbsp;</a></span>coxph_step_outer_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] coxph_step_outer_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a737450bbfe0f10204b0074a9d45b0cef"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a737450bbfe0f10204b0074a9d45b0cef">&#9670;&nbsp;</a></span>coxph_train() <span class="overload">[1/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void coxph_train </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>right_censoring_status</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>strata</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>optimizer_params</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>To include an intercept in the model, set one coordinate in the <code>independentVariables</code> array to 1.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">source_table</td><td>Name of the source relation containing the training data </td></tr>
+    <tr><td class="paramname">output_table</td><td>Name of the output relation to contain the coxph_train model </td></tr>
+    <tr><td class="paramname">independent_varname</td><td>Name of the independent column </td></tr>
+    <tr><td class="paramname">dependent_varname</td><td>Name of the dependent column measuring time of death </td></tr>
+    <tr><td class="paramname">right_censoring_status</td><td>Name of the column that determines right censoring support </td></tr>
+    <tr><td class="paramname">strata</td><td>Comma-separated list of column names on which to stratify the data </td></tr>
+    <tr><td class="paramname">optimizer_params</td><td>Comma-separated list of parameters for the optimizer function</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>An output table with following columns:<ul>
+<li><code>coef FLOAT8[]</code> - Array of coefficients, \( \boldsymbol \beta \)</li>
+<li><code>log_likelihood FLOAT8</code> - Log-likelihood \(l(\boldsymbol \beta)\)</li>
+<li><code>std_err FLOAT8[]</code> - Array of standard errors, \( \mathit{se}(c_1), \dots, \mathit{se}(c_k) \)</li>
+<li><code>z_stats FLOAT8[]</code> - Array of Wald z-statistics, \( \boldsymbol z \)</li>
+<li><code>p_values FLOAT8[]</code> - Array of Wald p-values, \( \boldsymbol p \)</li>
+<li><code>hessian FLOAT8[]</code> - Hessian Matrix</li>
+<li><code>num_iterations INTEGER</code> - The number of iterations before the algorithm terminated</li>
+</ul>
+</dd></dl>
+<ul>
+<li>Get vector of coefficients \( \boldsymbol \beta \) and all diagnostic statistics:<br />
+ <pre>SELECT <a class="el" href="cox__prop__hazards_8sql__in.html#a76aeb28f6e0fc47fd59c0d6c6c7be063">coxph_train</a>(
+   '<em>source_table</em>', '<em>output_table</em>',
+   '<em>dependent_varname</em>', '<em>independent_varname</em>'
+   '<em>right_censoring_status</em>', '<em>strata</em>'
+);</pre></li>
+<li>Get vector of coefficients \( \boldsymbol \beta \):<br />
+ <pre>SELECT coef from <em>output_table</em></pre></li>
+</ul>
+<p>See <a class="el" href="group__grp__cox__prop__hazards.html">Cox-Proportional Hazards Regression</a> for more details. </p>
+
+</div>
+</div>
+<a id="ae7edb9499e07fdf835c3bbc297a99c01"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae7edb9499e07fdf835c3bbc297a99c01">&#9670;&nbsp;</a></span>coxph_train() <span class="overload">[2/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar coxph_train </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a6f527631dc32178716221cc9dfa1fde4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6f527631dc32178716221cc9dfa1fde4">&#9670;&nbsp;</a></span>coxph_train() <span class="overload">[3/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar coxph_train </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a3fd1cd09fd5de41d6dc8aca0a18eec8b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3fd1cd09fd5de41d6dc8aca0a18eec8b">&#9670;&nbsp;</a></span>coxph_train() <span class="overload">[4/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void coxph_train </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>right_censoring_status</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>strata</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="afd5fb08d419aab4a8b8eb103afa30f29"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afd5fb08d419aab4a8b8eb103afa30f29">&#9670;&nbsp;</a></span>coxph_train() <span class="overload">[5/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void coxph_train </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>right_censoring_status</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a76aeb28f6e0fc47fd59c0d6c6c7be063"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a76aeb28f6e0fc47fd59c0d6c6c7be063">&#9670;&nbsp;</a></span>coxph_train() <span class="overload">[6/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void coxph_train </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_variable</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a91e1a4b2a2d13454f9e65dd3d40a329b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a91e1a4b2a2d13454f9e65dd3d40a329b">&#9670;&nbsp;</a></span>zph_agg()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] zph_agg </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>coef</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_505cd743a8a717435eca324f49291a46.html">stats</a></li><li class="navelem"><a class="el" href="cox__prop__hazards_8sql__in.html">cox_prop_hazards.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:56 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/create__indicators_8sql__in.html b/docs/rc/create__indicators_8sql__in.html
new file mode 100644
index 0000000..14768b8
--- /dev/null
+++ b/docs/rc/create__indicators_8sql__in.html
@@ -0,0 +1,333 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: create_indicators.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('create__indicators_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">create_indicators.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>SQL functions for dummy coding categorical variables.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a0add50a6ab76682bde7825fc54f4d64b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="create__indicators_8sql__in.html#a0add50a6ab76682bde7825fc54f4d64b">create_indicator_variables</a> (text source_table, text out_table, text categorical_cols, boolean keep_null, text distributed_by)</td></tr>
+<tr class="memdesc:a0add50a6ab76682bde7825fc54f4d64b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create new table containing dummy coded variables for categorical variables.  <a href="#a0add50a6ab76682bde7825fc54f4d64b">More...</a><br /></td></tr>
+<tr class="separator:a0add50a6ab76682bde7825fc54f4d64b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a05dbb30d8dd8589e75a96b3232cafe65"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="create__indicators_8sql__in.html#a05dbb30d8dd8589e75a96b3232cafe65">create_indicator_variables</a> (text source_table, text out_table, text categorical_cols, boolean keep_null)</td></tr>
+<tr class="memdesc:a05dbb30d8dd8589e75a96b3232cafe65"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create new table containing dummy coded variables for categorical variables.  <a href="#a05dbb30d8dd8589e75a96b3232cafe65">More...</a><br /></td></tr>
+<tr class="separator:a05dbb30d8dd8589e75a96b3232cafe65"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a617b67999ab8c9c07fb0d24101a1115d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="create__indicators_8sql__in.html#a617b67999ab8c9c07fb0d24101a1115d">create_indicator_variables</a> (text source_table, text out_table, text categorical_cols)</td></tr>
+<tr class="separator:a617b67999ab8c9c07fb0d24101a1115d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a839b64f47a11a35c5df24ee93e36ba26"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="create__indicators_8sql__in.html#a839b64f47a11a35c5df24ee93e36ba26">create_indicator_variables</a> (varchar message)</td></tr>
+<tr class="separator:a839b64f47a11a35c5df24ee93e36ba26"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5d0ef27bc38be2b4b5f063cf7b560d1f"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="create__indicators_8sql__in.html#a5d0ef27bc38be2b4b5f063cf7b560d1f">create_indicator_variables</a> ()</td></tr>
+<tr class="separator:a5d0ef27bc38be2b4b5f063cf7b560d1f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>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</p>
+<p><a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a></p>
+<p>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.</p>
+<dl class="section date"><dt>Date</dt><dd>June 2014</dd></dl>
+<dl class="section see"><dt>See also</dt><dd>Calculates dummy-coded indicator variables for categorical variables </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="a0add50a6ab76682bde7825fc54f4d64b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0add50a6ab76682bde7825fc54f4d64b">&#9670;&nbsp;</a></span>create_indicator_variables() <span class="overload">[1/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void create_indicator_variables </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>categorical_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>keep_null</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>distributed_by</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">source_table</td><td>Name of table containing categorical variable </td></tr>
+    <tr><td class="paramname">out_table</td><td>Name of table to output dummy variables </td></tr>
+    <tr><td class="paramname">categorical_cols</td><td>Comma-separated list of column names to dummy code </td></tr>
+    <tr><td class="paramname">keep_null</td><td>Boolean to determine the behavior for rows with NULL value </td></tr>
+    <tr><td class="paramname">distributed_by</td><td>Comma-separated list of column names to use for distribution of output</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Void </dd></dl>
+
+</div>
+</div>
+<a id="a05dbb30d8dd8589e75a96b3232cafe65"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a05dbb30d8dd8589e75a96b3232cafe65">&#9670;&nbsp;</a></span>create_indicator_variables() <span class="overload">[2/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void create_indicator_variables </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>categorical_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>keep_null</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">source_table</td><td>Name of table containing categorical variable </td></tr>
+    <tr><td class="paramname">out_table</td><td>Name of table to output dummy variables </td></tr>
+    <tr><td class="paramname">categorical_cols</td><td>Comma-separated list of column names to dummy code </td></tr>
+    <tr><td class="paramname">keep_null</td><td>Boolean to determine the behavior for rows with NULL value</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Void </dd></dl>
+
+</div>
+</div>
+<a id="a617b67999ab8c9c07fb0d24101a1115d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a617b67999ab8c9c07fb0d24101a1115d">&#9670;&nbsp;</a></span>create_indicator_variables() <span class="overload">[3/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void create_indicator_variables </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>categorical_cols</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a839b64f47a11a35c5df24ee93e36ba26"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a839b64f47a11a35c5df24ee93e36ba26">&#9670;&nbsp;</a></span>create_indicator_variables() <span class="overload">[4/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar create_indicator_variables </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5d0ef27bc38be2b4b5f063cf7b560d1f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5d0ef27bc38be2b4b5f063cf7b560d1f">&#9670;&nbsp;</a></span>create_indicator_variables() <span class="overload">[5/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar create_indicator_variables </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_8d53e1c0026e7e34b4cd68f8b91426d6.html">utilities</a></li><li class="navelem"><a class="el" href="create__indicators_8sql__in.html">create_indicators.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:56 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/crf_8sql__in.html b/docs/rc/crf_8sql__in.html
new file mode 100644
index 0000000..0c60704
--- /dev/null
+++ b/docs/rc/crf_8sql__in.html
@@ -0,0 +1,552 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: crf.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('crf_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">crf.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>SQL functions for conditional random field.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a2e7104fea95ca76587e7fae9bcb0d7ed"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crf_8sql__in.html#a2e7104fea95ca76587e7fae9bcb0d7ed">lincrf_lbfgs_step_transition</a> (float8[], float8[], float8[], float8[], float8, float8, float8[])</td></tr>
+<tr class="separator:a2e7104fea95ca76587e7fae9bcb0d7ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a45f3eaf0c80cdfa99872cd071020d5c7"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crf_8sql__in.html#a45f3eaf0c80cdfa99872cd071020d5c7">lincrf_lbfgs_step_merge_states</a> (float8[] state1, float8[] state2)</td></tr>
+<tr class="separator:a45f3eaf0c80cdfa99872cd071020d5c7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5bf4b2738003096f4eeeccd0eb5e98f0"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crf_8sql__in.html#a5bf4b2738003096f4eeeccd0eb5e98f0">lincrf_lbfgs_step_final</a> (float8[] state)</td></tr>
+<tr class="separator:a5bf4b2738003096f4eeeccd0eb5e98f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a47ef6b30d54ac4ef89cb664a681d1067"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crf_8sql__in.html#a47ef6b30d54ac4ef89cb664a681d1067">internal_lincrf_lbfgs_converge</a> (float8[] state)</td></tr>
+<tr class="separator:a47ef6b30d54ac4ef89cb664a681d1067"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aff63c9a56bebf501a2f40971271605c2"><td class="memItemLeft" align="right" valign="top">lincrf_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crf_8sql__in.html#aff63c9a56bebf501a2f40971271605c2">internal_lincrf_lbfgs_result</a> (float8[] state)</td></tr>
+<tr class="separator:aff63c9a56bebf501a2f40971271605c2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a590cd748d8e18055d851e7d4f4a3ca00"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crf_8sql__in.html#a590cd748d8e18055d851e7d4f4a3ca00">lincrf_lbfgs_step</a> (float8[], float8[], float8[], float8, float8, float8[])</td></tr>
+<tr class="separator:a590cd748d8e18055d851e7d4f4a3ca00"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a73693c959db4ca3dbfd1b9debcca2c8f"><td class="memItemLeft" align="right" valign="top">aggregate anyarray&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crf_8sql__in.html#a73693c959db4ca3dbfd1b9debcca2c8f">array_union</a> (anyarray)</td></tr>
+<tr class="separator:a73693c959db4ca3dbfd1b9debcca2c8f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a20c096420d878cdd66dac6a232483737"><td class="memItemLeft" align="right" valign="top">integer&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crf_8sql__in.html#a20c096420d878cdd66dac6a232483737">compute_lincrf</a> (text source, text sparse_R, text dense_M, text sparse_M, text featureSize, integer tagSize, integer maxNumIterations)</td></tr>
+<tr class="separator:a20c096420d878cdd66dac6a232483737"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a336ac57ae3d07e331646d397c7651d3d"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crf_8sql__in.html#a336ac57ae3d07e331646d397c7651d3d">lincrf_train</a> (text train_feature_tbl, text train_featureset_tbl, text label_tbl, text crf_stats_tbl, text crf_weights_tbl, integer max_iterations)</td></tr>
+<tr class="memdesc:a336ac57ae3d07e331646d397c7651d3d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute linear-chain crf coefficients and diagnostic statistics.  <a href="#a336ac57ae3d07e331646d397c7651d3d">More...</a><br /></td></tr>
+<tr class="separator:a336ac57ae3d07e331646d397c7651d3d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6b7059a5e22e40eae252c718217bf574"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crf_8sql__in.html#a6b7059a5e22e40eae252c718217bf574">lincrf_train</a> (text train_feature_tbl, text train_featureset_tbl, text label_tbl, text crf_stats_tbl, text crf_weights_tbl)</td></tr>
+<tr class="separator:a6b7059a5e22e40eae252c718217bf574"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><dl class="section date"><dt>Date</dt><dd>July 2012</dd></dl>
+<dl class="section see"><dt>See also</dt><dd>For a brief introduction to conditional random field, see the module description <a class="el" href="group__grp__crf.html">Conditional Random Field</a>. </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="a73693c959db4ca3dbfd1b9debcca2c8f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a73693c959db4ca3dbfd1b9debcca2c8f">&#9670;&nbsp;</a></span>array_union()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate anyarray array_union </td>
+          <td>(</td>
+          <td class="paramtype">anyarray&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a20c096420d878cdd66dac6a232483737"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a20c096420d878cdd66dac6a232483737">&#9670;&nbsp;</a></span>compute_lincrf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">integer compute_lincrf </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>sparse_R</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dense_M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>sparse_M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>featureSize</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>tagSize</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>maxNumIterations</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a47ef6b30d54ac4ef89cb664a681d1067"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a47ef6b30d54ac4ef89cb664a681d1067">&#9670;&nbsp;</a></span>internal_lincrf_lbfgs_converge()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 internal_lincrf_lbfgs_converge </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aff63c9a56bebf501a2f40971271605c2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aff63c9a56bebf501a2f40971271605c2">&#9670;&nbsp;</a></span>internal_lincrf_lbfgs_result()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">lincrf_result internal_lincrf_lbfgs_result </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a590cd748d8e18055d851e7d4f4a3ca00"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a590cd748d8e18055d851e7d4f4a3ca00">&#9670;&nbsp;</a></span>lincrf_lbfgs_step()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] lincrf_lbfgs_step </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[]&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5bf4b2738003096f4eeeccd0eb5e98f0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5bf4b2738003096f4eeeccd0eb5e98f0">&#9670;&nbsp;</a></span>lincrf_lbfgs_step_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] lincrf_lbfgs_step_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a45f3eaf0c80cdfa99872cd071020d5c7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a45f3eaf0c80cdfa99872cd071020d5c7">&#9670;&nbsp;</a></span>lincrf_lbfgs_step_merge_states()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] lincrf_lbfgs_step_merge_states </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a2e7104fea95ca76587e7fae9bcb0d7ed"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2e7104fea95ca76587e7fae9bcb0d7ed">&#9670;&nbsp;</a></span>lincrf_lbfgs_step_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] lincrf_lbfgs_step_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[]&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a336ac57ae3d07e331646d397c7651d3d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a336ac57ae3d07e331646d397c7651d3d">&#9670;&nbsp;</a></span>lincrf_train() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text lincrf_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>train_feature_tbl</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>train_featureset_tbl</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>label_tbl</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>crf_stats_tbl</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>crf_weights_tbl</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_iterations</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">source</td><td>Name of the source relation containing the training data </td></tr>
+    <tr><td class="paramname">sparse_R</td><td>Name of the sparse single state feature column (of type DOUBLE PRECISION[]) </td></tr>
+    <tr><td class="paramname">dense_M</td><td>Name of the dense two state feature column (of type DOUBLE PRECISION[]) </td></tr>
+    <tr><td class="paramname">sparse_M</td><td>Name of the sparse two state feature column (of type DOUBLE PRECISION[]) </td></tr>
+    <tr><td class="paramname">featureSize</td><td>Name of feature size column (of type DOUBLE PRECISION) </td></tr>
+    <tr><td class="paramname">tagSize</td><td>The number of tags in the tag set </td></tr>
+    <tr><td class="paramname">featureset</td><td>The unique feature set </td></tr>
+    <tr><td class="paramname">crf_feature</td><td>The Name of output feature table </td></tr>
+    <tr><td class="paramname">maxNumIterations</td><td>The maximum number of iterations</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>a composite value:<ul>
+<li><code>coef FLOAT8[]</code> - Array of coefficients, \( \boldsymbol c \)</li>
+<li><code>log_likelihood FLOAT8</code> - Log-likelihood \( l(\boldsymbol c) \)</li>
+<li><code>num_iterations INTEGER</code> - The number of iterations before the algorithm terminated <br />
+<br />
+A 'crf_feature' table is used to store all the features and corresponding weights</li>
+</ul>
+</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function starts an iterative algorithm. It is not an aggregate function. Source and column names have to be passed as strings (due to limitations of the SQL syntax). </dd></dl>
+
+</div>
+</div>
+<a id="a6b7059a5e22e40eae252c718217bf574"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6b7059a5e22e40eae252c718217bf574">&#9670;&nbsp;</a></span>lincrf_train() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text lincrf_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>train_feature_tbl</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>train_featureset_tbl</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>label_tbl</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>crf_stats_tbl</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>crf_weights_tbl</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_70e9abe17564e15776adcab8550c7667.html">crf</a></li><li class="navelem"><a class="el" href="crf_8sql__in.html">crf.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:56 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/crf__data__loader_8sql__in.html b/docs/rc/crf__data__loader_8sql__in.html
new file mode 100644
index 0000000..dce883f
--- /dev/null
+++ b/docs/rc/crf__data__loader_8sql__in.html
@@ -0,0 +1,335 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: crf_data_loader.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('crf__data__loader_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">crf_data_loader.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Create database tables and import POS/NER training/testing data to the database.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:aaa609ec1d1d4cff0f335fa358091d5c3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crf__data__loader_8sql__in.html#aaa609ec1d1d4cff0f335fa358091d5c3">crf_train_data</a> (text datapath)</td></tr>
+<tr class="separator:aaa609ec1d1d4cff0f335fa358091d5c3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abf2a39a0b84a5e7ae215db28b3a87f81"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crf__data__loader_8sql__in.html#abf2a39a0b84a5e7ae215db28b3a87f81">crf_test_data</a> (text datapath)</td></tr>
+<tr class="separator:abf2a39a0b84a5e7ae215db28b3a87f81"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><dl class="section date"><dt>Date</dt><dd>Feb. 2012 </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="abf2a39a0b84a5e7ae215db28b3a87f81"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abf2a39a0b84a5e7ae215db28b3a87f81">&#9670;&nbsp;</a></span>crf_test_data()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void crf_test_data </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>datapath</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="section user"><dt>Input</dt><dd></dd></dl>
+<ol type="1">
+<li>Prepare an input test data segment table, e.g.:</li>
+</ol>
+<ul>
+<li>CREATE TABLE test_segmenttbl (start_pos integer,doc_id integer,seg_text text, max_pos integer) <pre class="fragment">sql&gt; select * from test_segmenttbl order by doc_id, start_pos;
+start_pos | doc_id |   seg_text    | max_pos
+----------+---------+--------------+-------------
+     0    |    1   |          the  |    26
+     1    |    1   |       madlib  |    26
+     2    |    1   |      mission  |    26
+     3    |    1   |            :  |    26
+     4    |    1   |           to  |    26
+     5    |    1   |       foster  |    26
+     6    |    1   |   widespread  |    26
+     7    |    1   |  development  |    26
+     8    |    1   |           of  |    26
+     9    |    1   |     scalable  |    26
+     10   |    1   |     analytic  |    26
+     11   |    1   |       skills  |    26
+     12   |    1   |            ,  |    26
+     13   |    1   |           by  |    26
+     ...
+     24   |    1   |  open-source  |    26
+     25   |    1   |   development |    26
+     26   |    1   |             . |    26
+</pre></li>
+</ul>
+<dl class="section user"><dt>Usage</dt><dd><ul>
+<li>create tables and import data to the database SELECT madlib.crf_test_data('/path/to/modeldata') </li>
+</ul>
+</dd></dl>
+
+</div>
+</div>
+<a id="aaa609ec1d1d4cff0f335fa358091d5c3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aaa609ec1d1d4cff0f335fa358091d5c3">&#9670;&nbsp;</a></span>crf_train_data()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void crf_train_data </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>datapath</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="section user"><dt>Input</dt><dd></dd></dl>
+<ol type="1">
+<li>Prepare an input train data segment table, e.g.:</li>
+</ol>
+<ul>
+<li>CREATE TABLE train_segmenttbl (start_pos integer,doc_id integer,seg_text text, max_pos integer) <pre class="fragment">sql&gt; select * from train_segmenttbl order by doc_id, start_pos;
+start_pos | doc_id | seg_text      | max_pos
+----------+---------+--------------+-------------
+     0    |    1   |       madlib  |    9
+     1    |    1   |           is  |    9
+     2    |    1   |           an  |    9
+     3    |    1   |  open-source  |    9
+     4    |    1   |      library  |    9
+     5    |    1   |          for  |    9
+     6    |    1   |     scalable  |    9
+     7    |    1   |  in-database  |    9
+     8    |    1   |    analytics  |    9
+     9    |    1   |            .  |    9
+     0    |    2   |           it  |   16
+     1    |    2   |     provides  |   16
+     2    |    2   |data-parallel  |   16
+     3    |    2   |implementations|   16
+     ...
+     14   |    2   |  unstructured |   16
+     15   |    2   |          data |   16
+     16   |    2   |             . |   16
+</pre></li>
+</ul>
+<ol type="1">
+<li>Prepare an input dictionary table, e.g.,:</li>
+</ol>
+<ul>
+<li>CREATE TABLE crf_dictionary (token text,token_id integer,label text,count integer,total integer) <pre class="fragment">sql&gt; select * from crf_dictionary;
+token       | label  | count | total
+------------+--------+--------------
+   freefall |   11   |   1   |  1
+     policy |   11   |   2   |  2
+   measures |   12   |   1   |  1
+ commitment |   11   |   1   |  1
+        new |    6   |   1   |  1
+     speech |   11   |   1   |  1
+         's |   16   |   2   |  2
+     reckon |   30   |   1   |  1
+ underlying |   28   |   1   |  1
+ ...
+</pre></li>
+</ul>
+<ol type="1">
+<li>Prepare an input label table, e.g.,:</li>
+</ol>
+<ul>
+<li>CREATE TABLE labeltbl (id integer,label character varying) <pre class="fragment">sql&gt; select * from labeltbl order by id;
+id          | label
+------------+--------
+      0     |   CC
+      1     |   CD
+      2     |   DT
+      3     |   EX
+      4     |   FW
+      5     |   IN
+      6     |   JJ
+...
+     42     |    ,
+     43     |    .
+     44     |    :
+</pre></li>
+</ul>
+<ol type="1">
+<li>Prepare an input regex table, e.g.,:</li>
+</ol>
+<ul>
+<li>CREATE TABLE crf_regex (pattern text,name text) <pre class="fragment">sql&gt; select * from crf_regex;
+pattern       |   name
+------------- +---------------
+^[A-Z][a-z]+$ |  InitCapital%
+     ^[A-Z]+$ |  isAllCapital%
+ ^.*[0-9]+.*$ |  containsDigit%
+      ^.+[.]$ |  endsWithDot%
+      ^.+[,]$ |  endsWithComma%
+       ^.+er$ |  endsWithER%
+      ^.+est$ |  endsWithEst%
+       ^.+ed$ |  endsWithED%
+...
+</pre></li>
+</ul>
+<ol type="1">
+<li>Prepare an input feature table, e.g.,:</li>
+</ol>
+<ul>
+<li>CREATE TABLE featuretbl (id integer,name text,prev_label_id integer,label_id integer,weight float) <pre class="fragment">sql&gt; select * from featuretbl order by id;
+id   |     name     | prev_label_id | label_id | weight
+-------------------------------------------------------
+1    | W_chancellor |       -1      |    13     | 2.2322
+2    |         E.13 |       13      |     5     | 2.3995
+3    |            U |       -1      |     5     | 1.2164
+4    |         W_of |       -1      |     5     | 2.8744
+5    |          E.5 |        5      |     2     | 3.7716
+6    |        W_the |       -1      |     2     | 4.1790
+7    |          E.2 |        2      |    13     | 0.8957
+...
+</pre></li>
+</ul>
+<ol type="1">
+<li>Prepare an crf feature set table, e.g.,:</li>
+</ol>
+<ul>
+<li>CREATE TABLE madlib.crf_feature_dic(f_index integer, f_name text, feature integer[]) <pre class="fragment">sql&gt; select * from crf_feature_dic order by id;
+f_index|     f_name   | feature
+--------------------------------
+0      | W_chancellor |       -1
+1      |         E.13 |       13
+2      |            U |       -1
+3      |         W_of |       -1
+4      |          E.5 |        5
+5      |        W_the |       -1
+...
+</pre></li>
+</ul>
+<dl class="section user"><dt>Usage</dt><dd><ul>
+<li>create tables and import data to the database SELECT madlib.crf_train_data('/path/to/modeldata') </li>
+</ul>
+</dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_70e9abe17564e15776adcab8550c7667.html">crf</a></li><li class="navelem"><a class="el" href="crf__data__loader_8sql__in.html">crf_data_loader.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:56 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/crf__feature__gen_8sql__in.html b/docs/rc/crf__feature__gen_8sql__in.html
new file mode 100644
index 0000000..f029721
--- /dev/null
+++ b/docs/rc/crf__feature__gen_8sql__in.html
@@ -0,0 +1,298 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: crf_feature_gen.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('crf__feature__gen_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">crf_feature_gen.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>SQL function for POS/NER feature extraction.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a3548bd640c2af456f3755cb24b913ebd"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crf__feature__gen_8sql__in.html#a3548bd640c2af456f3755cb24b913ebd">crf_train_fgen</a> (text train_segment_tbl, text regex_tbl, text label_tbl, text dictionary_tbl, text train_feature_tbl, text train_featureset_tbl)</td></tr>
+<tr class="memdesc:a3548bd640c2af456f3755cb24b913ebd"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function extracts POS/NER features from the training data.  <a href="#a3548bd640c2af456f3755cb24b913ebd">More...</a><br /></td></tr>
+<tr class="separator:a3548bd640c2af456f3755cb24b913ebd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad9af2c3d1a4f1c937795634ca297dede"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crf__feature__gen_8sql__in.html#ad9af2c3d1a4f1c937795634ca297dede">crf_test_fgen</a> (text test_segment_tbl, text dictionary_tbl, text label_tbl, text regex_tbl, text crf_weights_tbl, text viterbi_mtbl, text viterbi_rtbl)</td></tr>
+<tr class="memdesc:ad9af2c3d1a4f1c937795634ca297dede"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function extracts POS/NER features from the testing data.  <a href="#ad9af2c3d1a4f1c937795634ca297dede">More...</a><br /></td></tr>
+<tr class="separator:ad9af2c3d1a4f1c937795634ca297dede"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><dl class="section date"><dt>Date</dt><dd>February 2012</dd></dl>
+<dl class="section see"><dt>See also</dt><dd>For an introduction to POS/NER feature extraction, see the module description <a class="el" href="group__grp__crf.html">Conditional Random Field</a> </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="ad9af2c3d1a4f1c937795634ca297dede"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad9af2c3d1a4f1c937795634ca297dede">&#9670;&nbsp;</a></span>crf_test_fgen()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void crf_test_fgen </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>test_segment_tbl</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dictionary_tbl</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>label_tbl</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>regex_tbl</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>crf_weights_tbl</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>viterbi_mtbl</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>viterbi_rtbl</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>This feature extraction function will produce two factor tables, "m table" (<em>viterbi_mtbl</em>) and "r table" (<em>viterbi_rtbl</em>). The <em>viterbi_mtbl</em> table and <em>viterbi_rtbl</em> table are used to calculate the best label sequence for each sentence.</p>
+<ul>
+<li><em>viterbi_mtbl</em> table encodes the edge features which are solely dependent on upon current label and previous y value. The m table has three columns which are prev_label, label, and value respectively. If the number of labels in \( n \), then the m factor table will \( n^2 \) rows. Each row encodes the transition feature weight value from the previous label to the current label.</li>
+</ul>
+<p><em>startFeature</em> is considered as a special edge feature which is from the beginning to the first token. Likewise, <em>endFeature</em> can be considered as a special edge feature which is from the last token to the very end. So m table encodes the edgeFeature, startFeature, and endFeature. If the total number of labels in the label space is 45 from 0 to 44, then the m factor array is as follows: </p><pre>
+                 0  1  2  3  4  5...44
+startFeature -1  a  a  a  a  a  a...a
+edgeFeature   0  a  a  a  a  a  a...a
+edgeFeature   1  a  a  a  a  a  a...a
+...
+edgeFeature  44  a  a  a  a  a  a...a
+endFeature   45  a  a  a  a  a  a...a</pre><ul>
+<li>viterbi_r table is related to specific tokens. It encodes the single state features, e.g., wordFeature, RegexFeature for all tokens. The r table is represented in the following way. <pre>
+       0  1  2  3  4...44
+token1 a  a  a  a  a...a
+token2 a  a  a  a  a...a</pre></li>
+</ul>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">test_segment_tbl</td><td>Name of table containing all the tokenized testing sentences. </td></tr>
+    <tr><td class="paramname">dictionary_tbl</td><td>Name of table containing the dictionary_tbl. </td></tr>
+    <tr><td class="paramname">label_tbl</td><td>Name of table containing the the label space used in POS or other NLP tasks. </td></tr>
+    <tr><td class="paramname">regex_tbl</td><td>Name of table containing all the regular expressions to capture regex features. </td></tr>
+    <tr><td class="paramname">crf_weights_tbl</td><td>Name of the table containing featureset weights. </td></tr>
+    <tr><td class="paramname">viterbi_mtbl</td><td>Name of table to store the m factors. </td></tr>
+    <tr><td class="paramname">viterbi_rtbl</td><td>Name of table to store the r factors. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a3548bd640c2af456f3755cb24b913ebd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3548bd640c2af456f3755cb24b913ebd">&#9670;&nbsp;</a></span>crf_train_fgen()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void crf_train_fgen </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>train_segment_tbl</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>regex_tbl</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>label_tbl</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dictionary_tbl</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>train_feature_tbl</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>train_featureset_tbl</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">train_segment_tbl</td><td>Name of table containing all the tokenized training sentences. </td></tr>
+    <tr><td class="paramname">regex_tbl</td><td>Name of table containing all the regular expressions to capture regex features. </td></tr>
+    <tr><td class="paramname">label_tbl</td><td>Name of the label table containing unique ids and label names. </td></tr>
+    <tr><td class="paramname">dictionary_tbl</td><td>Name of table containing the dictionary_tbl. </td></tr>
+    <tr><td class="paramname">train_feature_tbl</td><td>features generated from the traning dataset </td></tr>
+    <tr><td class="paramname">train_featureset_tbl</td><td>unique feature set generated from the training dataset </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_70e9abe17564e15776adcab8550c7667.html">crf</a></li><li class="navelem"><a class="el" href="crf__feature__gen_8sql__in.html">crf_feature_gen.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:56 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/cross__validation_8sql__in.html b/docs/rc/cross__validation_8sql__in.html
new file mode 100644
index 0000000..d24959f
--- /dev/null
+++ b/docs/rc/cross__validation_8sql__in.html
@@ -0,0 +1,710 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: cross_validation.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('cross__validation_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">cross_validation.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>SQL functions for cross validation.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a2a7791b05f51e8748ab7b6ccf328a7e2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cross__validation_8sql__in.html#a2a7791b05f51e8748ab7b6ccf328a7e2">cross_validation_general</a> (varchar modelling_func, varchar[] modelling_params, varchar[] modelling_params_type, varchar param_explored, varchar[] explore_values, varchar predict_func, varchar[] predict_params, varchar[] predict_params_type, varchar metric_func, varchar[] metric_params, varchar[] metric_params_type, varchar data_tbl, varchar data_id, boolean id_is_random, varchar validation_result, varchar[] data_cols, integer n_folds)</td></tr>
+<tr class="separator:a2a7791b05f51e8748ab7b6ccf328a7e2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5efbb27898e99f7685816d9d5dfd082c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cross__validation_8sql__in.html#a5efbb27898e99f7685816d9d5dfd082c">cross_validation_general</a> (varchar modelling_func, varchar[] modelling_params, varchar[] modelling_params_type, varchar param_explored, varchar[] explore_values, varchar predict_func, varchar[] predict_params, varchar[] predict_params_type, varchar metric_func, varchar[] metric_params, varchar[] metric_params_type, varchar data_tbl, varchar data_id, boolean id_is_random, varchar validation_result, varchar[] data_cols)</td></tr>
+<tr class="separator:a5efbb27898e99f7685816d9d5dfd082c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa151eb3fa9acc7f4cc33236e22ad4362"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cross__validation_8sql__in.html#aa151eb3fa9acc7f4cc33236e22ad4362">cv_linregr_train</a> (varchar tbl_source, varchar col_ind_var, varchar col_dep_var, varchar tbl_result)</td></tr>
+<tr class="memdesc:aa151eb3fa9acc7f4cc33236e22ad4362"><td class="mdescLeft">&#160;</td><td class="mdescRight">A wrapper for linear regression.  <a href="#aa151eb3fa9acc7f4cc33236e22ad4362">More...</a><br /></td></tr>
+<tr class="separator:aa151eb3fa9acc7f4cc33236e22ad4362"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa572f1f57c0dd106b30948928161d8cc"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cross__validation_8sql__in.html#aa572f1f57c0dd106b30948928161d8cc">cv_linregr_predict</a> (varchar tbl_model, varchar tbl_newdata, varchar col_ind_var, varchar col_id, varchar tbl_predict)</td></tr>
+<tr class="memdesc:aa572f1f57c0dd106b30948928161d8cc"><td class="mdescLeft">&#160;</td><td class="mdescRight">A wrapper for linear regression prediction.  <a href="#aa572f1f57c0dd106b30948928161d8cc">More...</a><br /></td></tr>
+<tr class="separator:aa572f1f57c0dd106b30948928161d8cc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2cd71e756f90b0c4fa46f508a1ca261e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cross__validation_8sql__in.html#a2cd71e756f90b0c4fa46f508a1ca261e">mse_error</a> (varchar tbl_prediction, varchar tbl_actual, varchar id_actual, varchar values_actual, varchar tbl_error)</td></tr>
+<tr class="separator:a2cd71e756f90b0c4fa46f508a1ca261e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad01cd1c97ae1be0ac7cd6c42abb75bb2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cross__validation_8sql__in.html#ad01cd1c97ae1be0ac7cd6c42abb75bb2">misclassification_avg</a> (varchar tbl_prediction, varchar tbl_actual, varchar id_actual, varchar values_actual, varchar tbl_error)</td></tr>
+<tr class="separator:ad01cd1c97ae1be0ac7cd6c42abb75bb2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac7dbc115f0c4624ccbf62b2d5494388d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cross__validation_8sql__in.html#ac7dbc115f0c4624ccbf62b2d5494388d">cv_logregr_predict</a> (varchar tbl_model, varchar tbl_newdata, varchar col_ind_var, varchar col_id, varchar tbl_predict)</td></tr>
+<tr class="memdesc:ac7dbc115f0c4624ccbf62b2d5494388d"><td class="mdescLeft">&#160;</td><td class="mdescRight">A prediction function for logistic regression The result is stored in the table of tbl_predict.  <a href="#ac7dbc115f0c4624ccbf62b2d5494388d">More...</a><br /></td></tr>
+<tr class="separator:ac7dbc115f0c4624ccbf62b2d5494388d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2d1571ffa794176a5dfed9d35e70fed7"><td class="memItemLeft" align="right" valign="top">integer&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cross__validation_8sql__in.html#a2d1571ffa794176a5dfed9d35e70fed7">logregr_accuracy</a> (float8[] coef, float8[] col_ind, boolean col_dep)</td></tr>
+<tr class="memdesc:a2d1571ffa794176a5dfed9d35e70fed7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Metric function for logistic regression.  <a href="#a2d1571ffa794176a5dfed9d35e70fed7">More...</a><br /></td></tr>
+<tr class="separator:a2d1571ffa794176a5dfed9d35e70fed7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac1b5c57473ff672af45191c8d53f46ed"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cross__validation_8sql__in.html#ac1b5c57473ff672af45191c8d53f46ed">cv_logregr_accuracy</a> (varchar tbl_predict, varchar tbl_source, varchar col_id, varchar col_dep_var, varchar tbl_accuracy)</td></tr>
+<tr class="memdesc:ac1b5c57473ff672af45191c8d53f46ed"><td class="mdescLeft">&#160;</td><td class="mdescRight">Metric function for logistic regression.  <a href="#ac1b5c57473ff672af45191c8d53f46ed">More...</a><br /></td></tr>
+<tr class="separator:ac1b5c57473ff672af45191c8d53f46ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><dl class="section date"><dt>Date</dt><dd>January 2011</dd></dl>
+<dl class="section see"><dt>See also</dt><dd>For a brief introduction to the usage of cross validation, see the module description <a class="el" href="group__grp__validation.html">Cross Validation</a>. </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="a2a7791b05f51e8748ab7b6ccf328a7e2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2a7791b05f51e8748ab7b6ccf328a7e2">&#9670;&nbsp;</a></span>cross_validation_general() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cross_validation_general </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>modelling_func</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar []&#160;</td>
+          <td class="paramname"><em>modelling_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar []&#160;</td>
+          <td class="paramname"><em>modelling_params_type</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>param_explored</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar []&#160;</td>
+          <td class="paramname"><em>explore_values</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>predict_func</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar []&#160;</td>
+          <td class="paramname"><em>predict_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar []&#160;</td>
+          <td class="paramname"><em>predict_params_type</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>metric_func</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar []&#160;</td>
+          <td class="paramname"><em>metric_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar []&#160;</td>
+          <td class="paramname"><em>metric_params_type</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>data_tbl</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>data_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>id_is_random</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>validation_result</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar []&#160;</td>
+          <td class="paramname"><em>data_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>n_folds</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5efbb27898e99f7685816d9d5dfd082c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5efbb27898e99f7685816d9d5dfd082c">&#9670;&nbsp;</a></span>cross_validation_general() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cross_validation_general </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>modelling_func</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar []&#160;</td>
+          <td class="paramname"><em>modelling_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar []&#160;</td>
+          <td class="paramname"><em>modelling_params_type</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>param_explored</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar []&#160;</td>
+          <td class="paramname"><em>explore_values</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>predict_func</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar []&#160;</td>
+          <td class="paramname"><em>predict_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar []&#160;</td>
+          <td class="paramname"><em>predict_params_type</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>metric_func</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar []&#160;</td>
+          <td class="paramname"><em>metric_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar []&#160;</td>
+          <td class="paramname"><em>metric_params_type</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>data_tbl</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>data_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>id_is_random</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>validation_result</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar []&#160;</td>
+          <td class="paramname"><em>data_cols</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa572f1f57c0dd106b30948928161d8cc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa572f1f57c0dd106b30948928161d8cc">&#9670;&nbsp;</a></span>cv_linregr_predict()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cv_linregr_predict </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>tbl_model</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>tbl_newdata</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>col_ind_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>col_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>tbl_predict</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa151eb3fa9acc7f4cc33236e22ad4362"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa151eb3fa9acc7f4cc33236e22ad4362">&#9670;&nbsp;</a></span>cv_linregr_train()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cv_linregr_train </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>tbl_source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>col_ind_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>col_dep_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>tbl_result</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac1b5c57473ff672af45191c8d53f46ed"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac1b5c57473ff672af45191c8d53f46ed">&#9670;&nbsp;</a></span>cv_logregr_accuracy()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cv_logregr_accuracy </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>tbl_predict</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>tbl_source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>col_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>col_dep_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>tbl_accuracy</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>It computes the percentage of correct predictions. The result is stored in the table of tbl_accuracy </p>
+
+</div>
+</div>
+<a id="ac7dbc115f0c4624ccbf62b2d5494388d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac7dbc115f0c4624ccbf62b2d5494388d">&#9670;&nbsp;</a></span>cv_logregr_predict()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cv_logregr_predict </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>tbl_model</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>tbl_newdata</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>col_ind_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>col_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>tbl_predict</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>This function can be used together with cross-validation </p>
+
+</div>
+</div>
+<a id="a2d1571ffa794176a5dfed9d35e70fed7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2d1571ffa794176a5dfed9d35e70fed7">&#9670;&nbsp;</a></span>logregr_accuracy()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">integer logregr_accuracy </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>coef</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>col_ind</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>col_dep</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">coef</td><td>Logistic fitting coefficients. Note: MADlib logregr_train function, unlike elastic_net, does not produce a separate intercept term. </td></tr>
+    <tr><td class="paramname">col_ind</td><td>Independent variable, an array </td></tr>
+    <tr><td class="paramname">col_dep</td><td>Dependent variable</td></tr>
+  </table>
+  </dd>
+</dl>
+<p>returns 1 if the prediction is the same as col_dep, otherwise 0 </p>
+
+</div>
+</div>
+<a id="ad01cd1c97ae1be0ac7cd6c42abb75bb2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad01cd1c97ae1be0ac7cd6c42abb75bb2">&#9670;&nbsp;</a></span>misclassification_avg()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void misclassification_avg </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>tbl_prediction</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>tbl_actual</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>id_actual</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>values_actual</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>tbl_error</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a2cd71e756f90b0c4fa46f508a1ca261e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2cd71e756f90b0c4fa46f508a1ca261e">&#9670;&nbsp;</a></span>mse_error()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void mse_error </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>tbl_prediction</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>tbl_actual</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>id_actual</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>values_actual</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>tbl_error</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_9f5e6edf0db58b0627c46b41dbbbb27f.html">validation</a></li><li class="navelem"><a class="el" href="cross__validation_8sql__in.html">cross_validation.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:56 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/decision__tree_8sql__in.html b/docs/rc/decision__tree_8sql__in.html
new file mode 100644
index 0000000..24966bb
--- /dev/null
+++ b/docs/rc/decision__tree_8sql__in.html
@@ -0,0 +1,2757 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: decision_tree.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('decision__tree_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">decision_tree.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a66dd4c15469c65676190208ee6853b83"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decision__tree_8sql__in.html#a66dd4c15469c65676190208ee6853b83">tree_train</a> (text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text split_criterion, text grouping_cols, text weights, integer max_depth, integer min_split, integer min_bucket, integer n_bins, text pruning_params, text null_handling_params, boolean verbose_mode)</td></tr>
+<tr class="memdesc:a66dd4c15469c65676190208ee6853b83"><td class="mdescLeft">&#160;</td><td class="mdescRight">Training of decision tree.  <a href="#a66dd4c15469c65676190208ee6853b83">More...</a><br /></td></tr>
+<tr class="separator:a66dd4c15469c65676190208ee6853b83"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abf7fdb1ed06c426e60fb4aedae95d53c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decision__tree_8sql__in.html#abf7fdb1ed06c426e60fb4aedae95d53c">__build_tree</a> (boolean is_classification, text split_criterion, text training_table_name, text output_table_name, text id_col_name, text dependent_variable, boolean dep_is_bool, text list_of_features, varchar[] cat_features, varchar[] ordered_cat_features, varchar[] boolean_cats, varchar[] con_features, text grouping_cols, text weights, integer max_depth, integer min_split, integer min_bucket, integer n_bins, text cp_table, smallint max_n_surr, text msg_level, text null_proxy, integer n_folds)</td></tr>
+<tr class="separator:abf7fdb1ed06c426e60fb4aedae95d53c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a73a43da31b61ee81d5208860af2d3ab1"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decision__tree_8sql__in.html#a73a43da31b61ee81d5208860af2d3ab1">tree_train</a> (text message)</td></tr>
+<tr class="separator:a73a43da31b61ee81d5208860af2d3ab1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a530812f8c3662705e24f8bf24d4eb3a5"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decision__tree_8sql__in.html#a530812f8c3662705e24f8bf24d4eb3a5">tree_train</a> ()</td></tr>
+<tr class="separator:a530812f8c3662705e24f8bf24d4eb3a5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac6533f633d95f6c41a628a751b356ce1"><td class="memItemLeft" align="right" valign="top">bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decision__tree_8sql__in.html#ac6533f633d95f6c41a628a751b356ce1">_dst_compute_con_splits_transition</a> (bytea8 state, float8[] con_features, integer n_per_seg, smallint num_splits)</td></tr>
+<tr class="separator:ac6533f633d95f6c41a628a751b356ce1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1ce0c3bc05f5f6657ce61f2890b27a33"><td class="memItemLeft" align="right" valign="top">bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decision__tree_8sql__in.html#a1ce0c3bc05f5f6657ce61f2890b27a33">_dst_compute_con_splits_final</a> (bytea8 state)</td></tr>
+<tr class="separator:a1ce0c3bc05f5f6657ce61f2890b27a33"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaabc1efd8cc211886572692062f74732"><td class="memItemLeft" align="right" valign="top">aggregate bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decision__tree_8sql__in.html#aaabc1efd8cc211886572692062f74732">_dst_compute_con_splits</a> (float8[], integer, smallint)</td></tr>
+<tr class="separator:aaabc1efd8cc211886572692062f74732"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a88589c4a865221cd97af52284e222195"><td class="memItemLeft" align="right" valign="top">integer []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decision__tree_8sql__in.html#a88589c4a865221cd97af52284e222195">_dst_compute_entropy_transition</a> (integer[] state, integer encoded_dep_var, integer num_dep_var)</td></tr>
+<tr class="separator:a88589c4a865221cd97af52284e222195"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a992c692244ec9f1dd38557bc8cf5c2ef"><td class="memItemLeft" align="right" valign="top">integer []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decision__tree_8sql__in.html#a992c692244ec9f1dd38557bc8cf5c2ef">_dst_compute_entropy_merge</a> (integer[] state1, integer[] state2)</td></tr>
+<tr class="separator:a992c692244ec9f1dd38557bc8cf5c2ef"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac81d2cf47356702c5bc30790f505c05f"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decision__tree_8sql__in.html#ac81d2cf47356702c5bc30790f505c05f">_dst_compute_entropy_final</a> (integer[] state)</td></tr>
+<tr class="separator:ac81d2cf47356702c5bc30790f505c05f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a71e8f6ae4227a3cd3734d8c8f7ef54fe"><td class="memItemLeft" align="right" valign="top">aggregate float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decision__tree_8sql__in.html#a71e8f6ae4227a3cd3734d8c8f7ef54fe">_dst_compute_entropy</a> (integer, integer)</td></tr>
+<tr class="separator:a71e8f6ae4227a3cd3734d8c8f7ef54fe"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a56fec99839acd3f7f9d33f0912480928"><td class="memItemLeft" align="right" valign="top">integer []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decision__tree_8sql__in.html#a56fec99839acd3f7f9d33f0912480928">_map_catlevel_to_int</a> (text[] cat_values_in_text, text[] cat_levels_in_text, integer[] cat_n_levels, boolean null_as_category)</td></tr>
+<tr class="separator:a56fec99839acd3f7f9d33f0912480928"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad63f7b9a78190275509744f9517dd370"><td class="memItemLeft" align="right" valign="top">bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decision__tree_8sql__in.html#ad63f7b9a78190275509744f9517dd370">_initialize_decision_tree</a> (boolean is_regression_tree, text impurity_function, smallint num_response_labels, smallint max_n_surr)</td></tr>
+<tr class="separator:ad63f7b9a78190275509744f9517dd370"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aadad9dcc5dd62e335305e99dc1a1b68e"><td class="memItemLeft" align="right" valign="top">bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decision__tree_8sql__in.html#aadad9dcc5dd62e335305e99dc1a1b68e">_compute_leaf_stats_transition</a> (bytea8 state, bytea8 tree_state, integer[] cat_features, float8[] con_features, float8 response, float8 weight, integer[] cat_levels, bytea8 con_splits, smallint n_response_labels, boolean weights_as_rows)</td></tr>
+<tr class="separator:aadad9dcc5dd62e335305e99dc1a1b68e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aec006330e98f6c322f30c05cb07518c0"><td class="memItemLeft" align="right" valign="top">bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decision__tree_8sql__in.html#aec006330e98f6c322f30c05cb07518c0">_compute_leaf_stats_merge</a> (bytea8 state1, bytea8 state2)</td></tr>
+<tr class="separator:aec006330e98f6c322f30c05cb07518c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a93896cc01cd324ff6dec20d3791b8500"><td class="memItemLeft" align="right" valign="top">aggregate bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decision__tree_8sql__in.html#a93896cc01cd324ff6dec20d3791b8500">_compute_leaf_stats</a> (bytea8, integer[], float8[], float8, float8, integer[], bytea8, smallint, boolean)</td></tr>
+<tr class="separator:a93896cc01cd324ff6dec20d3791b8500"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a164580846362686fe4ab55db7c4fa52a"><td class="memItemLeft" align="right" valign="top">_tree_result_type&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decision__tree_8sql__in.html#a164580846362686fe4ab55db7c4fa52a">_dt_apply</a> (bytea8 tree, bytea8 state, bytea8 con_splits, smallint min_split, smallint min_bucket, smallint max_depth, boolean subsample, integer num_random_features)</td></tr>
+<tr class="separator:a164580846362686fe4ab55db7c4fa52a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af17fb0c819380de1c090731dba54ec40"><td class="memItemLeft" align="right" valign="top">bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decision__tree_8sql__in.html#af17fb0c819380de1c090731dba54ec40">_compute_surr_stats_transition</a> (bytea8 state, bytea8 tree_state, integer[] cat_features, float8[] con_features, integer[] cat_levels, bytea8 con_splits, integer dup_count)</td></tr>
+<tr class="separator:af17fb0c819380de1c090731dba54ec40"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a52020e1216a5ca6b255aa9fefa5ed0f1"><td class="memItemLeft" align="right" valign="top">aggregate bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decision__tree_8sql__in.html#a52020e1216a5ca6b255aa9fefa5ed0f1">_compute_surr_stats</a> (bytea8, integer[], float8[], integer[], bytea8, integer)</td></tr>
+<tr class="separator:a52020e1216a5ca6b255aa9fefa5ed0f1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a05665f86bc28346cdf12e4b4d05aa3d9"><td class="memItemLeft" align="right" valign="top">bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decision__tree_8sql__in.html#a05665f86bc28346cdf12e4b4d05aa3d9">_dt_surr_apply</a> (bytea8 tree, bytea8 state, bytea8 con_splits)</td></tr>
+<tr class="separator:a05665f86bc28346cdf12e4b4d05aa3d9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a32e1056ceed38cc5da2e022e455b7de6"><td class="memItemLeft" align="right" valign="top">_flattened_tree&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decision__tree_8sql__in.html#a32e1056ceed38cc5da2e022e455b7de6">_print_decision_tree</a> (bytea8 tree)</td></tr>
+<tr class="separator:a32e1056ceed38cc5da2e022e455b7de6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adb43607742d993e1588e1e7a74e82320"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decision__tree_8sql__in.html#adb43607742d993e1588e1e7a74e82320">_compute_var_importance</a> (bytea8 tree, integer n_cat_features, integer n_con_features)</td></tr>
+<tr class="separator:adb43607742d993e1588e1e7a74e82320"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a59b5f555e1f8d7c57830c9cfe3401615"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decision__tree_8sql__in.html#a59b5f555e1f8d7c57830c9cfe3401615">_predict_dt_response</a> (bytea8 tree, integer[] cat_features, float8[] con_features)</td></tr>
+<tr class="separator:a59b5f555e1f8d7c57830c9cfe3401615"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a25ef01785744c7cf005e6b517602b497"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decision__tree_8sql__in.html#a25ef01785744c7cf005e6b517602b497">_predict_dt_prob</a> (bytea8 tree, integer[] cat_features, float8[] con_features)</td></tr>
+<tr class="separator:a25ef01785744c7cf005e6b517602b497"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae371963e135c40d8be5b2e342ab3c252"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decision__tree_8sql__in.html#ae371963e135c40d8be5b2e342ab3c252">tree_predict</a> (text model, text source, text output, text pred_type)</td></tr>
+<tr class="memdesc:ae371963e135c40d8be5b2e342ab3c252"><td class="mdescLeft">&#160;</td><td class="mdescRight">Use decision tree model to make predictions.  <a href="#ae371963e135c40d8be5b2e342ab3c252">More...</a><br /></td></tr>
+<tr class="separator:ae371963e135c40d8be5b2e342ab3c252"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a71a536f94609625aabceaaa8a9030ac6"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decision__tree_8sql__in.html#a71a536f94609625aabceaaa8a9030ac6">__tree_predict</a> (text model, text source, text output, text pred_type, boolean use_existing_tables, integer k)</td></tr>
+<tr class="separator:a71a536f94609625aabceaaa8a9030ac6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad8afbe21c3b73daff7322c3fe906a804"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decision__tree_8sql__in.html#ad8afbe21c3b73daff7322c3fe906a804">tree_predict</a> (text model, text source, text output)</td></tr>
+<tr class="separator:ad8afbe21c3b73daff7322c3fe906a804"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abb6f3ecdd2fdcb7661ee10a65419066e"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decision__tree_8sql__in.html#abb6f3ecdd2fdcb7661ee10a65419066e">tree_predict</a> (text message)</td></tr>
+<tr class="separator:abb6f3ecdd2fdcb7661ee10a65419066e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a744d4c5564a3ba18c9774fa040f32d18"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decision__tree_8sql__in.html#a744d4c5564a3ba18c9774fa040f32d18">tree_predict</a> ()</td></tr>
+<tr class="separator:a744d4c5564a3ba18c9774fa040f32d18"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6ba706727adf88f8c07cfe09f71732bb"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decision__tree_8sql__in.html#a6ba706727adf88f8c07cfe09f71732bb">tree_surr_display</a> (text model_table)</td></tr>
+<tr class="memdesc:a6ba706727adf88f8c07cfe09f71732bb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Display decision tree in dot or text format.  <a href="#a6ba706727adf88f8c07cfe09f71732bb">More...</a><br /></td></tr>
+<tr class="separator:a6ba706727adf88f8c07cfe09f71732bb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a97c730e746e1a8ea658efe433c9d1be5"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decision__tree_8sql__in.html#a97c730e746e1a8ea658efe433c9d1be5">tree_surr_display</a> ()</td></tr>
+<tr class="separator:a97c730e746e1a8ea658efe433c9d1be5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae3e4875107103a092d3ef560b1812ee5"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decision__tree_8sql__in.html#ae3e4875107103a092d3ef560b1812ee5">tree_display</a> (text model_table, boolean dot_format, boolean verbose)</td></tr>
+<tr class="memdesc:ae3e4875107103a092d3ef560b1812ee5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Display decision tree in dot or text format.  <a href="#ae3e4875107103a092d3ef560b1812ee5">More...</a><br /></td></tr>
+<tr class="separator:ae3e4875107103a092d3ef560b1812ee5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3c51edcc0fe3de029dc39a3f0306155d"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decision__tree_8sql__in.html#a3c51edcc0fe3de029dc39a3f0306155d">tree_display</a> (text model_table, boolean dot_format)</td></tr>
+<tr class="separator:a3c51edcc0fe3de029dc39a3f0306155d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5168f7f604b0ad1c9e581f0e3f52698e"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decision__tree_8sql__in.html#a5168f7f604b0ad1c9e581f0e3f52698e">tree_display</a> (text model_table)</td></tr>
+<tr class="separator:a5168f7f604b0ad1c9e581f0e3f52698e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adc9d02213b4d906976805a9681ea13fb"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decision__tree_8sql__in.html#adc9d02213b4d906976805a9681ea13fb">tree_display</a> ()</td></tr>
+<tr class="separator:adc9d02213b4d906976805a9681ea13fb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a77f0212dd3776488cf73080eeb4e851c"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decision__tree_8sql__in.html#a77f0212dd3776488cf73080eeb4e851c">_display_decision_tree</a> (bytea8 tree, text[] cat_features, text[] con_features, text[] cat_levels_in_text, integer[] cat_n_levels, text[] dependent_levels, text id_prefix, boolean verbose)</td></tr>
+<tr class="separator:a77f0212dd3776488cf73080eeb4e851c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0dd7cec9ec3db8482ae60a3f274c3488"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decision__tree_8sql__in.html#a0dd7cec9ec3db8482ae60a3f274c3488">_display_decision_tree</a> (bytea8 tree, text[] cat_features, text[] con_features, text[] cat_levels_in_text, integer[] cat_n_levels, text[] dependent_levels, text id_prefix)</td></tr>
+<tr class="separator:a0dd7cec9ec3db8482ae60a3f274c3488"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a071ad5dd0cf985d9e5258968fa8c214d"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decision__tree_8sql__in.html#a071ad5dd0cf985d9e5258968fa8c214d">_display_decision_tree_surrogate</a> (bytea8 tree, text[] cat_features, text[] con_features, text[] cat_levels_in_text, integer[] cat_n_levels)</td></tr>
+<tr class="separator:a071ad5dd0cf985d9e5258968fa8c214d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af030ab954fd282bb08e13134e087fafb"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decision__tree_8sql__in.html#af030ab954fd282bb08e13134e087fafb">_display_text_decision_tree</a> (bytea8 tree, text[] cat_features, text[] con_features, text[] cat_levels_in_text, integer[] cat_n_levels, text[] dependent_levels)</td></tr>
+<tr class="separator:af030ab954fd282bb08e13134e087fafb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a658412807f7b28e9e367a1421cb8ad96"><td class="memItemLeft" align="right" valign="top">set&lt; _cat_levels_type &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decision__tree_8sql__in.html#a658412807f7b28e9e367a1421cb8ad96">_gen_cat_levels_set</a> (text[] grp_keys, integer[] cat_n_levels, integer n_cat, text[] cat_sorted_origin)</td></tr>
+<tr class="separator:a658412807f7b28e9e367a1421cb8ad96"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7071599a77d6080b2159e3ca167cff6c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decision__tree_8sql__in.html#a7071599a77d6080b2159e3ca167cff6c">tree_train</a> (text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text split_criterion, text grouping_cols, text weights, integer max_depth, integer min_split, integer min_bucket, integer n_bins, text pruning_params, text null_handling_params)</td></tr>
+<tr class="separator:a7071599a77d6080b2159e3ca167cff6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab561b3e2a8a66b6ec763d44ea042aeca"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decision__tree_8sql__in.html#ab561b3e2a8a66b6ec763d44ea042aeca">tree_train</a> (text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text split_criterion, text grouping_cols, text weights, integer max_depth, integer min_split, integer min_bucket, integer n_bins, text pruning_params)</td></tr>
+<tr class="separator:ab561b3e2a8a66b6ec763d44ea042aeca"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:add62455af9b9f9a075df8221269a4872"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decision__tree_8sql__in.html#add62455af9b9f9a075df8221269a4872">tree_train</a> (text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text split_criterion, text grouping_cols, text weights, integer max_depth, integer min_split, integer min_bucket, integer n_bins)</td></tr>
+<tr class="separator:add62455af9b9f9a075df8221269a4872"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a635b82bc9c1fcd63e5a46546d3e2ba70"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decision__tree_8sql__in.html#a635b82bc9c1fcd63e5a46546d3e2ba70">tree_train</a> (text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text split_criterion, text grouping_cols, text weights, integer max_depth, integer min_split, integer min_bucket)</td></tr>
+<tr class="separator:a635b82bc9c1fcd63e5a46546d3e2ba70"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a93591ca5193e5ac9f8c3ac52e1dfb1ba"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decision__tree_8sql__in.html#a93591ca5193e5ac9f8c3ac52e1dfb1ba">tree_train</a> (text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text split_criterion, text grouping_cols, text weights, integer max_depth, integer min_split)</td></tr>
+<tr class="separator:a93591ca5193e5ac9f8c3ac52e1dfb1ba"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a558361a337c93731b856523e20f20e72"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decision__tree_8sql__in.html#a558361a337c93731b856523e20f20e72">tree_train</a> (text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text split_criterion, text grouping_cols, text weights, integer max_depth)</td></tr>
+<tr class="separator:a558361a337c93731b856523e20f20e72"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a10b882e4d6417023ae6b92f79e88ac29"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decision__tree_8sql__in.html#a10b882e4d6417023ae6b92f79e88ac29">tree_train</a> (text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text split_criterion, text grouping_cols, text weights)</td></tr>
+<tr class="separator:a10b882e4d6417023ae6b92f79e88ac29"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac49c038b5668aeb901d22a5a81c8f338"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decision__tree_8sql__in.html#ac49c038b5668aeb901d22a5a81c8f338">tree_train</a> (text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text split_criterion, text grouping_cols)</td></tr>
+<tr class="separator:ac49c038b5668aeb901d22a5a81c8f338"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9cfac8d89b1a13d22a20eb79d4d7e7ce"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decision__tree_8sql__in.html#a9cfac8d89b1a13d22a20eb79d4d7e7ce">tree_train</a> (text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text split_criterion)</td></tr>
+<tr class="separator:a9cfac8d89b1a13d22a20eb79d4d7e7ce"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af70d0b6bba29f94ebd49acc48b4f9bb1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decision__tree_8sql__in.html#af70d0b6bba29f94ebd49acc48b4f9bb1">tree_train</a> (text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude)</td></tr>
+<tr class="separator:af70d0b6bba29f94ebd49acc48b4f9bb1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a639431da2553fb86673e82d62cde4458"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decision__tree_8sql__in.html#a639431da2553fb86673e82d62cde4458">tree_train</a> (text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features)</td></tr>
+<tr class="separator:a639431da2553fb86673e82d62cde4458"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="abf7fdb1ed06c426e60fb4aedae95d53c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abf7fdb1ed06c426e60fb4aedae95d53c">&#9670;&nbsp;</a></span>__build_tree()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void __build_tree </td>
+          <td>(</td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>is_classification</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>split_criterion</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>training_table_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>id_col_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dependent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>dep_is_bool</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>list_of_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar []&#160;</td>
+          <td class="paramname"><em>cat_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar []&#160;</td>
+          <td class="paramname"><em>ordered_cat_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar []&#160;</td>
+          <td class="paramname"><em>boolean_cats</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar []&#160;</td>
+          <td class="paramname"><em>con_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>weights</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_depth</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>min_split</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>min_bucket</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>n_bins</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>cp_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">smallint&#160;</td>
+          <td class="paramname"><em>max_n_surr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>msg_level</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>null_proxy</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>n_folds</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a71a536f94609625aabceaaa8a9030ac6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a71a536f94609625aabceaaa8a9030ac6">&#9670;&nbsp;</a></span>__tree_predict()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void __tree_predict </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>model</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pred_type</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>use_existing_tables</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>k</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a93896cc01cd324ff6dec20d3791b8500"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a93896cc01cd324ff6dec20d3791b8500">&#9670;&nbsp;</a></span>_compute_leaf_stats()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate bytea8 _compute_leaf_stats </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">smallint&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aec006330e98f6c322f30c05cb07518c0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aec006330e98f6c322f30c05cb07518c0">&#9670;&nbsp;</a></span>_compute_leaf_stats_merge()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea8 _compute_leaf_stats_merge </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aadad9dcc5dd62e335305e99dc1a1b68e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aadad9dcc5dd62e335305e99dc1a1b68e">&#9670;&nbsp;</a></span>_compute_leaf_stats_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea8 _compute_leaf_stats_transition </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>tree_state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>cat_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>con_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>response</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>weight</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>cat_levels</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>con_splits</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">smallint&#160;</td>
+          <td class="paramname"><em>n_response_labels</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>weights_as_rows</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a52020e1216a5ca6b255aa9fefa5ed0f1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a52020e1216a5ca6b255aa9fefa5ed0f1">&#9670;&nbsp;</a></span>_compute_surr_stats()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate bytea8 _compute_surr_stats </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="af17fb0c819380de1c090731dba54ec40"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af17fb0c819380de1c090731dba54ec40">&#9670;&nbsp;</a></span>_compute_surr_stats_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea8 _compute_surr_stats_transition </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>tree_state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>cat_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>con_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>cat_levels</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>con_splits</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>dup_count</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="adb43607742d993e1588e1e7a74e82320"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adb43607742d993e1588e1e7a74e82320">&#9670;&nbsp;</a></span>_compute_var_importance()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] _compute_var_importance </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>tree</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>n_cat_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>n_con_features</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a77f0212dd3776488cf73080eeb4e851c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a77f0212dd3776488cf73080eeb4e851c">&#9670;&nbsp;</a></span>_display_decision_tree() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text _display_decision_tree </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>tree</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text []&#160;</td>
+          <td class="paramname"><em>cat_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text []&#160;</td>
+          <td class="paramname"><em>con_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text []&#160;</td>
+          <td class="paramname"><em>cat_levels_in_text</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>cat_n_levels</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text []&#160;</td>
+          <td class="paramname"><em>dependent_levels</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>id_prefix</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>verbose</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a0dd7cec9ec3db8482ae60a3f274c3488"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0dd7cec9ec3db8482ae60a3f274c3488">&#9670;&nbsp;</a></span>_display_decision_tree() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text _display_decision_tree </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>tree</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text []&#160;</td>
+          <td class="paramname"><em>cat_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text []&#160;</td>
+          <td class="paramname"><em>con_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text []&#160;</td>
+          <td class="paramname"><em>cat_levels_in_text</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>cat_n_levels</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text []&#160;</td>
+          <td class="paramname"><em>dependent_levels</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>id_prefix</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a071ad5dd0cf985d9e5258968fa8c214d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a071ad5dd0cf985d9e5258968fa8c214d">&#9670;&nbsp;</a></span>_display_decision_tree_surrogate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text _display_decision_tree_surrogate </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>tree</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text []&#160;</td>
+          <td class="paramname"><em>cat_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text []&#160;</td>
+          <td class="paramname"><em>con_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text []&#160;</td>
+          <td class="paramname"><em>cat_levels_in_text</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>cat_n_levels</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="af030ab954fd282bb08e13134e087fafb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af030ab954fd282bb08e13134e087fafb">&#9670;&nbsp;</a></span>_display_text_decision_tree()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text _display_text_decision_tree </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>tree</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text []&#160;</td>
+          <td class="paramname"><em>cat_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text []&#160;</td>
+          <td class="paramname"><em>con_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text []&#160;</td>
+          <td class="paramname"><em>cat_levels_in_text</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>cat_n_levels</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text []&#160;</td>
+          <td class="paramname"><em>dependent_levels</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aaabc1efd8cc211886572692062f74732"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aaabc1efd8cc211886572692062f74732">&#9670;&nbsp;</a></span>_dst_compute_con_splits()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate bytea8 _dst_compute_con_splits </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">smallint&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1ce0c3bc05f5f6657ce61f2890b27a33"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1ce0c3bc05f5f6657ce61f2890b27a33">&#9670;&nbsp;</a></span>_dst_compute_con_splits_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea8 _dst_compute_con_splits_final </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac6533f633d95f6c41a628a751b356ce1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac6533f633d95f6c41a628a751b356ce1">&#9670;&nbsp;</a></span>_dst_compute_con_splits_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea8 _dst_compute_con_splits_transition </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>con_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>n_per_seg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">smallint&#160;</td>
+          <td class="paramname"><em>num_splits</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a71e8f6ae4227a3cd3734d8c8f7ef54fe"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a71e8f6ae4227a3cd3734d8c8f7ef54fe">&#9670;&nbsp;</a></span>_dst_compute_entropy()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 _dst_compute_entropy </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac81d2cf47356702c5bc30790f505c05f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac81d2cf47356702c5bc30790f505c05f">&#9670;&nbsp;</a></span>_dst_compute_entropy_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 _dst_compute_entropy_final </td>
+          <td>(</td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a992c692244ec9f1dd38557bc8cf5c2ef"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a992c692244ec9f1dd38557bc8cf5c2ef">&#9670;&nbsp;</a></span>_dst_compute_entropy_merge()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">integer [] _dst_compute_entropy_merge </td>
+          <td>(</td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a88589c4a865221cd97af52284e222195"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a88589c4a865221cd97af52284e222195">&#9670;&nbsp;</a></span>_dst_compute_entropy_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">integer [] _dst_compute_entropy_transition </td>
+          <td>(</td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>encoded_dep_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_dep_var</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a164580846362686fe4ab55db7c4fa52a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a164580846362686fe4ab55db7c4fa52a">&#9670;&nbsp;</a></span>_dt_apply()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">_tree_result_type _dt_apply </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>tree</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>con_splits</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">smallint&#160;</td>
+          <td class="paramname"><em>min_split</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">smallint&#160;</td>
+          <td class="paramname"><em>min_bucket</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">smallint&#160;</td>
+          <td class="paramname"><em>max_depth</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>subsample</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_random_features</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a05665f86bc28346cdf12e4b4d05aa3d9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a05665f86bc28346cdf12e4b4d05aa3d9">&#9670;&nbsp;</a></span>_dt_surr_apply()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea8 _dt_surr_apply </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>tree</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>con_splits</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a658412807f7b28e9e367a1421cb8ad96"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a658412807f7b28e9e367a1421cb8ad96">&#9670;&nbsp;</a></span>_gen_cat_levels_set()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">set&lt;_cat_levels_type&gt; _gen_cat_levels_set </td>
+          <td>(</td>
+          <td class="paramtype">text []&#160;</td>
+          <td class="paramname"><em>grp_keys</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>cat_n_levels</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>n_cat</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text []&#160;</td>
+          <td class="paramname"><em>cat_sorted_origin</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ad63f7b9a78190275509744f9517dd370"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad63f7b9a78190275509744f9517dd370">&#9670;&nbsp;</a></span>_initialize_decision_tree()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea8 _initialize_decision_tree </td>
+          <td>(</td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>is_regression_tree</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>impurity_function</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">smallint&#160;</td>
+          <td class="paramname"><em>num_response_labels</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">smallint&#160;</td>
+          <td class="paramname"><em>max_n_surr</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a56fec99839acd3f7f9d33f0912480928"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a56fec99839acd3f7f9d33f0912480928">&#9670;&nbsp;</a></span>_map_catlevel_to_int()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">integer [] _map_catlevel_to_int </td>
+          <td>(</td>
+          <td class="paramtype">text []&#160;</td>
+          <td class="paramname"><em>cat_values_in_text</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text []&#160;</td>
+          <td class="paramname"><em>cat_levels_in_text</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>cat_n_levels</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>null_as_category</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a25ef01785744c7cf005e6b517602b497"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a25ef01785744c7cf005e6b517602b497">&#9670;&nbsp;</a></span>_predict_dt_prob()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] _predict_dt_prob </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>tree</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>cat_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>con_features</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a59b5f555e1f8d7c57830c9cfe3401615"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a59b5f555e1f8d7c57830c9cfe3401615">&#9670;&nbsp;</a></span>_predict_dt_response()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 _predict_dt_response </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>tree</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>cat_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>con_features</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a32e1056ceed38cc5da2e022e455b7de6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a32e1056ceed38cc5da2e022e455b7de6">&#9670;&nbsp;</a></span>_print_decision_tree()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">_flattened_tree _print_decision_tree </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>tree</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae3e4875107103a092d3ef560b1812ee5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae3e4875107103a092d3ef560b1812ee5">&#9670;&nbsp;</a></span>tree_display() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar tree_display </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>dot_format</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>verbose</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">tree_model</td><td>Name of the table containing the decision tree model </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a3c51edcc0fe3de029dc39a3f0306155d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3c51edcc0fe3de029dc39a3f0306155d">&#9670;&nbsp;</a></span>tree_display() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar tree_display </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>dot_format</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5168f7f604b0ad1c9e581f0e3f52698e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5168f7f604b0ad1c9e581f0e3f52698e">&#9670;&nbsp;</a></span>tree_display() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar tree_display </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>model_table</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="adc9d02213b4d906976805a9681ea13fb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adc9d02213b4d906976805a9681ea13fb">&#9670;&nbsp;</a></span>tree_display() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar tree_display </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae371963e135c40d8be5b2e342ab3c252"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae371963e135c40d8be5b2e342ab3c252">&#9670;&nbsp;</a></span>tree_predict() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tree_predict </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>model</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pred_type</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">model</td><td>Name of the table containing the decision tree model </td></tr>
+    <tr><td class="paramname">source</td><td>Name of table containing prediction data </td></tr>
+    <tr><td class="paramname">output</td><td>Name of table to output prediction results </td></tr>
+    <tr><td class="paramname">pred_type</td><td>OPTIONAL (Default = 'response'). For regression trees, 'response', implies output is the predicted value. For classification trees, this can be 'response', giving the classification prediction as output, or ‘prob’, giving the class probabilities as output (for two classes, only a single probability value is output that corresponds to the first class when the two classes are sorted by name; in case of more than two classes, an array of class probabilities (a probability of each class) is output).</td></tr>
+  </table>
+  </dd>
+</dl>
+<p>See <a class="el" href="group__grp__decision__tree.html">Decision Tree</a> for more details. </p>
+
+</div>
+</div>
+<a id="ad8afbe21c3b73daff7322c3fe906a804"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad8afbe21c3b73daff7322c3fe906a804">&#9670;&nbsp;</a></span>tree_predict() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tree_predict </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>model</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="abb6f3ecdd2fdcb7661ee10a65419066e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abb6f3ecdd2fdcb7661ee10a65419066e">&#9670;&nbsp;</a></span>tree_predict() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text tree_predict </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a744d4c5564a3ba18c9774fa040f32d18"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a744d4c5564a3ba18c9774fa040f32d18">&#9670;&nbsp;</a></span>tree_predict() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text tree_predict </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a6ba706727adf88f8c07cfe09f71732bb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6ba706727adf88f8c07cfe09f71732bb">&#9670;&nbsp;</a></span>tree_surr_display() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar tree_surr_display </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>model_table</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">tree_model</td><td>Name of the table containing the decision tree model </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a97c730e746e1a8ea658efe433c9d1be5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a97c730e746e1a8ea658efe433c9d1be5">&#9670;&nbsp;</a></span>tree_surr_display() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar tree_surr_display </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a66dd4c15469c65676190208ee6853b83"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a66dd4c15469c65676190208ee6853b83">&#9670;&nbsp;</a></span>tree_train() <span class="overload">[1/14]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tree_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>training_table_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>id_col_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dependent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>list_of_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>list_of_features_to_exclude</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>split_criterion</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>weights</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_depth</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>min_split</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>min_bucket</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>n_bins</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pruning_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>null_handling_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>verbose_mode</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">split_criterion</td><td>Various options to compute the feature to split a node. Available options are 'gini', 'cross-entropy', and 'misclassification'. The "cart" algorithm provides an additional option of 'mse'. </td></tr>
+    <tr><td class="paramname">training_table_name</td><td>Name of the table containing data. </td></tr>
+    <tr><td class="paramname">output_table_name</td><td>Name of the table to output the model. </td></tr>
+    <tr><td class="paramname">id_col_name</td><td>Name of column containing the id information in training data. </td></tr>
+    <tr><td class="paramname">dependent_variable</td><td>Name of the column that contains the output for training. Boolean, integer and text are considered classification outputs, while float values are considered regression outputs. </td></tr>
+    <tr><td class="paramname">list_of_features</td><td>List of column names (comma-separated string) to use as predictors. Can also be a ‘*’ implying all columns are to be used as predictors (except the ones included in the next argument). Boolean, integer, and text columns are considered categorical columns. </td></tr>
+    <tr><td class="paramname">list_of_features_to_exclude</td><td>OPTIONAL. List of column names (comma-separated string) to exlude from the predictors list. </td></tr>
+    <tr><td class="paramname">grouping_cols</td><td>OPTIONAL. List of column names (comma-separated string) to group the data by. This will lead to creating multiple decision trees, one for each group. </td></tr>
+    <tr><td class="paramname">weights</td><td>OPTIONAL. Column name containing weights for each observation. </td></tr>
+    <tr><td class="paramname">max_depth</td><td>OPTIONAL (Default = 7). Set the maximum depth of any node of the final tree, with the root node counted as depth 0. A deeper tree can lead to better prediction but will also result in longer processing time and higher memory usage. </td></tr>
+    <tr><td class="paramname">min_split</td><td>OPTIONAL (Default = 20). Minimum number of observations that must exist in a node for a split to be attempted. </td></tr>
+    <tr><td class="paramname">min_bucket</td><td>OPTIONAL (Default = minsplit/3). Minimum number of observations in any terminal node. If only one of minbucket or minsplit is specified, minsplit is set to minbucket*3 or minbucket to minsplit/3, as appropriate. </td></tr>
+    <tr><td class="paramname">n_bins</td><td>optional (default = 20) number of bins to use during binning. continuous-valued features are binned into discrete bins (per the quartile values) to compute split bound- aries. this global parameter is used to compute the resolution of the bins. higher number of bins will lead to higher processing time. </td></tr>
+    <tr><td class="paramname">pruning_params</td><td>(default: cp=0) pruning parameter string containing key-value pairs. the keys can be: cp (default = 0.01) a complexity parameter that determines that a split is attempted only if it decreases the overall lack of fit by a factor of ‘cp’. n_folds (default = 0) number of cross-validation folds </td></tr>
+    <tr><td class="paramname">verbose_mode</td><td>optional (default = false) prints status information on the splits performed and any other information useful for debugging.</td></tr>
+  </table>
+  </dd>
+</dl>
+<p>see <a class="el" href="group__grp__decision__tree.html">Decision Tree</a> for more details. </p>
+
+</div>
+</div>
+<a id="a73a43da31b61ee81d5208860af2d3ab1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a73a43da31b61ee81d5208860af2d3ab1">&#9670;&nbsp;</a></span>tree_train() <span class="overload">[2/14]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text tree_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a530812f8c3662705e24f8bf24d4eb3a5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a530812f8c3662705e24f8bf24d4eb3a5">&#9670;&nbsp;</a></span>tree_train() <span class="overload">[3/14]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text tree_train </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7071599a77d6080b2159e3ca167cff6c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7071599a77d6080b2159e3ca167cff6c">&#9670;&nbsp;</a></span>tree_train() <span class="overload">[4/14]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tree_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>training_table_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>id_col_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dependent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>list_of_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>list_of_features_to_exclude</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>split_criterion</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>weights</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_depth</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>min_split</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>min_bucket</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>n_bins</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pruning_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>null_handling_params</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab561b3e2a8a66b6ec763d44ea042aeca"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab561b3e2a8a66b6ec763d44ea042aeca">&#9670;&nbsp;</a></span>tree_train() <span class="overload">[5/14]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tree_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>training_table_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>id_col_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dependent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>list_of_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>list_of_features_to_exclude</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>split_criterion</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>weights</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_depth</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>min_split</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>min_bucket</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>n_bins</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pruning_params</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="add62455af9b9f9a075df8221269a4872"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#add62455af9b9f9a075df8221269a4872">&#9670;&nbsp;</a></span>tree_train() <span class="overload">[6/14]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tree_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>training_table_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>id_col_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dependent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>list_of_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>list_of_features_to_exclude</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>split_criterion</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>weights</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_depth</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>min_split</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>min_bucket</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>n_bins</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a635b82bc9c1fcd63e5a46546d3e2ba70"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a635b82bc9c1fcd63e5a46546d3e2ba70">&#9670;&nbsp;</a></span>tree_train() <span class="overload">[7/14]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tree_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>training_table_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>id_col_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dependent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>list_of_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>list_of_features_to_exclude</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>split_criterion</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>weights</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_depth</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>min_split</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>min_bucket</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a93591ca5193e5ac9f8c3ac52e1dfb1ba"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a93591ca5193e5ac9f8c3ac52e1dfb1ba">&#9670;&nbsp;</a></span>tree_train() <span class="overload">[8/14]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tree_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>training_table_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>id_col_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dependent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>list_of_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>list_of_features_to_exclude</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>split_criterion</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>weights</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_depth</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>min_split</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a558361a337c93731b856523e20f20e72"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a558361a337c93731b856523e20f20e72">&#9670;&nbsp;</a></span>tree_train() <span class="overload">[9/14]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tree_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>training_table_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>id_col_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dependent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>list_of_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>list_of_features_to_exclude</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>split_criterion</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>weights</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_depth</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a10b882e4d6417023ae6b92f79e88ac29"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a10b882e4d6417023ae6b92f79e88ac29">&#9670;&nbsp;</a></span>tree_train() <span class="overload">[10/14]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tree_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>training_table_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>id_col_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dependent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>list_of_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>list_of_features_to_exclude</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>split_criterion</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>weights</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac49c038b5668aeb901d22a5a81c8f338"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac49c038b5668aeb901d22a5a81c8f338">&#9670;&nbsp;</a></span>tree_train() <span class="overload">[11/14]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tree_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>training_table_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>id_col_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dependent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>list_of_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>list_of_features_to_exclude</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>split_criterion</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a9cfac8d89b1a13d22a20eb79d4d7e7ce"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9cfac8d89b1a13d22a20eb79d4d7e7ce">&#9670;&nbsp;</a></span>tree_train() <span class="overload">[12/14]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tree_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>training_table_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>id_col_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dependent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>list_of_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>list_of_features_to_exclude</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>split_criterion</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="af70d0b6bba29f94ebd49acc48b4f9bb1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af70d0b6bba29f94ebd49acc48b4f9bb1">&#9670;&nbsp;</a></span>tree_train() <span class="overload">[13/14]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tree_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>training_table_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>id_col_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dependent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>list_of_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>list_of_features_to_exclude</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a639431da2553fb86673e82d62cde4458"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a639431da2553fb86673e82d62cde4458">&#9670;&nbsp;</a></span>tree_train() <span class="overload">[14/14]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tree_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>training_table_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>id_col_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dependent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>list_of_features</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_5341dbb6d7f0a427749c6136276fa506.html">recursive_partitioning</a></li><li class="navelem"><a class="el" href="decision__tree_8sql__in.html">decision_tree.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:56 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/dense__linear__systems_8sql__in.html b/docs/rc/dense__linear__systems_8sql__in.html
new file mode 100644
index 0000000..9ab559c
--- /dev/null
+++ b/docs/rc/dense__linear__systems_8sql__in.html
@@ -0,0 +1,640 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: dense_linear_systems.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dense__linear__systems_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">dense_linear_systems.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>SQL functions for linear systems.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ad34728809ab3121705342cf91b34c6dd"><td class="memItemLeft" align="right" valign="top">bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dense__linear__systems_8sql__in.html#ad34728809ab3121705342cf91b34c6dd">dense_residual_norm_transition</a> (bytea8 state, float8[] a, float8 b, float8[] x)</td></tr>
+<tr class="separator:ad34728809ab3121705342cf91b34c6dd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a73ebde08b8395fd7bddbe1dc37b9539f"><td class="memItemLeft" align="right" valign="top">bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dense__linear__systems_8sql__in.html#a73ebde08b8395fd7bddbe1dc37b9539f">dense_residual_norm_merge_states</a> (bytea8 state1, bytea8 state2)</td></tr>
+<tr class="separator:a73ebde08b8395fd7bddbe1dc37b9539f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a01935dd8c4aef8c92e77b7f0f905fa4b"><td class="memItemLeft" align="right" valign="top">residual_norm_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dense__linear__systems_8sql__in.html#a01935dd8c4aef8c92e77b7f0f905fa4b">dense_residual_norm_final</a> (bytea8 state)</td></tr>
+<tr class="separator:a01935dd8c4aef8c92e77b7f0f905fa4b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a52f2bcdd0d038f19e64a44d4bb07fefb"><td class="memItemLeft" align="right" valign="top">aggregate residual_norm_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dense__linear__systems_8sql__in.html#a52f2bcdd0d038f19e64a44d4bb07fefb">dense_residual_norm</a> (float8[] left_hand_side, float8 right_hand_side, float8[] solution)</td></tr>
+<tr class="memdesc:a52f2bcdd0d038f19e64a44d4bb07fefb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute the residual after solving the dense linear systems.  <a href="#a52f2bcdd0d038f19e64a44d4bb07fefb">More...</a><br /></td></tr>
+<tr class="separator:a52f2bcdd0d038f19e64a44d4bb07fefb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acbfc47693d0b50ccfc6b7f7c38209b18"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dense__linear__systems_8sql__in.html#acbfc47693d0b50ccfc6b7f7c38209b18">dense_direct_linear_system_transition</a> (float8[] state, integer row_id, float8[] a, float8 b, integer num_rows, integer algorithm)</td></tr>
+<tr class="separator:acbfc47693d0b50ccfc6b7f7c38209b18"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a607403f90e1921435183d031825e5e54"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dense__linear__systems_8sql__in.html#a607403f90e1921435183d031825e5e54">dense_direct_linear_system_merge_states</a> (float8[] state1, float8[] state2)</td></tr>
+<tr class="separator:a607403f90e1921435183d031825e5e54"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a63a3ed2c811216d3d88c120005a13875"><td class="memItemLeft" align="right" valign="top">dense_linear_solver_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dense__linear__systems_8sql__in.html#a63a3ed2c811216d3d88c120005a13875">dense_direct_linear_system_final</a> (float8[] state)</td></tr>
+<tr class="separator:a63a3ed2c811216d3d88c120005a13875"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a379f260d8dfbf5c2be05c60776974188"><td class="memItemLeft" align="right" valign="top">aggregate dense_linear_solver_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dense__linear__systems_8sql__in.html#a379f260d8dfbf5c2be05c60776974188">dense_direct_linear_system</a> (integer row_id, float8[] left_hand_side, float8 right_hand_side, integer numEquations, integer algorithm)</td></tr>
+<tr class="memdesc:a379f260d8dfbf5c2be05c60776974188"><td class="mdescLeft">&#160;</td><td class="mdescRight">Solve a system of linear equations using the direct method.  <a href="#a379f260d8dfbf5c2be05c60776974188">More...</a><br /></td></tr>
+<tr class="separator:a379f260d8dfbf5c2be05c60776974188"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a885d6a36c07dc2c048948cb5287a3b92"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dense__linear__systems_8sql__in.html#a885d6a36c07dc2c048948cb5287a3b92">linear_solver_dense</a> (varchar input_string)</td></tr>
+<tr class="memdesc:a885d6a36c07dc2c048948cb5287a3b92"><td class="mdescLeft">&#160;</td><td class="mdescRight">Help function, to print out the supported families.  <a href="#a885d6a36c07dc2c048948cb5287a3b92">More...</a><br /></td></tr>
+<tr class="separator:a885d6a36c07dc2c048948cb5287a3b92"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2272a21f30096a79cd543fe66a0aee19"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dense__linear__systems_8sql__in.html#a2272a21f30096a79cd543fe66a0aee19">linear_solver_dense</a> ()</td></tr>
+<tr class="separator:a2272a21f30096a79cd543fe66a0aee19"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab7de234e67060a4fc48978e430642baa"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dense__linear__systems_8sql__in.html#ab7de234e67060a4fc48978e430642baa">linear_solver_dense</a> (varchar source_table, varchar out_table, varchar row_id, varchar left_hand_side, varchar right_hand_side, varchar grouping_cols, varchar optimizer, varchar optimizer_options)</td></tr>
+<tr class="memdesc:ab7de234e67060a4fc48978e430642baa"><td class="mdescLeft">&#160;</td><td class="mdescRight">A wrapper function for the various marginal linear_systemsion analyzes.  <a href="#ab7de234e67060a4fc48978e430642baa">More...</a><br /></td></tr>
+<tr class="separator:ab7de234e67060a4fc48978e430642baa"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a003b5a21cffde500fa808f1c6e9c14ae"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dense__linear__systems_8sql__in.html#a003b5a21cffde500fa808f1c6e9c14ae">linear_solver_dense</a> (varchar source_table, varchar out_table, varchar row_id, varchar left_hand_side, varchar right_hand_side)</td></tr>
+<tr class="memdesc:a003b5a21cffde500fa808f1c6e9c14ae"><td class="mdescLeft">&#160;</td><td class="mdescRight">Marginal effects with default variables.  <a href="#a003b5a21cffde500fa808f1c6e9c14ae">More...</a><br /></td></tr>
+<tr class="separator:a003b5a21cffde500fa808f1c6e9c14ae"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><dl class="section date"><dt>Date</dt><dd>July 2013</dd></dl>
+<dl class="section see"><dt>See also</dt><dd>Computes the solution of a consistent linear system, for more details see the module description at <a class="el" href="group__grp__dense__linear__solver.html">Dense Linear Systems</a> </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="a379f260d8dfbf5c2be05c60776974188"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a379f260d8dfbf5c2be05c60776974188">&#9670;&nbsp;</a></span>dense_direct_linear_system()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate dense_linear_solver_result dense_direct_linear_system </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>left_hand_side</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>right_hand_side</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>numEquations</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>algorithm</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">row_id</td><td>Column containing the row_id </td></tr>
+    <tr><td class="paramname">left_hand_side</td><td>Column containing the left hand side of the system </td></tr>
+    <tr><td class="paramname">right_hand_side</td><td>Column containing the right hand side of the system </td></tr>
+    <tr><td class="paramname">numEquations</td><td>Number of equations </td></tr>
+    <tr><td class="paramname">algorithm</td><td>Algorithm used for the dense linear solver</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>A composite value:<ul>
+<li><code>solution FLOAT8[] </code> - Array of marginal effects</li>
+<li><code>residual_norm FLOAT8</code> - Norm of the residual</li>
+<li><code>iters INTEGER</code> - Iterations taken</li>
+</ul>
+</dd></dl>
+<dl class="section user"><dt>Usage</dt><dd><ul>
+<li>Get all the diagnostic statistics:<br />
+ <pre> SELECT linear_system_dense(<em>row_id</em>,
+                                  <em>left_hand_side</em>,
+                                  <em> right_hand_side </em>,
+                                  <em> numEquations </em>)
+ FROM <em>dataTable</em>;
+</pre> </li>
+</ul>
+</dd></dl>
+
+</div>
+</div>
+<a id="a63a3ed2c811216d3d88c120005a13875"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a63a3ed2c811216d3d88c120005a13875">&#9670;&nbsp;</a></span>dense_direct_linear_system_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">dense_linear_solver_result dense_direct_linear_system_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a607403f90e1921435183d031825e5e54"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a607403f90e1921435183d031825e5e54">&#9670;&nbsp;</a></span>dense_direct_linear_system_merge_states()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] dense_direct_linear_system_merge_states </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="acbfc47693d0b50ccfc6b7f7c38209b18"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acbfc47693d0b50ccfc6b7f7c38209b18">&#9670;&nbsp;</a></span>dense_direct_linear_system_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] dense_direct_linear_system_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>a</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>b</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_rows</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>algorithm</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a52f2bcdd0d038f19e64a44d4bb07fefb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a52f2bcdd0d038f19e64a44d4bb07fefb">&#9670;&nbsp;</a></span>dense_residual_norm()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate residual_norm_result dense_residual_norm </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>left_hand_side</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>right_hand_side</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>solution</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">left_hand_side</td><td>Column containing the left hand side of the system </td></tr>
+    <tr><td class="paramname">right_hand_side</td><td>Column containing the right hand side of the system </td></tr>
+    <tr><td class="paramname">solution</td><td>Solution of the linear system</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>residual_norm FLOAT8:</dd></dl>
+<dl class="section user"><dt>Usage</dt><dd><ul>
+<li>Get all the diagnostic statistics:<br />
+ <pre> SELECT dense_residual_norm(<em>row_id</em>,
+                                  <em>left_hand_side</em>,
+                                  <em> right_hand_side </em>,
+                                  <em> solution </em>)
+ FROM <em>dataTable</em>;
+</pre> </li>
+</ul>
+</dd></dl>
+
+</div>
+</div>
+<a id="a01935dd8c4aef8c92e77b7f0f905fa4b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a01935dd8c4aef8c92e77b7f0f905fa4b">&#9670;&nbsp;</a></span>dense_residual_norm_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">residual_norm_result dense_residual_norm_final </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a73ebde08b8395fd7bddbe1dc37b9539f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a73ebde08b8395fd7bddbe1dc37b9539f">&#9670;&nbsp;</a></span>dense_residual_norm_merge_states()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea8 dense_residual_norm_merge_states </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ad34728809ab3121705342cf91b34c6dd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad34728809ab3121705342cf91b34c6dd">&#9670;&nbsp;</a></span>dense_residual_norm_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea8 dense_residual_norm_transition </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>a</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>b</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a885d6a36c07dc2c048948cb5287a3b92"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a885d6a36c07dc2c048948cb5287a3b92">&#9670;&nbsp;</a></span>linear_solver_dense() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar linear_solver_dense </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>input_string</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a2272a21f30096a79cd543fe66a0aee19"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2272a21f30096a79cd543fe66a0aee19">&#9670;&nbsp;</a></span>linear_solver_dense() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar linear_solver_dense </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab7de234e67060a4fc48978e430642baa"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab7de234e67060a4fc48978e430642baa">&#9670;&nbsp;</a></span>linear_solver_dense() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void linear_solver_dense </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>left_hand_side</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>right_hand_side</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>optimizer</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>optimizer_options</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">source_table</td><td>String identifying the input table </td></tr>
+    <tr><td class="paramname">out_table</td><td>String identifying the output table to be created </td></tr>
+    <tr><td class="paramname">row_id</td><td>Column containing the row_id </td></tr>
+    <tr><td class="paramname">left_hand_side</td><td>Column containing the left hand side of the system </td></tr>
+    <tr><td class="paramname">right_hand_side</td><td>Column containing the right hand side of the system </td></tr>
+    <tr><td class="paramname">grouping_cols</td><td>Columns to group by </td></tr>
+    <tr><td class="paramname">optimizer</td><td>Optimizer to be used </td></tr>
+    <tr><td class="paramname">optimizer_options</td><td>Optimal parameters for the algorithms</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>void</dd></dl>
+<dl class="section user"><dt>Usage</dt><dd>For function summary information. Run sql&gt; select linear_solver_dense('help'); OR sql&gt; select <a class="el" href="dense__linear__systems_8sql__in.html#a885d6a36c07dc2c048948cb5287a3b92" title="Help function, to print out the supported families. ">linear_solver_dense()</a>; OR sql&gt; select linear_solver_dense('?'); For function usage information. Run sql&gt; select linear_solver_dense('usage'); </dd></dl>
+
+</div>
+</div>
+<a id="a003b5a21cffde500fa808f1c6e9c14ae"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a003b5a21cffde500fa808f1c6e9c14ae">&#9670;&nbsp;</a></span>linear_solver_dense() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void linear_solver_dense </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>left_hand_side</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>right_hand_side</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_7513a8b3b7336e99c30a333cfb144104.html">linear_systems</a></li><li class="navelem"><a class="el" href="dense__linear__systems_8sql__in.html">dense_linear_systems.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:56 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/dir_097d0c47873b413f914e0be0fb8e0c70.html b/docs/rc/dir_097d0c47873b413f914e0be0fb8e0c70.html
new file mode 100644
index 0000000..650df0e
--- /dev/null
+++ b/docs/rc/dir_097d0c47873b413f914e0be0fb8e0c70.html
@@ -0,0 +1,135 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: svec_util Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_097d0c47873b413f914e0be0fb8e0c70.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">svec_util Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:dir_4f54709f5fc5d0f64da91428555e2469"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_4f54709f5fc5d0f64da91428555e2469.html">src</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_704eb8350b43e1ca74c0f90ed1ba450e.html">methods</a></li><li class="navelem"><a class="el" href="dir_097d0c47873b413f914e0be0fb8e0c70.html">svec_util</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/dir_16b90e9a6c080d7fc2617cfecd7f223b.html b/docs/rc/dir_16b90e9a6c080d7fc2617cfecd7f223b.html
new file mode 100644
index 0000000..69b3572
--- /dev/null
+++ b/docs/rc/dir_16b90e9a6c080d7fc2617cfecd7f223b.html
@@ -0,0 +1,136 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: pg_gp Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_16b90e9a6c080d7fc2617cfecd7f223b.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">pg_gp Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:svec_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html">svec.sql_in</a></td></tr>
+<tr class="memdesc:svec_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">SQL type definitions and functions for sparse vector data type <code>svec</code> <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_704eb8350b43e1ca74c0f90ed1ba450e.html">methods</a></li><li class="navelem"><a class="el" href="dir_87d2e9694998410c1b0408bb775833a4.html">svec</a></li><li class="navelem"><a class="el" href="dir_1960c8c5a7f1e7616d29e5a0c180bcf2.html">src</a></li><li class="navelem"><a class="el" href="dir_16b90e9a6c080d7fc2617cfecd7f223b.html">pg_gp</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/dir_1960c8c5a7f1e7616d29e5a0c180bcf2.html b/docs/rc/dir_1960c8c5a7f1e7616d29e5a0c180bcf2.html
new file mode 100644
index 0000000..700f0ae
--- /dev/null
+++ b/docs/rc/dir_1960c8c5a7f1e7616d29e5a0c180bcf2.html
@@ -0,0 +1,135 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: src Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_1960c8c5a7f1e7616d29e5a0c180bcf2.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">src Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:dir_16b90e9a6c080d7fc2617cfecd7f223b"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_16b90e9a6c080d7fc2617cfecd7f223b.html">pg_gp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_704eb8350b43e1ca74c0f90ed1ba450e.html">methods</a></li><li class="navelem"><a class="el" href="dir_87d2e9694998410c1b0408bb775833a4.html">svec</a></li><li class="navelem"><a class="el" href="dir_1960c8c5a7f1e7616d29e5a0c180bcf2.html">src</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/dir_1c3de670490e30b2adf792227ef51e32.html b/docs/rc/dir_1c3de670490e30b2adf792227ef51e32.html
new file mode 100644
index 0000000..b84a11e
--- /dev/null
+++ b/docs/rc/dir_1c3de670490e30b2adf792227ef51e32.html
@@ -0,0 +1,150 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: graph Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_1c3de670490e30b2adf792227ef51e32.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">graph Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:apsp_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="apsp_8sql__in.html">apsp.sql_in</a></td></tr>
+<tr class="memdesc:apsp_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">SQL functions for graph analytics. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:bfs_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bfs_8sql__in.html">bfs.sql_in</a></td></tr>
+<tr class="memdesc:bfs_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">SQL functions for graph analytics. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:hits_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hits_8sql__in.html">hits.sql_in</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:measures_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="measures_8sql__in.html">measures.sql_in</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:pagerank_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pagerank_8sql__in.html">pagerank.sql_in</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:sssp_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sssp_8sql__in.html">sssp.sql_in</a></td></tr>
+<tr class="memdesc:sssp_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">SQL functions for graph analytics. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:wcc_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="wcc_8sql__in.html">wcc.sql_in</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_1c3de670490e30b2adf792227ef51e32.html">graph</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/dir_2e2767a73e2d710192c730fd426a8c90.html b/docs/rc/dir_2e2767a73e2d710192c730fd426a8c90.html
new file mode 100644
index 0000000..22481ad
--- /dev/null
+++ b/docs/rc/dir_2e2767a73e2d710192c730fd426a8c90.html
@@ -0,0 +1,136 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: pg_gp Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_2e2767a73e2d710192c730fd426a8c90.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">pg_gp Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:svec__util_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec__util_8sql__in.html">svec_util.sql_in</a></td></tr>
+<tr class="memdesc:svec__util_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">SQL utility functions for sparse vector data type <code>svec</code> <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_704eb8350b43e1ca74c0f90ed1ba450e.html">methods</a></li><li class="navelem"><a class="el" href="dir_097d0c47873b413f914e0be0fb8e0c70.html">svec_util</a></li><li class="navelem"><a class="el" href="dir_4f54709f5fc5d0f64da91428555e2469.html">src</a></li><li class="navelem"><a class="el" href="dir_2e2767a73e2d710192c730fd426a8c90.html">pg_gp</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/dir_3749b33f41e0a82f4dfb20be7f91dfa3.html b/docs/rc/dir_3749b33f41e0a82f4dfb20be7f91dfa3.html
new file mode 100644
index 0000000..e0f57b8
--- /dev/null
+++ b/docs/rc/dir_3749b33f41e0a82f4dfb20be7f91dfa3.html
@@ -0,0 +1,136 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: pg_gp Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_3749b33f41e0a82f4dfb20be7f91dfa3.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">pg_gp Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:porter__stemmer_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="porter__stemmer_8sql__in.html">porter_stemmer.sql_in</a></td></tr>
+<tr class="memdesc:porter__stemmer_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">implementation of porter stemmer operations in SQL <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_704eb8350b43e1ca74c0f90ed1ba450e.html">methods</a></li><li class="navelem"><a class="el" href="dir_b10c028a6a58d6e0840bc150baba59b9.html">stemmer</a></li><li class="navelem"><a class="el" href="dir_e2e6d80cc57daae810c80cbdae687e33.html">src</a></li><li class="navelem"><a class="el" href="dir_3749b33f41e0a82f4dfb20be7f91dfa3.html">pg_gp</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/dir_3ee26ceeadb429f807bd6cd822eca1b9.html b/docs/rc/dir_3ee26ceeadb429f807bd6cd822eca1b9.html
new file mode 100644
index 0000000..bf3c00f
--- /dev/null
+++ b/docs/rc/dir_3ee26ceeadb429f807bd6cd822eca1b9.html
@@ -0,0 +1,136 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: bayes Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_3ee26ceeadb429f807bd6cd822eca1b9.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">bayes Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:bayes_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bayes_8sql__in.html">bayes.sql_in</a></td></tr>
+<tr class="memdesc:bayes_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">SQL functions for naive Bayes. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_3ee26ceeadb429f807bd6cd822eca1b9.html">bayes</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/dir_42e4eb27424bda9fbbfa95509de09bad.html b/docs/rc/dir_42e4eb27424bda9fbbfa95509de09bad.html
new file mode 100644
index 0000000..e025730
--- /dev/null
+++ b/docs/rc/dir_42e4eb27424bda9fbbfa95509de09bad.html
@@ -0,0 +1,136 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: conjugate_gradient Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_42e4eb27424bda9fbbfa95509de09bad.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">conjugate_gradient Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:conjugate__gradient_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="conjugate__gradient_8sql__in.html">conjugate_gradient.sql_in</a></td></tr>
+<tr class="memdesc:conjugate__gradient_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">SQL function computing Conjugate Gradient. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_42e4eb27424bda9fbbfa95509de09bad.html">conjugate_gradient</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/dir_4f54709f5fc5d0f64da91428555e2469.html b/docs/rc/dir_4f54709f5fc5d0f64da91428555e2469.html
new file mode 100644
index 0000000..4bc0937
--- /dev/null
+++ b/docs/rc/dir_4f54709f5fc5d0f64da91428555e2469.html
@@ -0,0 +1,135 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: src Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_4f54709f5fc5d0f64da91428555e2469.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">src Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:dir_2e2767a73e2d710192c730fd426a8c90"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_2e2767a73e2d710192c730fd426a8c90.html">pg_gp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_704eb8350b43e1ca74c0f90ed1ba450e.html">methods</a></li><li class="navelem"><a class="el" href="dir_097d0c47873b413f914e0be0fb8e0c70.html">svec_util</a></li><li class="navelem"><a class="el" href="dir_4f54709f5fc5d0f64da91428555e2469.html">src</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/dir_505cd743a8a717435eca324f49291a46.html b/docs/rc/dir_505cd743a8a717435eca324f49291a46.html
new file mode 100644
index 0000000..f59534d
--- /dev/null
+++ b/docs/rc/dir_505cd743a8a717435eca324f49291a46.html
@@ -0,0 +1,154 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: stats Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_505cd743a8a717435eca324f49291a46.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">stats Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:clustered__variance__coxph_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clustered__variance__coxph_8sql__in.html">clustered_variance_coxph.sql_in</a></td></tr>
+<tr class="memdesc:clustered__variance__coxph_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">SQL functions for clustered robust cox proportional hazards regression. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:correlation_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="correlation_8sql__in.html">correlation.sql_in</a></td></tr>
+<tr class="memdesc:correlation_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">SQL functions for correlation computation. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:cox__prop__hazards_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cox__prop__hazards_8sql__in.html">cox_prop_hazards.sql_in</a></td></tr>
+<tr class="memdesc:cox__prop__hazards_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">SQL functions for cox proportional hazards. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:distribution_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="distribution_8sql__in.html">distribution.sql_in</a></td></tr>
+<tr class="memdesc:distribution_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">SQL functions for collecting distributions. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:hypothesis__tests_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hypothesis__tests_8sql__in.html">hypothesis_tests.sql_in</a></td></tr>
+<tr class="memdesc:hypothesis__tests_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">SQL functions for statistical hypothesis tests. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:pred__metrics_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pred__metrics_8sql__in.html">pred_metrics.sql_in</a></td></tr>
+<tr class="memdesc:pred__metrics_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">A collection of summary statistics to gauge model accuracy based on predicted values vs. ground-truth values. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:robust__variance__coxph_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="robust__variance__coxph_8sql__in.html">robust_variance_coxph.sql_in</a></td></tr>
+<tr class="memdesc:robust__variance__coxph_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">SQL functions for robust cox proportional hazards regression. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_505cd743a8a717435eca324f49291a46.html">stats</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/dir_5341dbb6d7f0a427749c6136276fa506.html b/docs/rc/dir_5341dbb6d7f0a427749c6136276fa506.html
new file mode 100644
index 0000000..afabcf5
--- /dev/null
+++ b/docs/rc/dir_5341dbb6d7f0a427749c6136276fa506.html
@@ -0,0 +1,137 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: recursive_partitioning Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_5341dbb6d7f0a427749c6136276fa506.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">recursive_partitioning Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:decision__tree_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decision__tree_8sql__in.html">decision_tree.sql_in</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:random__forest_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="random__forest_8sql__in.html">random_forest.sql_in</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_5341dbb6d7f0a427749c6136276fa506.html">recursive_partitioning</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/dir_5cd13365c66443c54a8f3b4c82c03aee.html b/docs/rc/dir_5cd13365c66443c54a8f3b4c82c03aee.html
new file mode 100644
index 0000000..a757ed7
--- /dev/null
+++ b/docs/rc/dir_5cd13365c66443c54a8f3b4c82c03aee.html
@@ -0,0 +1,136 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: svm Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_5cd13365c66443c54a8f3b4c82c03aee.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">svm Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:svm_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svm_8sql__in.html">svm.sql_in</a></td></tr>
+<tr class="memdesc:svm_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">SQL functions for SVM (Poisson) <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_5cd13365c66443c54a8f3b4c82c03aee.html">svm</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/dir_5ff04c1d4b766f0a4dd68c6f19ed2092.html b/docs/rc/dir_5ff04c1d4b766f0a4dd68c6f19ed2092.html
new file mode 100644
index 0000000..d504a46
--- /dev/null
+++ b/docs/rc/dir_5ff04c1d4b766f0a4dd68c6f19ed2092.html
@@ -0,0 +1,136 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: summary Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_5ff04c1d4b766f0a4dd68c6f19ed2092.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">summary Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:summary_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="summary_8sql__in.html">summary.sql_in</a></td></tr>
+<tr class="memdesc:summary_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">Summary function for descriptive statistics. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_5ff04c1d4b766f0a4dd68c6f19ed2092.html">summary</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/dir_60056874394c01e6c892c7492b3fbe27.html b/docs/rc/dir_60056874394c01e6c892c7492b3fbe27.html
new file mode 100644
index 0000000..934b8d4
--- /dev/null
+++ b/docs/rc/dir_60056874394c01e6c892c7492b3fbe27.html
@@ -0,0 +1,135 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: src Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_60056874394c01e6c892c7492b3fbe27.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">src Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:dir_c2d3987992538edb8f634d5f4e0fae80"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_c2d3987992538edb8f634d5f4e0fae80.html">pg_gp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_704eb8350b43e1ca74c0f90ed1ba450e.html">methods</a></li><li class="navelem"><a class="el" href="dir_b0d8a62e5a4314de84ce58e7cd249850.html">sketch</a></li><li class="navelem"><a class="el" href="dir_60056874394c01e6c892c7492b3fbe27.html">src</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/docs/rc/dir_68267d1309a1af8e8297ef4c3efbcdba.html
new file mode 100644
index 0000000..e5e1ea0
--- /dev/null
+++ b/docs/rc/dir_68267d1309a1af8e8297ef4c3efbcdba.html
@@ -0,0 +1,135 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: src Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_68267d1309a1af8e8297ef4c3efbcdba.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">src Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:dir_efbcf68973d247bbf15f9eecae7f24e3"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/dir_6ff79b0655deb26abf8f86290b84a97c.html b/docs/rc/dir_6ff79b0655deb26abf8f86290b84a97c.html
new file mode 100644
index 0000000..0061631
--- /dev/null
+++ b/docs/rc/dir_6ff79b0655deb26abf8f86290b84a97c.html
@@ -0,0 +1,136 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: lda Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_6ff79b0655deb26abf8f86290b84a97c.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">lda Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:lda_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lda_8sql__in.html">lda.sql_in</a></td></tr>
+<tr class="memdesc:lda_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">SQL functions for Latent Dirichlet Allocation. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_6ff79b0655deb26abf8f86290b84a97c.html">lda</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/dir_704eb8350b43e1ca74c0f90ed1ba450e.html b/docs/rc/dir_704eb8350b43e1ca74c0f90ed1ba450e.html
new file mode 100644
index 0000000..ae26ca5
--- /dev/null
+++ b/docs/rc/dir_704eb8350b43e1ca74c0f90ed1ba450e.html
@@ -0,0 +1,143 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: methods Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_704eb8350b43e1ca74c0f90ed1ba450e.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">methods Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:dir_834e55cf992733df24fbe86b49356157"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_834e55cf992733df24fbe86b49356157.html">array_ops</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:dir_b0d8a62e5a4314de84ce58e7cd249850"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_b0d8a62e5a4314de84ce58e7cd249850.html">sketch</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:dir_b10c028a6a58d6e0840bc150baba59b9"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_b10c028a6a58d6e0840bc150baba59b9.html">stemmer</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:dir_87d2e9694998410c1b0408bb775833a4"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_87d2e9694998410c1b0408bb775833a4.html">svec</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:dir_097d0c47873b413f914e0be0fb8e0c70"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_097d0c47873b413f914e0be0fb8e0c70.html">svec_util</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_704eb8350b43e1ca74c0f90ed1ba450e.html">methods</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/dir_70e9abe17564e15776adcab8550c7667.html b/docs/rc/dir_70e9abe17564e15776adcab8550c7667.html
new file mode 100644
index 0000000..3c6c0b7
--- /dev/null
+++ b/docs/rc/dir_70e9abe17564e15776adcab8550c7667.html
@@ -0,0 +1,145 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: crf Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_70e9abe17564e15776adcab8550c7667.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">crf Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:crf_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crf_8sql__in.html">crf.sql_in</a></td></tr>
+<tr class="memdesc:crf_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">SQL functions for conditional random field. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:crf__data__loader_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crf__data__loader_8sql__in.html">crf_data_loader.sql_in</a></td></tr>
+<tr class="memdesc:crf__data__loader_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create database tables and import POS/NER training/testing data to the database. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:crf__feature__gen_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crf__feature__gen_8sql__in.html">crf_feature_gen.sql_in</a></td></tr>
+<tr class="memdesc:crf__feature__gen_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">SQL function for POS/NER feature extraction. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:viterbi_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="viterbi_8sql__in.html">viterbi.sql_in</a></td></tr>
+<tr class="memdesc:viterbi_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">concatenate a set of input values into arrays to feed into viterbi c function and create a human readable view of the output <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_70e9abe17564e15776adcab8550c7667.html">crf</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/dir_73ccba3aa44ce35463f879b4ebbd3f46.html b/docs/rc/dir_73ccba3aa44ce35463f879b4ebbd3f46.html
new file mode 100644
index 0000000..92f78c3
--- /dev/null
+++ b/docs/rc/dir_73ccba3aa44ce35463f879b4ebbd3f46.html
@@ -0,0 +1,136 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: kmeans Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_73ccba3aa44ce35463f879b4ebbd3f46.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">kmeans Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:kmeans_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="kmeans_8sql__in.html">kmeans.sql_in</a></td></tr>
+<tr class="memdesc:kmeans_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set of functions for k-means clustering. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_73ccba3aa44ce35463f879b4ebbd3f46.html">kmeans</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/dir_7513a8b3b7336e99c30a333cfb144104.html b/docs/rc/dir_7513a8b3b7336e99c30a333cfb144104.html
new file mode 100644
index 0000000..4ec5e29
--- /dev/null
+++ b/docs/rc/dir_7513a8b3b7336e99c30a333cfb144104.html
@@ -0,0 +1,139 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: linear_systems Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_7513a8b3b7336e99c30a333cfb144104.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">linear_systems Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:dense__linear__systems_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dense__linear__systems_8sql__in.html">dense_linear_systems.sql_in</a></td></tr>
+<tr class="memdesc:dense__linear__systems_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">SQL functions for linear systems. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:sparse__linear__systems_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sparse__linear__systems_8sql__in.html">sparse_linear_systems.sql_in</a></td></tr>
+<tr class="memdesc:sparse__linear__systems_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">SQL functions for linear systems. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_7513a8b3b7336e99c30a333cfb144104.html">linear_systems</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/dir_7592ceb856cf018f9811e11407c61fda.html b/docs/rc/dir_7592ceb856cf018f9811e11407c61fda.html
new file mode 100644
index 0000000..b7448dc
--- /dev/null
+++ b/docs/rc/dir_7592ceb856cf018f9811e11407c61fda.html
@@ -0,0 +1,148 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: deep_learning Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_7592ceb856cf018f9811e11407c61fda.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">deep_learning Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:input__data__preprocessor_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="input__data__preprocessor_8sql__in.html">input_data_preprocessor.sql_in</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:keras__model__arch__table_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="keras__model__arch__table_8sql__in.html">keras_model_arch_table.sql_in</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:madlib__keras_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="madlib__keras_8sql__in.html">madlib_keras.sql_in</a></td></tr>
+<tr class="memdesc:madlib__keras_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">SQL functions for distributed deep learning with keras. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:madlib__keras__fit__multiple__model_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="madlib__keras__fit__multiple__model_8sql__in.html">madlib_keras_fit_multiple_model.sql_in</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:madlib__keras__gpu__info_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="madlib__keras__gpu__info_8sql__in.html">madlib_keras_gpu_info.sql_in</a></td></tr>
+<tr class="memdesc:madlib__keras__gpu__info_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">SQL functions for GPU configuration. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:madlib__keras__model__selection_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="madlib__keras__model__selection_8sql__in.html">madlib_keras_model_selection.sql_in</a></td></tr>
+<tr class="memdesc:madlib__keras__model__selection_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">SQL functions for model hopper distributed training. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_7592ceb856cf018f9811e11407c61fda.html">deep_learning</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/dir_834e55cf992733df24fbe86b49356157.html b/docs/rc/dir_834e55cf992733df24fbe86b49356157.html
new file mode 100644
index 0000000..3c4670e
--- /dev/null
+++ b/docs/rc/dir_834e55cf992733df24fbe86b49356157.html
@@ -0,0 +1,135 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: array_ops Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_834e55cf992733df24fbe86b49356157.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">array_ops Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:dir_c8a9890f716ab6621b63d44c36a168eb"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_c8a9890f716ab6621b63d44c36a168eb.html">src</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_704eb8350b43e1ca74c0f90ed1ba450e.html">methods</a></li><li class="navelem"><a class="el" href="dir_834e55cf992733df24fbe86b49356157.html">array_ops</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/dir_87d2e9694998410c1b0408bb775833a4.html b/docs/rc/dir_87d2e9694998410c1b0408bb775833a4.html
new file mode 100644
index 0000000..d02cacf
--- /dev/null
+++ b/docs/rc/dir_87d2e9694998410c1b0408bb775833a4.html
@@ -0,0 +1,135 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: svec Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_87d2e9694998410c1b0408bb775833a4.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">svec Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:dir_1960c8c5a7f1e7616d29e5a0c180bcf2"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_1960c8c5a7f1e7616d29e5a0c180bcf2.html">src</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_704eb8350b43e1ca74c0f90ed1ba450e.html">methods</a></li><li class="navelem"><a class="el" href="dir_87d2e9694998410c1b0408bb775833a4.html">svec</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/dir_8b8525adb4e4d2ae68fa3d70bbeff8da.html b/docs/rc/dir_8b8525adb4e4d2ae68fa3d70bbeff8da.html
new file mode 100644
index 0000000..7e69b45
--- /dev/null
+++ b/docs/rc/dir_8b8525adb4e4d2ae68fa3d70bbeff8da.html
@@ -0,0 +1,136 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: prob Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_8b8525adb4e4d2ae68fa3d70bbeff8da.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">prob Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:prob_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html">prob.sql_in</a></td></tr>
+<tr class="memdesc:prob_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">SQL functions for evaluating probability functions. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_8b8525adb4e4d2ae68fa3d70bbeff8da.html">prob</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/dir_8cdb0d06bc3d9fdbe366fbcc82abc3e3.html b/docs/rc/dir_8cdb0d06bc3d9fdbe366fbcc82abc3e3.html
new file mode 100644
index 0000000..2c43e45
--- /dev/null
+++ b/docs/rc/dir_8cdb0d06bc3d9fdbe366fbcc82abc3e3.html
@@ -0,0 +1,136 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: tsa Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_8cdb0d06bc3d9fdbe366fbcc82abc3e3.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">tsa Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:arima_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="arima_8sql__in.html">arima.sql_in</a></td></tr>
+<tr class="memdesc:arima_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">Arima function for forecasting of timeseries data. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_8cdb0d06bc3d9fdbe366fbcc82abc3e3.html">tsa</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/dir_8d53e1c0026e7e34b4cd68f8b91426d6.html b/docs/rc/dir_8d53e1c0026e7e34b4cd68f8b91426d6.html
new file mode 100644
index 0000000..957de2a
--- /dev/null
+++ b/docs/rc/dir_8d53e1c0026e7e34b4cd68f8b91426d6.html
@@ -0,0 +1,162 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: utilities Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_8d53e1c0026e7e34b4cd68f8b91426d6.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">utilities Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:cols2vec_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cols2vec_8sql__in.html">cols2vec.sql_in</a></td></tr>
+<tr class="memdesc:cols2vec_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">A set of utilities to ease basic table transformations (such as *aggregating multiple columns in an array) <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:create__indicators_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="create__indicators_8sql__in.html">create_indicators.sql_in</a></td></tr>
+<tr class="memdesc:create__indicators_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">SQL functions for dummy coding categorical variables. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:encode__categorical_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="encode__categorical_8sql__in.html">encode_categorical.sql_in</a></td></tr>
+<tr class="memdesc:encode__categorical_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">SQL functions for encoding categorical variables to numerical values. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:minibatch__preprocessing_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="minibatch__preprocessing_8sql__in.html">minibatch_preprocessing.sql_in</a></td></tr>
+<tr class="memdesc:minibatch__preprocessing_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">TODO. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:path_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="path_8sql__in.html">path.sql_in</a></td></tr>
+<tr class="memdesc:path_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">SQL functions for pathing functions. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:pivot_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pivot_8sql__in.html">pivot.sql_in</a></td></tr>
+<tr class="memdesc:pivot_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">SQL functions for pivoting. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:sessionize_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sessionize_8sql__in.html">sessionize.sql_in</a></td></tr>
+<tr class="memdesc:sessionize_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">SQL functions for sessionization functions. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:text__utilities_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="text__utilities_8sql__in.html">text_utilities.sql_in</a></td></tr>
+<tr class="memdesc:text__utilities_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">SQL functions for carrying out routine text operations. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:utilities_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utilities_8sql__in.html">utilities.sql_in</a></td></tr>
+<tr class="memdesc:utilities_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">SQL functions for carrying out routine tasks. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:vec2cols_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vec2cols_8sql__in.html">vec2cols.sql_in</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_8d53e1c0026e7e34b4cd68f8b91426d6.html">utilities</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/dir_93c42bb4df0f3e1302223b6dfd48c81e.html b/docs/rc/dir_93c42bb4df0f3e1302223b6dfd48c81e.html
new file mode 100644
index 0000000..dea0226
--- /dev/null
+++ b/docs/rc/dir_93c42bb4df0f3e1302223b6dfd48c81e.html
@@ -0,0 +1,141 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: convex Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_93c42bb4df0f3e1302223b6dfd48c81e.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">convex Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:lmf_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lmf_8sql__in.html">lmf.sql_in</a></td></tr>
+<tr class="memdesc:lmf_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">SQL functions for low-rank matrix factorization. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:mlp_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mlp_8sql__in.html">mlp.sql_in</a></td></tr>
+<tr class="memdesc:mlp_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">SQL functions for multilayer perceptron. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:utils__regularization_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils__regularization_8sql__in.html">utils_regularization.sql_in</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_93c42bb4df0f3e1302223b6dfd48c81e.html">convex</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/dir_9db0190ed89ab407304aec250d1ef64f.html b/docs/rc/dir_9db0190ed89ab407304aec250d1ef64f.html
new file mode 100644
index 0000000..a2da9b6
--- /dev/null
+++ b/docs/rc/dir_9db0190ed89ab407304aec250d1ef64f.html
@@ -0,0 +1,139 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: pca Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_9db0190ed89ab407304aec250d1ef64f.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">pca Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:pca_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pca_8sql__in.html">pca.sql_in</a></td></tr>
+<tr class="memdesc:pca_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">Principal Component Analysis. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:pca__project_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pca__project_8sql__in.html">pca_project.sql_in</a></td></tr>
+<tr class="memdesc:pca__project_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">Principal Component Analysis Projection. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_9db0190ed89ab407304aec250d1ef64f.html">pca</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/dir_9e42ee0a0235722f482630aa6cc99334.html b/docs/rc/dir_9e42ee0a0235722f482630aa6cc99334.html
new file mode 100644
index 0000000..999fac4
--- /dev/null
+++ b/docs/rc/dir_9e42ee0a0235722f482630aa6cc99334.html
@@ -0,0 +1,144 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: linalg Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_9e42ee0a0235722f482630aa6cc99334.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">linalg Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:linalg_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linalg_8sql__in.html">linalg.sql_in</a></td></tr>
+<tr class="memdesc:linalg_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">SQL functions for linear algebra. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:matrix__ops_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html">matrix_ops.sql_in</a></td></tr>
+<tr class="memdesc:matrix__ops_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">Implementation of matrix operations in SQL. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:pivotalr__arrayops_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pivotalr__arrayops_8sql__in.html">pivotalr_arrayops.sql_in</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:svd_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svd_8sql__in.html">svd.sql_in</a></td></tr>
+<tr class="memdesc:svd_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">Singular Value Decomposition. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_9e42ee0a0235722f482630aa6cc99334.html">linalg</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/dir_9f5e6edf0db58b0627c46b41dbbbb27f.html b/docs/rc/dir_9f5e6edf0db58b0627c46b41dbbbb27f.html
new file mode 100644
index 0000000..76c6083
--- /dev/null
+++ b/docs/rc/dir_9f5e6edf0db58b0627c46b41dbbbb27f.html
@@ -0,0 +1,136 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: validation Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_9f5e6edf0db58b0627c46b41dbbbb27f.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">validation Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:cross__validation_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cross__validation_8sql__in.html">cross_validation.sql_in</a></td></tr>
+<tr class="memdesc:cross__validation_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">SQL functions for cross validation. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_9f5e6edf0db58b0627c46b41dbbbb27f.html">validation</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/dir_a4a48839224ef8488facbffa8a397967.html b/docs/rc/dir_a4a48839224ef8488facbffa8a397967.html
new file mode 100644
index 0000000..4f58c37
--- /dev/null
+++ b/docs/rc/dir_a4a48839224ef8488facbffa8a397967.html
@@ -0,0 +1,135 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: postgres Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_a4a48839224ef8488facbffa8a397967.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">postgres Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:dir_dc596537ad427a4d866006d1a3e1fe29"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/dir_ac52a4b89b7b1b1591f2952b5cbd041a.html b/docs/rc/dir_ac52a4b89b7b1b1591f2952b5cbd041a.html
new file mode 100644
index 0000000..ae353ca
--- /dev/null
+++ b/docs/rc/dir_ac52a4b89b7b1b1591f2952b5cbd041a.html
@@ -0,0 +1,150 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: regress Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_ac52a4b89b7b1b1591f2952b5cbd041a.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">regress Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:clustered__variance_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clustered__variance_8sql__in.html">clustered_variance.sql_in</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:linear_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linear_8sql__in.html">linear.sql_in</a></td></tr>
+<tr class="memdesc:linear_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">SQL functions for linear regression. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:logistic_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logistic_8sql__in.html">logistic.sql_in</a></td></tr>
+<tr class="memdesc:logistic_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">SQL functions for logistic regression. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:marginal_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html">marginal.sql_in</a></td></tr>
+<tr class="memdesc:marginal_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">SQL functions for linear regression. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:multilogistic_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="multilogistic_8sql__in.html">multilogistic.sql_in</a></td></tr>
+<tr class="memdesc:multilogistic_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">SQL functions for multinomial logistic regression. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:robust_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="robust_8sql__in.html">robust.sql_in</a></td></tr>
+<tr class="memdesc:robust_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">SQL functions for robust variance linear and logistic regression. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_ac52a4b89b7b1b1591f2952b5cbd041a.html">regress</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/dir_b0d8a62e5a4314de84ce58e7cd249850.html b/docs/rc/dir_b0d8a62e5a4314de84ce58e7cd249850.html
new file mode 100644
index 0000000..a85d357
--- /dev/null
+++ b/docs/rc/dir_b0d8a62e5a4314de84ce58e7cd249850.html
@@ -0,0 +1,135 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: sketch Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_b0d8a62e5a4314de84ce58e7cd249850.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">sketch Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:dir_60056874394c01e6c892c7492b3fbe27"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_60056874394c01e6c892c7492b3fbe27.html">src</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_704eb8350b43e1ca74c0f90ed1ba450e.html">methods</a></li><li class="navelem"><a class="el" href="dir_b0d8a62e5a4314de84ce58e7cd249850.html">sketch</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/dir_b10c028a6a58d6e0840bc150baba59b9.html b/docs/rc/dir_b10c028a6a58d6e0840bc150baba59b9.html
new file mode 100644
index 0000000..d7d5564
--- /dev/null
+++ b/docs/rc/dir_b10c028a6a58d6e0840bc150baba59b9.html
@@ -0,0 +1,135 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: stemmer Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_b10c028a6a58d6e0840bc150baba59b9.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">stemmer Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:dir_e2e6d80cc57daae810c80cbdae687e33"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_e2e6d80cc57daae810c80cbdae687e33.html">src</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_704eb8350b43e1ca74c0f90ed1ba450e.html">methods</a></li><li class="navelem"><a class="el" href="dir_b10c028a6a58d6e0840bc150baba59b9.html">stemmer</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/dir_b19a2d10787fafb5edd4ef1da0d2cacf.html b/docs/rc/dir_b19a2d10787fafb5edd4ef1da0d2cacf.html
new file mode 100644
index 0000000..b3d9169
--- /dev/null
+++ b/docs/rc/dir_b19a2d10787fafb5edd4ef1da0d2cacf.html
@@ -0,0 +1,136 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: knn Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_b19a2d10787fafb5edd4ef1da0d2cacf.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">knn Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:knn_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="knn_8sql__in.html">knn.sql_in</a></td></tr>
+<tr class="memdesc:knn_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set of functions for k-nearest neighbors. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_b19a2d10787fafb5edd4ef1da0d2cacf.html">knn</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/dir_c2d3987992538edb8f634d5f4e0fae80.html b/docs/rc/dir_c2d3987992538edb8f634d5f4e0fae80.html
new file mode 100644
index 0000000..70d1cb9
--- /dev/null
+++ b/docs/rc/dir_c2d3987992538edb8f634d5f4e0fae80.html
@@ -0,0 +1,136 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: pg_gp Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_c2d3987992538edb8f634d5f4e0fae80.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">pg_gp Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:sketch_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sketch_8sql__in.html">sketch.sql_in</a></td></tr>
+<tr class="memdesc:sketch_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">SQL functions for sketch-based approximations of descriptive statistics. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_704eb8350b43e1ca74c0f90ed1ba450e.html">methods</a></li><li class="navelem"><a class="el" href="dir_b0d8a62e5a4314de84ce58e7cd249850.html">sketch</a></li><li class="navelem"><a class="el" href="dir_60056874394c01e6c892c7492b3fbe27.html">src</a></li><li class="navelem"><a class="el" href="dir_c2d3987992538edb8f634d5f4e0fae80.html">pg_gp</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/dir_c8a9890f716ab6621b63d44c36a168eb.html b/docs/rc/dir_c8a9890f716ab6621b63d44c36a168eb.html
new file mode 100644
index 0000000..d849438
--- /dev/null
+++ b/docs/rc/dir_c8a9890f716ab6621b63d44c36a168eb.html
@@ -0,0 +1,135 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: src Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_c8a9890f716ab6621b63d44c36a168eb.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">src Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:dir_fe647384fff178c2cff5ce75fb4044e5"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_fe647384fff178c2cff5ce75fb4044e5.html">pg_gp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_704eb8350b43e1ca74c0f90ed1ba450e.html">methods</a></li><li class="navelem"><a class="el" href="dir_834e55cf992733df24fbe86b49356157.html">array_ops</a></li><li class="navelem"><a class="el" href="dir_c8a9890f716ab6621b63d44c36a168eb.html">src</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/dir_d06d449079888c21a85aa00b7664e813.html b/docs/rc/dir_d06d449079888c21a85aa00b7664e813.html
new file mode 100644
index 0000000..83acbf8
--- /dev/null
+++ b/docs/rc/dir_d06d449079888c21a85aa00b7664e813.html
@@ -0,0 +1,135 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: pmml Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_d06d449079888c21a85aa00b7664e813.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">pmml Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:table__to__pmml_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="table__to__pmml_8sql__in.html">table_to_pmml.sql_in</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_d06d449079888c21a85aa00b7664e813.html">pmml</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/dir_d662e943e8adcb86abe4b822d2348c9e.html b/docs/rc/dir_d662e943e8adcb86abe4b822d2348c9e.html
new file mode 100644
index 0000000..e36e501
--- /dev/null
+++ b/docs/rc/dir_d662e943e8adcb86abe4b822d2348c9e.html
@@ -0,0 +1,136 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: elastic_net Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_d662e943e8adcb86abe4b822d2348c9e.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">elastic_net Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:elastic__net_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="elastic__net_8sql__in.html">elastic_net.sql_in</a></td></tr>
+<tr class="memdesc:elastic__net_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">SQL functions for elastic net regularization. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_d662e943e8adcb86abe4b822d2348c9e.html">elastic_net</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/dir_dc596537ad427a4d866006d1a3e1fe29.html b/docs/rc/dir_dc596537ad427a4d866006d1a3e1fe29.html
new file mode 100644
index 0000000..e6b6b94
--- /dev/null
+++ b/docs/rc/dir_dc596537ad427a4d866006d1a3e1fe29.html
@@ -0,0 +1,185 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: modules Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_dc596537ad427a4d866006d1a3e1fe29.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">modules Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:dir_df86748cb94fb6c2fa09e991cce090c0"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_df86748cb94fb6c2fa09e991cce090c0.html">assoc_rules</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:dir_3ee26ceeadb429f807bd6cd822eca1b9"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_3ee26ceeadb429f807bd6cd822eca1b9.html">bayes</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:dir_42e4eb27424bda9fbbfa95509de09bad"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_42e4eb27424bda9fbbfa95509de09bad.html">conjugate_gradient</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:dir_93c42bb4df0f3e1302223b6dfd48c81e"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_93c42bb4df0f3e1302223b6dfd48c81e.html">convex</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:dir_70e9abe17564e15776adcab8550c7667"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_70e9abe17564e15776adcab8550c7667.html">crf</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:dir_7592ceb856cf018f9811e11407c61fda"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_7592ceb856cf018f9811e11407c61fda.html">deep_learning</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:dir_d662e943e8adcb86abe4b822d2348c9e"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_d662e943e8adcb86abe4b822d2348c9e.html">elastic_net</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:dir_e502304d8bc7f1ef2456a474c6d92acd"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_e502304d8bc7f1ef2456a474c6d92acd.html">glm</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:dir_1c3de670490e30b2adf792227ef51e32"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_1c3de670490e30b2adf792227ef51e32.html">graph</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:dir_73ccba3aa44ce35463f879b4ebbd3f46"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_73ccba3aa44ce35463f879b4ebbd3f46.html">kmeans</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:dir_b19a2d10787fafb5edd4ef1da0d2cacf"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_b19a2d10787fafb5edd4ef1da0d2cacf.html">knn</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:dir_6ff79b0655deb26abf8f86290b84a97c"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_6ff79b0655deb26abf8f86290b84a97c.html">lda</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:dir_9e42ee0a0235722f482630aa6cc99334"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_9e42ee0a0235722f482630aa6cc99334.html">linalg</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:dir_7513a8b3b7336e99c30a333cfb144104"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_7513a8b3b7336e99c30a333cfb144104.html">linear_systems</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:dir_9db0190ed89ab407304aec250d1ef64f"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_9db0190ed89ab407304aec250d1ef64f.html">pca</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:dir_d06d449079888c21a85aa00b7664e813"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_d06d449079888c21a85aa00b7664e813.html">pmml</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:dir_8b8525adb4e4d2ae68fa3d70bbeff8da"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_8b8525adb4e4d2ae68fa3d70bbeff8da.html">prob</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:dir_5341dbb6d7f0a427749c6136276fa506"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_5341dbb6d7f0a427749c6136276fa506.html">recursive_partitioning</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:dir_ac52a4b89b7b1b1591f2952b5cbd041a"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_ac52a4b89b7b1b1591f2952b5cbd041a.html">regress</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:dir_e6c126a997181663ba81c11cbf416bb1"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_e6c126a997181663ba81c11cbf416bb1.html">sample</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:dir_505cd743a8a717435eca324f49291a46"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_505cd743a8a717435eca324f49291a46.html">stats</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:dir_5ff04c1d4b766f0a4dd68c6f19ed2092"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_5ff04c1d4b766f0a4dd68c6f19ed2092.html">summary</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:dir_5cd13365c66443c54a8f3b4c82c03aee"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_5cd13365c66443c54a8f3b4c82c03aee.html">svm</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:dir_8cdb0d06bc3d9fdbe366fbcc82abc3e3"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_8cdb0d06bc3d9fdbe366fbcc82abc3e3.html">tsa</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:dir_8d53e1c0026e7e34b4cd68f8b91426d6"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_8d53e1c0026e7e34b4cd68f8b91426d6.html">utilities</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:dir_9f5e6edf0db58b0627c46b41dbbbb27f"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_9f5e6edf0db58b0627c46b41dbbbb27f.html">validation</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/dir_df86748cb94fb6c2fa09e991cce090c0.html b/docs/rc/dir_df86748cb94fb6c2fa09e991cce090c0.html
new file mode 100644
index 0000000..26f5d99
--- /dev/null
+++ b/docs/rc/dir_df86748cb94fb6c2fa09e991cce090c0.html
@@ -0,0 +1,136 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: assoc_rules Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_df86748cb94fb6c2fa09e991cce090c0.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">assoc_rules Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:assoc__rules_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="assoc__rules_8sql__in.html">assoc_rules.sql_in</a></td></tr>
+<tr class="memdesc:assoc__rules_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">The <a class="el" href="assoc__rules_8sql__in.html#a8362eb54bb0eeb551d5a1aadb96e7092">assoc_rules</a> function computes association rules for a given set of data. The data is assumed to have two dimensions; items (between which we are trying to discover associations), and a transaction id. This tranaction id groups the items by event and could also be a user id, date, etc. depending on the context of the data. This function assumes the data is stored in two columns with one transaction id and one item per row. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_df86748cb94fb6c2fa09e991cce090c0.html">assoc_rules</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/dir_e2e6d80cc57daae810c80cbdae687e33.html b/docs/rc/dir_e2e6d80cc57daae810c80cbdae687e33.html
new file mode 100644
index 0000000..3ed12ad
--- /dev/null
+++ b/docs/rc/dir_e2e6d80cc57daae810c80cbdae687e33.html
@@ -0,0 +1,135 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: src Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_e2e6d80cc57daae810c80cbdae687e33.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">src Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:dir_3749b33f41e0a82f4dfb20be7f91dfa3"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_3749b33f41e0a82f4dfb20be7f91dfa3.html">pg_gp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_704eb8350b43e1ca74c0f90ed1ba450e.html">methods</a></li><li class="navelem"><a class="el" href="dir_b10c028a6a58d6e0840bc150baba59b9.html">stemmer</a></li><li class="navelem"><a class="el" href="dir_e2e6d80cc57daae810c80cbdae687e33.html">src</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/dir_e502304d8bc7f1ef2456a474c6d92acd.html b/docs/rc/dir_e502304d8bc7f1ef2456a474c6d92acd.html
new file mode 100644
index 0000000..cf1f57f
--- /dev/null
+++ b/docs/rc/dir_e502304d8bc7f1ef2456a474c6d92acd.html
@@ -0,0 +1,142 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: glm Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_e502304d8bc7f1ef2456a474c6d92acd.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">glm Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:glm_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="glm_8sql__in.html">glm.sql_in</a></td></tr>
+<tr class="memdesc:glm_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">SQL functions for GLM (Poisson) <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:multiresponseglm_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="multiresponseglm_8sql__in.html">multiresponseglm.sql_in</a></td></tr>
+<tr class="memdesc:multiresponseglm_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">SQL functions for multinomial regression. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ordinal_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ordinal_8sql__in.html">ordinal.sql_in</a></td></tr>
+<tr class="memdesc:ordinal_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">SQL functions for ordinal regression. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_e502304d8bc7f1ef2456a474c6d92acd.html">glm</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/dir_e6c126a997181663ba81c11cbf416bb1.html b/docs/rc/dir_e6c126a997181663ba81c11cbf416bb1.html
new file mode 100644
index 0000000..55e2136
--- /dev/null
+++ b/docs/rc/dir_e6c126a997181663ba81c11cbf416bb1.html
@@ -0,0 +1,145 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: sample Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_e6c126a997181663ba81c11cbf416bb1.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">sample Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:balance__sample_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="balance__sample_8sql__in.html">balance_sample.sql_in</a></td></tr>
+<tr class="memdesc:balance__sample_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">SQL functions for balanced data sets sampling. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:sample_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sample_8sql__in.html">sample.sql_in</a></td></tr>
+<tr class="memdesc:sample_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">SQL functions for random sampling. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:stratified__sample_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="stratified__sample_8sql__in.html">stratified_sample.sql_in</a></td></tr>
+<tr class="memdesc:stratified__sample_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">SQL functions for stratified sampling. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:train__test__split_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="train__test__split_8sql__in.html">train_test_split.sql_in</a></td></tr>
+<tr class="memdesc:train__test__split_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">SQL functions for test train split. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_e6c126a997181663ba81c11cbf416bb1.html">sample</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/dir_efbcf68973d247bbf15f9eecae7f24e3.html b/docs/rc/dir_efbcf68973d247bbf15f9eecae7f24e3.html
new file mode 100644
index 0000000..8b5fe6e
--- /dev/null
+++ b/docs/rc/dir_efbcf68973d247bbf15f9eecae7f24e3.html
@@ -0,0 +1,135 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: ports Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_efbcf68973d247bbf15f9eecae7f24e3.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">ports Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:dir_a4a48839224ef8488facbffa8a397967"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/dir_fe647384fff178c2cff5ce75fb4044e5.html b/docs/rc/dir_fe647384fff178c2cff5ce75fb4044e5.html
new file mode 100644
index 0000000..7a55cb9
--- /dev/null
+++ b/docs/rc/dir_fe647384fff178c2cff5ce75fb4044e5.html
@@ -0,0 +1,136 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: pg_gp Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_fe647384fff178c2cff5ce75fb4044e5.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">pg_gp Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:array__ops_8sql__in"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="array__ops_8sql__in.html">array_ops.sql_in</a></td></tr>
+<tr class="memdesc:array__ops_8sql__in"><td class="mdescLeft">&#160;</td><td class="mdescRight">implementation of array operations in SQL <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_704eb8350b43e1ca74c0f90ed1ba450e.html">methods</a></li><li class="navelem"><a class="el" href="dir_834e55cf992733df24fbe86b49356157.html">array_ops</a></li><li class="navelem"><a class="el" href="dir_c8a9890f716ab6621b63d44c36a168eb.html">src</a></li><li class="navelem"><a class="el" href="dir_fe647384fff178c2cff5ce75fb4044e5.html">pg_gp</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/distribution_8sql__in.html b/docs/rc/distribution_8sql__in.html
new file mode 100644
index 0000000..2a62c48
--- /dev/null
+++ b/docs/rc/distribution_8sql__in.html
@@ -0,0 +1,323 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: distribution.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('distribution_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">distribution.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>SQL functions for collecting distributions.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:abc7f8816bbdb1467435e5ba17a7d08f1"><td class="memItemLeft" align="right" valign="top">float8 [][]&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="distribution_8sql__in.html#abc7f8816bbdb1467435e5ba17a7d08f1">vectorized_distribution_transition</a> (float8[][] distribution, integer[] indices, integer[] levels)</td></tr>
+<tr class="separator:abc7f8816bbdb1467435e5ba17a7d08f1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6bca924e0d2a49b101253f3ca9dc4a58"><td class="memItemLeft" align="right" valign="top">float8 [][]&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="distribution_8sql__in.html#a6bca924e0d2a49b101253f3ca9dc4a58">vectorized_distribution_final</a> (float8[][] state)</td></tr>
+<tr class="separator:a6bca924e0d2a49b101253f3ca9dc4a58"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa4608a56578c7e93615e6d5b558d0bf9"><td class="memItemLeft" align="right" valign="top">aggregate float8 [][]&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="distribution_8sql__in.html#aa4608a56578c7e93615e6d5b558d0bf9">vectorized_distribution_agg</a> (integer[], integer[])</td></tr>
+<tr class="separator:aa4608a56578c7e93615e6d5b558d0bf9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa7e45a9ebd2b5ad656e61aa9276116d3"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="distribution_8sql__in.html#aa7e45a9ebd2b5ad656e61aa9276116d3">discrete_distribution_transition</a> (float8[] distribution, integer ind, float8 weight, integer level)</td></tr>
+<tr class="separator:aa7e45a9ebd2b5ad656e61aa9276116d3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a99a03822b9063a37df8641cfcf2e450b"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="distribution_8sql__in.html#a99a03822b9063a37df8641cfcf2e450b">discrete_distribution_final</a> (float8[] state)</td></tr>
+<tr class="separator:a99a03822b9063a37df8641cfcf2e450b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af9418a44cb502919d54c59e909e19606"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="distribution_8sql__in.html#af9418a44cb502919d54c59e909e19606">discrete_distribution_agg</a> (integer, float8, integer)</td></tr>
+<tr class="separator:af9418a44cb502919d54c59e909e19606"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="af9418a44cb502919d54c59e909e19606"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af9418a44cb502919d54c59e909e19606">&#9670;&nbsp;</a></span>discrete_distribution_agg()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] discrete_distribution_agg </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a99a03822b9063a37df8641cfcf2e450b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a99a03822b9063a37df8641cfcf2e450b">&#9670;&nbsp;</a></span>discrete_distribution_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] discrete_distribution_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa7e45a9ebd2b5ad656e61aa9276116d3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa7e45a9ebd2b5ad656e61aa9276116d3">&#9670;&nbsp;</a></span>discrete_distribution_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] discrete_distribution_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>distribution</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>ind</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>weight</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>level</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa4608a56578c7e93615e6d5b558d0bf9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa4608a56578c7e93615e6d5b558d0bf9">&#9670;&nbsp;</a></span>vectorized_distribution_agg()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [][] vectorized_distribution_agg </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">[]&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a6bca924e0d2a49b101253f3ca9dc4a58"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6bca924e0d2a49b101253f3ca9dc4a58">&#9670;&nbsp;</a></span>vectorized_distribution_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [][] vectorized_distribution_final </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>state</em>[][]</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="abc7f8816bbdb1467435e5ba17a7d08f1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abc7f8816bbdb1467435e5ba17a7d08f1">&#9670;&nbsp;</a></span>vectorized_distribution_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [][] vectorized_distribution_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>distribution</em>[][], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>indices</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>levels</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_505cd743a8a717435eca324f49291a46.html">stats</a></li><li class="navelem"><a class="el" href="distribution_8sql__in.html">distribution.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:56 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/doc.png b/docs/rc/doc.png
new file mode 100644
index 0000000..17edabf
--- /dev/null
+++ b/docs/rc/doc.png
Binary files differ
diff --git a/docs/rc/doxygen.css b/docs/rc/doxygen.css
new file mode 100644
index 0000000..4f1ab91
--- /dev/null
+++ b/docs/rc/doxygen.css
@@ -0,0 +1,1596 @@
+/* The standard CSS for doxygen 1.8.13 */
+
+body, table, div, p, dl {
+	font: 400 14px/22px Roboto,sans-serif;
+}
+
+p.reference, p.definition {
+	font: 400 14px/22px Roboto,sans-serif;
+}
+
+/* @group Heading Levels */
+
+h1.groupheader {
+	font-size: 150%;
+}
+
+.title {
+	font: 400 14px/28px Roboto,sans-serif;
+	font-size: 150%;
+	font-weight: bold;
+	margin: 10px 2px;
+}
+
+h2.groupheader {
+	border-bottom: 1px solid #879ECB;
+	color: #354C7B;
+	font-size: 150%;
+	font-weight: normal;
+	margin-top: 1.75em;
+	padding-top: 8px;
+	padding-bottom: 4px;
+	width: 100%;
+}
+
+h3.groupheader {
+	font-size: 100%;
+}
+
+h1, h2, h3, h4, h5, h6 {
+	-webkit-transition: text-shadow 0.5s linear;
+	-moz-transition: text-shadow 0.5s linear;
+	-ms-transition: text-shadow 0.5s linear;
+	-o-transition: text-shadow 0.5s linear;
+	transition: text-shadow 0.5s linear;
+	margin-right: 15px;
+}
+
+h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow {
+	text-shadow: 0 0 15px cyan;
+}
+
+dt {
+	font-weight: bold;
+}
+
+div.multicol {
+	-moz-column-gap: 1em;
+	-webkit-column-gap: 1em;
+	-moz-column-count: 3;
+	-webkit-column-count: 3;
+}
+
+p.startli, p.startdd {
+	margin-top: 2px;
+}
+
+p.starttd {
+	margin-top: 0px;
+}
+
+p.endli {
+	margin-bottom: 0px;
+}
+
+p.enddd {
+	margin-bottom: 4px;
+}
+
+p.endtd {
+	margin-bottom: 2px;
+}
+
+/* @end */
+
+caption {
+	font-weight: bold;
+}
+
+span.legend {
+        font-size: 70%;
+        text-align: center;
+}
+
+h3.version {
+        font-size: 90%;
+        text-align: center;
+}
+
+div.qindex, div.navtab{
+	background-color: #EBEFF6;
+	border: 1px solid #A3B4D7;
+	text-align: center;
+}
+
+div.qindex, div.navpath {
+	width: 100%;
+	line-height: 140%;
+}
+
+div.navtab {
+	margin-right: 15px;
+}
+
+/* @group Link Styling */
+
+a {
+	color: #3D578C;
+	font-weight: normal;
+	text-decoration: none;
+}
+
+.contents a:visited {
+	color: #4665A2;
+}
+
+a:hover {
+	text-decoration: underline;
+}
+
+a.qindex {
+	font-weight: bold;
+}
+
+a.qindexHL {
+	font-weight: bold;
+	background-color: #9CAFD4;
+	color: #ffffff;
+	border: 1px double #869DCA;
+}
+
+.contents a.qindexHL:visited {
+        color: #ffffff;
+}
+
+a.el {
+	font-weight: bold;
+}
+
+a.elRef {
+}
+
+a.code, a.code:visited, a.line, a.line:visited {
+	color: #4665A2; 
+}
+
+a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited {
+	color: #4665A2; 
+}
+
+/* @end */
+
+dl.el {
+	margin-left: -1cm;
+}
+
+pre.fragment {
+        border: 1px solid #C4CFE5;
+        background-color: #FBFCFD;
+        padding: 4px 6px;
+        margin: 4px 8px 4px 2px;
+        overflow: auto;
+        word-wrap: break-word;
+        font-size:  9pt;
+        line-height: 125%;
+        font-family: monospace, fixed;
+        font-size: 105%;
+}
+
+div.fragment {
+        padding: 0px;
+        margin: 4px 8px 4px 2px;
+	background-color: #FBFCFD;
+	border: 1px solid #C4CFE5;
+}
+
+div.line {
+	font-family: monospace, fixed;
+        font-size: 13px;
+	min-height: 13px;
+	line-height: 1.0;
+	text-wrap: unrestricted;
+	white-space: -moz-pre-wrap; /* Moz */
+	white-space: -pre-wrap;     /* Opera 4-6 */
+	white-space: -o-pre-wrap;   /* Opera 7 */
+	white-space: pre-wrap;      /* CSS3  */
+	word-wrap: break-word;      /* IE 5.5+ */
+	text-indent: -53px;
+	padding-left: 53px;
+	padding-bottom: 0px;
+	margin: 0px;
+	-webkit-transition-property: background-color, box-shadow;
+	-webkit-transition-duration: 0.5s;
+	-moz-transition-property: background-color, box-shadow;
+	-moz-transition-duration: 0.5s;
+	-ms-transition-property: background-color, box-shadow;
+	-ms-transition-duration: 0.5s;
+	-o-transition-property: background-color, box-shadow;
+	-o-transition-duration: 0.5s;
+	transition-property: background-color, box-shadow;
+	transition-duration: 0.5s;
+}
+
+div.line:after {
+    content:"\000A";
+    white-space: pre;
+}
+
+div.line.glow {
+	background-color: cyan;
+	box-shadow: 0 0 10px cyan;
+}
+
+
+span.lineno {
+	padding-right: 4px;
+	text-align: right;
+	border-right: 2px solid #0F0;
+	background-color: #E8E8E8;
+        white-space: pre;
+}
+span.lineno a {
+	background-color: #D8D8D8;
+}
+
+span.lineno a:hover {
+	background-color: #C8C8C8;
+}
+
+.lineno {
+	-webkit-touch-callout: none;
+	-webkit-user-select: none;
+	-khtml-user-select: none;
+	-moz-user-select: none;
+	-ms-user-select: none;
+	user-select: none;
+}
+
+div.ah, span.ah {
+	background-color: black;
+	font-weight: bold;
+	color: #ffffff;
+	margin-bottom: 3px;
+	margin-top: 3px;
+	padding: 0.2em;
+	border: solid thin #333;
+	border-radius: 0.5em;
+	-webkit-border-radius: .5em;
+	-moz-border-radius: .5em;
+	box-shadow: 2px 2px 3px #999;
+	-webkit-box-shadow: 2px 2px 3px #999;
+	-moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
+	background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));
+	background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%);
+}
+
+div.classindex ul {
+        list-style: none;
+        padding-left: 0;
+}
+
+div.classindex span.ai {
+        display: inline-block;
+}
+
+div.groupHeader {
+	margin-left: 16px;
+	margin-top: 12px;
+	font-weight: bold;
+}
+
+div.groupText {
+	margin-left: 16px;
+	font-style: italic;
+}
+
+body {
+	background-color: white;
+	color: black;
+        margin: 0;
+}
+
+div.contents {
+	margin-top: 10px;
+	margin-left: 12px;
+	margin-right: 8px;
+}
+
+td.indexkey {
+	background-color: #EBEFF6;
+	font-weight: bold;
+	border: 1px solid #C4CFE5;
+	margin: 2px 0px 2px 0;
+	padding: 2px 10px;
+        white-space: nowrap;
+        vertical-align: top;
+}
+
+td.indexvalue {
+	background-color: #EBEFF6;
+	border: 1px solid #C4CFE5;
+	padding: 2px 10px;
+	margin: 2px 0px;
+}
+
+tr.memlist {
+	background-color: #EEF1F7;
+}
+
+p.formulaDsp {
+	text-align: center;
+}
+
+img.formulaDsp {
+	
+}
+
+img.formulaInl {
+	vertical-align: middle;
+}
+
+div.center {
+	text-align: center;
+        margin-top: 0px;
+        margin-bottom: 0px;
+        padding: 0px;
+}
+
+div.center img {
+	border: 0px;
+}
+
+address.footer {
+	text-align: right;
+	padding-right: 12px;
+}
+
+img.footer {
+	border: 0px;
+	vertical-align: middle;
+}
+
+/* @group Code Colorization */
+
+span.keyword {
+	color: #008000
+}
+
+span.keywordtype {
+	color: #604020
+}
+
+span.keywordflow {
+	color: #e08000
+}
+
+span.comment {
+	color: #800000
+}
+
+span.preprocessor {
+	color: #806020
+}
+
+span.stringliteral {
+	color: #002080
+}
+
+span.charliteral {
+	color: #008080
+}
+
+span.vhdldigit { 
+	color: #ff00ff 
+}
+
+span.vhdlchar { 
+	color: #000000 
+}
+
+span.vhdlkeyword { 
+	color: #700070 
+}
+
+span.vhdllogic { 
+	color: #ff0000 
+}
+
+blockquote {
+        background-color: #F7F8FB;
+        border-left: 2px solid #9CAFD4;
+        margin: 0 24px 0 4px;
+        padding: 0 12px 0 16px;
+}
+
+/* @end */
+
+/*
+.search {
+	color: #003399;
+	font-weight: bold;
+}
+
+form.search {
+	margin-bottom: 0px;
+	margin-top: 0px;
+}
+
+input.search {
+	font-size: 75%;
+	color: #000080;
+	font-weight: normal;
+	background-color: #e8eef2;
+}
+*/
+
+td.tiny {
+	font-size: 75%;
+}
+
+.dirtab {
+	padding: 4px;
+	border-collapse: collapse;
+	border: 1px solid #A3B4D7;
+}
+
+th.dirtab {
+	background: #EBEFF6;
+	font-weight: bold;
+}
+
+hr {
+	height: 0px;
+	border: none;
+	border-top: 1px solid #4A6AAA;
+}
+
+hr.footer {
+	height: 1px;
+}
+
+/* @group Member Descriptions */
+
+table.memberdecls {
+	border-spacing: 0px;
+	padding: 0px;
+}
+
+.memberdecls td, .fieldtable tr {
+	-webkit-transition-property: background-color, box-shadow;
+	-webkit-transition-duration: 0.5s;
+	-moz-transition-property: background-color, box-shadow;
+	-moz-transition-duration: 0.5s;
+	-ms-transition-property: background-color, box-shadow;
+	-ms-transition-duration: 0.5s;
+	-o-transition-property: background-color, box-shadow;
+	-o-transition-duration: 0.5s;
+	transition-property: background-color, box-shadow;
+	transition-duration: 0.5s;
+}
+
+.memberdecls td.glow, .fieldtable tr.glow {
+	background-color: cyan;
+	box-shadow: 0 0 15px cyan;
+}
+
+.mdescLeft, .mdescRight,
+.memItemLeft, .memItemRight,
+.memTemplItemLeft, .memTemplItemRight, .memTemplParams {
+	background-color: #F9FAFC;
+	border: none;
+	margin: 4px;
+	padding: 1px 0 0 8px;
+}
+
+.mdescLeft, .mdescRight {
+	padding: 0px 8px 4px 8px;
+	color: #555;
+}
+
+.memSeparator {
+        border-bottom: 1px solid #DEE4F0;
+        line-height: 1px;
+        margin: 0px;
+        padding: 0px;
+}
+
+.memItemLeft, .memTemplItemLeft {
+        white-space: nowrap;
+}
+
+.memItemRight {
+	width: 100%;
+}
+
+.memTemplParams {
+	color: #4665A2;
+        white-space: nowrap;
+	font-size: 80%;
+}
+
+/* @end */
+
+/* @group Member Details */
+
+/* Styles for detailed member documentation */
+
+.memtitle {
+	padding: 8px;
+	border-top: 1px solid #A8B8D9;
+	border-left: 1px solid #A8B8D9;
+	border-right: 1px solid #A8B8D9;
+	border-top-right-radius: 4px;
+	border-top-left-radius: 4px;
+	margin-bottom: -1px;
+	background-image: url('nav_f.png');
+	background-repeat: repeat-x;
+	background-color: #E2E8F2;
+	line-height: 1.25;
+	font-weight: 300;
+	float:left;
+}
+
+.permalink
+{
+        font-size: 65%;
+        display: inline-block;
+        vertical-align: middle;
+}
+
+.memtemplate {
+	font-size: 80%;
+	color: #4665A2;
+	font-weight: normal;
+	margin-left: 9px;
+}
+
+.memnav {
+	background-color: #EBEFF6;
+	border: 1px solid #A3B4D7;
+	text-align: center;
+	margin: 2px;
+	margin-right: 15px;
+	padding: 2px;
+}
+
+.mempage {
+	width: 100%;
+}
+
+.memitem {
+	padding: 0;
+	margin-bottom: 10px;
+	margin-right: 5px;
+        -webkit-transition: box-shadow 0.5s linear;
+        -moz-transition: box-shadow 0.5s linear;
+        -ms-transition: box-shadow 0.5s linear;
+        -o-transition: box-shadow 0.5s linear;
+        transition: box-shadow 0.5s linear;
+        display: table !important;
+        width: 100%;
+}
+
+.memitem.glow {
+         box-shadow: 0 0 15px cyan;
+}
+
+.memname {
+        font-weight: 400;
+        margin-left: 6px;
+}
+
+.memname td {
+	vertical-align: bottom;
+}
+
+.memproto, dl.reflist dt {
+        border-top: 1px solid #A8B8D9;
+        border-left: 1px solid #A8B8D9;
+        border-right: 1px solid #A8B8D9;
+        padding: 6px 0px 6px 0px;
+        color: #253555;
+        font-weight: bold;
+        text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+        background-color: #DFE5F1;
+        /* opera specific markup */
+        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+        border-top-right-radius: 4px;
+        /* firefox specific markup */
+        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+        -moz-border-radius-topright: 4px;
+        /* webkit specific markup */
+        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+        -webkit-border-top-right-radius: 4px;
+
+}
+
+.overload {
+        font-family: "courier new",courier,monospace;
+	font-size: 65%;
+}
+
+.memdoc, dl.reflist dd {
+        border-bottom: 1px solid #A8B8D9;      
+        border-left: 1px solid #A8B8D9;      
+        border-right: 1px solid #A8B8D9; 
+        padding: 6px 10px 2px 10px;
+        background-color: #FBFCFD;
+        border-top-width: 0;
+        background-image:url('nav_g.png');
+        background-repeat:repeat-x;
+        background-color: #FFFFFF;
+        /* opera specific markup */
+        border-bottom-left-radius: 4px;
+        border-bottom-right-radius: 4px;
+        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+        /* firefox specific markup */
+        -moz-border-radius-bottomleft: 4px;
+        -moz-border-radius-bottomright: 4px;
+        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+        /* webkit specific markup */
+        -webkit-border-bottom-left-radius: 4px;
+        -webkit-border-bottom-right-radius: 4px;
+        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+}
+
+dl.reflist dt {
+        padding: 5px;
+}
+
+dl.reflist dd {
+        margin: 0px 0px 10px 0px;
+        padding: 5px;
+}
+
+.paramkey {
+	text-align: right;
+}
+
+.paramtype {
+	white-space: nowrap;
+}
+
+.paramname {
+	color: #602020;
+	white-space: nowrap;
+}
+.paramname em {
+	font-style: normal;
+}
+.paramname code {
+        line-height: 14px;
+}
+
+.params, .retval, .exception, .tparams {
+        margin-left: 0px;
+        padding-left: 0px;
+}       
+
+.params .paramname, .retval .paramname {
+        font-weight: bold;
+        vertical-align: top;
+}
+        
+.params .paramtype {
+        font-style: italic;
+        vertical-align: top;
+}       
+        
+.params .paramdir {
+        font-family: "courier new",courier,monospace;
+        vertical-align: top;
+}
+
+table.mlabels {
+	border-spacing: 0px;
+}
+
+td.mlabels-left {
+	width: 100%;
+	padding: 0px;
+}
+
+td.mlabels-right {
+	vertical-align: bottom;
+	padding: 0px;
+	white-space: nowrap;
+}
+
+span.mlabels {
+        margin-left: 8px;
+}
+
+span.mlabel {
+        background-color: #728DC1;
+        border-top:1px solid #5373B4;
+        border-left:1px solid #5373B4;
+        border-right:1px solid #C4CFE5;
+        border-bottom:1px solid #C4CFE5;
+	text-shadow: none;
+	color: white;
+	margin-right: 4px;
+	padding: 2px 3px;
+	border-radius: 3px;
+	font-size: 7pt;
+	white-space: nowrap;
+	vertical-align: middle;
+}
+
+
+
+/* @end */
+
+/* these are for tree view inside a (index) page */
+
+div.directory {
+        margin: 10px 0px;
+        border-top: 1px solid #9CAFD4;
+        border-bottom: 1px solid #9CAFD4;
+        width: 100%;
+}
+
+.directory table {
+        border-collapse:collapse;
+}
+
+.directory td {
+        margin: 0px;
+        padding: 0px;
+	vertical-align: top;
+}
+
+.directory td.entry {
+        white-space: nowrap;
+        padding-right: 6px;
+	padding-top: 3px;
+}
+
+.directory td.entry a {
+        outline:none;
+}
+
+.directory td.entry a img {
+        border: none;
+}
+
+.directory td.desc {
+        width: 100%;
+        padding-left: 6px;
+	padding-right: 6px;
+	padding-top: 3px;
+	border-left: 1px solid rgba(0,0,0,0.05);
+}
+
+.directory tr.even {
+	padding-left: 6px;
+	background-color: #F7F8FB;
+}
+
+.directory img {
+	vertical-align: -30%;
+}
+
+.directory .levels {
+        white-space: nowrap;
+        width: 100%;
+        text-align: right;
+        font-size: 9pt;
+}
+
+.directory .levels span {
+        cursor: pointer;
+        padding-left: 2px;
+        padding-right: 2px;
+	color: #3D578C;
+}
+
+.arrow {
+    color: #9CAFD4;
+    -webkit-user-select: none;
+    -khtml-user-select: none;
+    -moz-user-select: none;
+    -ms-user-select: none;
+    user-select: none;
+    cursor: pointer;
+    font-size: 80%;
+    display: inline-block;
+    width: 16px;
+    height: 22px;
+}
+
+.icon {
+    font-family: Arial, Helvetica;
+    font-weight: bold;
+    font-size: 12px;
+    height: 14px;
+    width: 16px;
+    display: inline-block;
+    background-color: #728DC1;
+    color: white;
+    text-align: center;
+    border-radius: 4px;
+    margin-left: 2px;
+    margin-right: 2px;
+}
+
+.icona {
+    width: 24px;
+    height: 22px;
+    display: inline-block;
+}
+
+.iconfopen {
+    width: 24px;
+    height: 18px;
+    margin-bottom: 4px;
+    background-image:url('folderopen.png');
+    background-position: 0px -4px;
+    background-repeat: repeat-y;
+    vertical-align:top;
+    display: inline-block;
+}
+
+.iconfclosed {
+    width: 24px;
+    height: 18px;
+    margin-bottom: 4px;
+    background-image:url('folderclosed.png');
+    background-position: 0px -4px;
+    background-repeat: repeat-y;
+    vertical-align:top;
+    display: inline-block;
+}
+
+.icondoc {
+    width: 24px;
+    height: 18px;
+    margin-bottom: 4px;
+    background-image:url('doc.png');
+    background-position: 0px -4px;
+    background-repeat: repeat-y;
+    vertical-align:top;
+    display: inline-block;
+}
+
+table.directory {
+    font: 400 14px Roboto,sans-serif;
+}
+
+/* @end */
+
+div.dynheader {
+        margin-top: 8px;
+	-webkit-touch-callout: none;
+	-webkit-user-select: none;
+	-khtml-user-select: none;
+	-moz-user-select: none;
+	-ms-user-select: none;
+	user-select: none;
+}
+
+address {
+	font-style: normal;
+	color: #2A3D61;
+}
+
+table.doxtable caption {
+	caption-side: top;
+}
+
+table.doxtable {
+	border-collapse:collapse;
+        margin-top: 4px;
+        margin-bottom: 4px;
+}
+
+table.doxtable td, table.doxtable th {
+	border: 1px solid #2D4068;
+	padding: 3px 7px 2px;
+}
+
+table.doxtable th {
+	background-color: #374F7F;
+	color: #FFFFFF;
+	font-size: 110%;
+	padding-bottom: 4px;
+	padding-top: 5px;
+}
+
+table.fieldtable {
+        /*width: 100%;*/
+        margin-bottom: 10px;
+        border: 1px solid #A8B8D9;
+        border-spacing: 0px;
+        -moz-border-radius: 4px;
+        -webkit-border-radius: 4px;
+        border-radius: 4px;
+        -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
+        -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+        box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+}
+
+.fieldtable td, .fieldtable th {
+        padding: 3px 7px 2px;
+}
+
+.fieldtable td.fieldtype, .fieldtable td.fieldname {
+        white-space: nowrap;
+        border-right: 1px solid #A8B8D9;
+        border-bottom: 1px solid #A8B8D9;
+        vertical-align: top;
+}
+
+.fieldtable td.fieldname {
+        padding-top: 3px;
+}
+
+.fieldtable td.fielddoc {
+        border-bottom: 1px solid #A8B8D9;
+        /*width: 100%;*/
+}
+
+.fieldtable td.fielddoc p:first-child {
+        margin-top: 0px;
+}       
+        
+.fieldtable td.fielddoc p:last-child {
+        margin-bottom: 2px;
+}
+
+.fieldtable tr:last-child td {
+        border-bottom: none;
+}
+
+.fieldtable th {
+        background-image:url('nav_f.png');
+        background-repeat:repeat-x;
+        background-color: #E2E8F2;
+        font-size: 90%;
+        color: #253555;
+        padding-bottom: 4px;
+        padding-top: 5px;
+        text-align:left;
+        font-weight: 400;
+        -moz-border-radius-topleft: 4px;
+        -moz-border-radius-topright: 4px;
+        -webkit-border-top-left-radius: 4px;
+        -webkit-border-top-right-radius: 4px;
+        border-top-left-radius: 4px;
+        border-top-right-radius: 4px;
+        border-bottom: 1px solid #A8B8D9;
+}
+
+
+.tabsearch {
+	top: 0px;
+	left: 10px;
+	height: 36px;
+	background-image: url('tab_b.png');
+	z-index: 101;
+	overflow: hidden;
+	font-size: 13px;
+}
+
+.navpath ul
+{
+	font-size: 11px;
+	background-image:url('tab_b.png');
+	background-repeat:repeat-x;
+	background-position: 0 -5px;
+	height:30px;
+	line-height:30px;
+	color:#8AA0CC;
+	border:solid 1px #C2CDE4;
+	overflow:hidden;
+	margin:0px;
+	padding:0px;
+}
+
+.navpath li
+{
+	list-style-type:none;
+	float:left;
+	padding-left:10px;
+	padding-right:15px;
+	background-image:url('bc_s.png');
+	background-repeat:no-repeat;
+	background-position:right;
+	color:#364D7C;
+}
+
+.navpath li.navelem a
+{
+	height:32px;
+	display:block;
+	text-decoration: none;
+	outline: none;
+	color: #283A5D;
+	font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+	text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+	text-decoration: none;        
+}
+
+.navpath li.navelem a:hover
+{
+	color:#6884BD;
+}
+
+.navpath li.footer
+{
+        list-style-type:none;
+        float:right;
+        padding-left:10px;
+        padding-right:15px;
+        background-image:none;
+        background-repeat:no-repeat;
+        background-position:right;
+        color:#364D7C;
+        font-size: 8pt;
+}
+
+
+div.summary
+{
+	float: right;
+	font-size: 8pt;
+	padding-right: 5px;
+	width: 50%;
+	text-align: right;
+}       
+
+div.summary a
+{
+	white-space: nowrap;
+}
+
+table.classindex
+{
+        margin: 10px;
+        white-space: nowrap;
+        margin-left: 3%;
+        margin-right: 3%;
+        width: 94%;
+        border: 0;
+        border-spacing: 0; 
+        padding: 0;
+}
+
+div.ingroups
+{
+	font-size: 8pt;
+	width: 50%;
+	text-align: left;
+}
+
+div.ingroups a
+{
+	white-space: nowrap;
+}
+
+div.header
+{
+        background-image:url('nav_h.png');
+        background-repeat:repeat-x;
+	background-color: #F9FAFC;
+	margin:  0px;
+	border-bottom: 1px solid #C4CFE5;
+}
+
+div.headertitle
+{
+	padding: 5px 5px 5px 10px;
+}
+
+dl
+{
+        padding: 0 0 0 10px;
+}
+
+/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */
+dl.section
+{
+	margin-left: 0px;
+	padding-left: 0px;
+}
+
+dl.note
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #D0C000;
+}
+
+dl.warning, dl.attention
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #FF0000;
+}
+
+dl.pre, dl.post, dl.invariant
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #00D000;
+}
+
+dl.deprecated
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #505050;
+}
+
+dl.todo
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #00C0E0;
+}
+
+dl.test
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #3030E0;
+}
+
+dl.bug
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #C08050;
+}
+
+dl.section dd {
+	margin-bottom: 6px;
+}
+
+
+#projectlogo
+{
+	text-align: center;
+	vertical-align: bottom;
+	border-collapse: separate;
+}
+ 
+#projectlogo img
+{ 
+	border: 0px none;
+}
+ 
+#projectalign
+{
+        vertical-align: middle;
+}
+
+#projectname
+{
+	font: 300% Tahoma, Arial,sans-serif;
+	margin: 0px;
+	padding: 2px 0px;
+}
+    
+#projectbrief
+{
+	font: 120% Tahoma, Arial,sans-serif;
+	margin: 0px;
+	padding: 0px;
+}
+
+#projectnumber
+{
+	font: 50% Tahoma, Arial,sans-serif;
+	margin: 0px;
+	padding: 0px;
+}
+
+#titlearea
+{
+	padding: 0px;
+	margin: 0px;
+	width: 100%;
+	border-bottom: 1px solid #5373B4;
+}
+
+.image
+{
+        text-align: center;
+}
+
+.dotgraph
+{
+        text-align: center;
+}
+
+.mscgraph
+{
+        text-align: center;
+}
+
+.plantumlgraph
+{
+        text-align: center;
+}
+
+.diagraph
+{
+        text-align: center;
+}
+
+.caption
+{
+	font-weight: bold;
+}
+
+div.zoom
+{
+	border: 1px solid #90A5CE;
+}
+
+dl.citelist {
+        margin-bottom:50px;
+}
+
+dl.citelist dt {
+        color:#334975;
+        float:left;
+        font-weight:bold;
+        margin-right:10px;
+        padding:5px;
+}
+
+dl.citelist dd {
+        margin:2px 0;
+        padding:5px 0;
+}
+
+div.toc {
+        padding: 14px 25px;
+        background-color: #F4F6FA;
+        border: 1px solid #D8DFEE;
+        border-radius: 7px 7px 7px 7px;
+        float: right;
+        height: auto;
+        margin: 0 8px 10px 10px;
+        width: 200px;
+}
+
+div.toc li {
+        background: url("bdwn.png") no-repeat scroll 0 5px transparent;
+        font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif;
+        margin-top: 5px;
+        padding-left: 10px;
+        padding-top: 2px;
+}
+
+div.toc h3 {
+        font: bold 12px/1.2 Arial,FreeSans,sans-serif;
+	color: #4665A2;
+        border-bottom: 0 none;
+        margin: 0;
+}
+
+div.toc ul {
+        list-style: none outside none;
+        border: medium none;
+        padding: 0px;
+}       
+
+div.toc li.level1 {
+        margin-left: 0px;
+}
+
+div.toc li.level2 {
+        margin-left: 15px;
+}
+
+div.toc li.level3 {
+        margin-left: 30px;
+}
+
+div.toc li.level4 {
+        margin-left: 45px;
+}
+
+.inherit_header {
+        font-weight: bold;
+        color: gray;
+        cursor: pointer;
+	-webkit-touch-callout: none;
+	-webkit-user-select: none;
+	-khtml-user-select: none;
+	-moz-user-select: none;
+	-ms-user-select: none;
+	user-select: none;
+}
+
+.inherit_header td {
+        padding: 6px 0px 2px 5px;
+}
+
+.inherit {
+        display: none;
+}
+
+tr.heading h2 {
+        margin-top: 12px;
+        margin-bottom: 4px;
+}
+
+/* tooltip related style info */
+
+.ttc {
+        position: absolute;
+        display: none;
+}
+
+#powerTip {
+	cursor: default;
+	white-space: nowrap;
+	background-color: white;
+	border: 1px solid gray;
+	border-radius: 4px 4px 4px 4px;
+	box-shadow: 1px 1px 7px gray;
+	display: none;
+	font-size: smaller;
+	max-width: 80%;
+	opacity: 0.9;
+	padding: 1ex 1em 1em;
+	position: absolute;
+	z-index: 2147483647;
+}
+
+#powerTip div.ttdoc {
+        color: grey;
+	font-style: italic;
+}
+
+#powerTip div.ttname a {
+        font-weight: bold;
+}
+
+#powerTip div.ttname {
+        font-weight: bold;
+}
+
+#powerTip div.ttdeci {
+        color: #006318;
+}
+
+#powerTip div {
+        margin: 0px;
+        padding: 0px;
+        font: 12px/16px Roboto,sans-serif;
+}
+
+#powerTip:before, #powerTip:after {
+	content: "";
+	position: absolute;
+	margin: 0px;
+}
+
+#powerTip.n:after,  #powerTip.n:before,
+#powerTip.s:after,  #powerTip.s:before,
+#powerTip.w:after,  #powerTip.w:before,
+#powerTip.e:after,  #powerTip.e:before,
+#powerTip.ne:after, #powerTip.ne:before,
+#powerTip.se:after, #powerTip.se:before,
+#powerTip.nw:after, #powerTip.nw:before,
+#powerTip.sw:after, #powerTip.sw:before {
+	border: solid transparent;
+	content: " ";
+	height: 0;
+	width: 0;
+	position: absolute;
+}
+
+#powerTip.n:after,  #powerTip.s:after,
+#powerTip.w:after,  #powerTip.e:after,
+#powerTip.nw:after, #powerTip.ne:after,
+#powerTip.sw:after, #powerTip.se:after {
+	border-color: rgba(255, 255, 255, 0);
+}
+
+#powerTip.n:before,  #powerTip.s:before,
+#powerTip.w:before,  #powerTip.e:before,
+#powerTip.nw:before, #powerTip.ne:before,
+#powerTip.sw:before, #powerTip.se:before {
+	border-color: rgba(128, 128, 128, 0);
+}
+
+#powerTip.n:after,  #powerTip.n:before,
+#powerTip.ne:after, #powerTip.ne:before,
+#powerTip.nw:after, #powerTip.nw:before {
+	top: 100%;
+}
+
+#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after {
+	border-top-color: #ffffff;
+	border-width: 10px;
+	margin: 0px -10px;
+}
+#powerTip.n:before {
+	border-top-color: #808080;
+	border-width: 11px;
+	margin: 0px -11px;
+}
+#powerTip.n:after, #powerTip.n:before {
+	left: 50%;
+}
+
+#powerTip.nw:after, #powerTip.nw:before {
+	right: 14px;
+}
+
+#powerTip.ne:after, #powerTip.ne:before {
+	left: 14px;
+}
+
+#powerTip.s:after,  #powerTip.s:before,
+#powerTip.se:after, #powerTip.se:before,
+#powerTip.sw:after, #powerTip.sw:before {
+	bottom: 100%;
+}
+
+#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after {
+	border-bottom-color: #ffffff;
+	border-width: 10px;
+	margin: 0px -10px;
+}
+
+#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before {
+	border-bottom-color: #808080;
+	border-width: 11px;
+	margin: 0px -11px;
+}
+
+#powerTip.s:after, #powerTip.s:before {
+	left: 50%;
+}
+
+#powerTip.sw:after, #powerTip.sw:before {
+	right: 14px;
+}
+
+#powerTip.se:after, #powerTip.se:before {
+	left: 14px;
+}
+
+#powerTip.e:after, #powerTip.e:before {
+	left: 100%;
+}
+#powerTip.e:after {
+	border-left-color: #ffffff;
+	border-width: 10px;
+	top: 50%;
+	margin-top: -10px;
+}
+#powerTip.e:before {
+	border-left-color: #808080;
+	border-width: 11px;
+	top: 50%;
+	margin-top: -11px;
+}
+
+#powerTip.w:after, #powerTip.w:before {
+	right: 100%;
+}
+#powerTip.w:after {
+	border-right-color: #ffffff;
+	border-width: 10px;
+	top: 50%;
+	margin-top: -10px;
+}
+#powerTip.w:before {
+	border-right-color: #808080;
+	border-width: 11px;
+	top: 50%;
+	margin-top: -11px;
+}
+
+@media print
+{
+  #top { display: none; }
+  #side-nav { display: none; }
+  #nav-path { display: none; }
+  body { overflow:visible; }
+  h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }
+  .summary { display: none; }
+  .memitem { page-break-inside: avoid; }
+  #doc-content
+  {
+    margin-left:0 !important;
+    height:auto !important;
+    width:auto !important;
+    overflow:inherit;
+    display:inline;
+  }
+}
+
+/* @group Markdown */
+
+/*
+table.markdownTable {
+	border-collapse:collapse;
+        margin-top: 4px;
+        margin-bottom: 4px;
+}
+
+table.markdownTable td, table.markdownTable th {
+	border: 1px solid #2D4068;
+	padding: 3px 7px 2px;
+}
+
+table.markdownTableHead tr {
+}
+
+table.markdownTableBodyLeft td, table.markdownTable th {
+	border: 1px solid #2D4068;
+	padding: 3px 7px 2px;
+}
+
+th.markdownTableHeadLeft th.markdownTableHeadRight th.markdownTableHeadCenter th.markdownTableHeadNone {
+	background-color: #374F7F;
+	color: #FFFFFF;
+	font-size: 110%;
+	padding-bottom: 4px;
+	padding-top: 5px;
+}
+
+th.markdownTableHeadLeft {
+	text-align: left
+}
+
+th.markdownTableHeadRight {
+	text-align: right
+}
+
+th.markdownTableHeadCenter {
+	text-align: center
+}
+*/
+
+table.markdownTable {
+	border-collapse:collapse;
+        margin-top: 4px;
+        margin-bottom: 4px;
+}
+
+table.markdownTable td, table.markdownTable th {
+	border: 1px solid #2D4068;
+	padding: 3px 7px 2px;
+}
+
+table.markdownTable tr {
+}
+
+th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone {
+	background-color: #374F7F;
+	color: #FFFFFF;
+	font-size: 110%;
+	padding-bottom: 4px;
+	padding-top: 5px;
+}
+
+th.markdownTableHeadLeft, td.markdownTableBodyLeft {
+	text-align: left
+}
+
+th.markdownTableHeadRight, td.markdownTableBodyRight {
+	text-align: right
+}
+
+th.markdownTableHeadCenter, td.markdownTableBodyCenter {
+	text-align: center
+}
+
+
+/* @end */
diff --git a/docs/rc/doxygen.png b/docs/rc/doxygen.png
new file mode 100644
index 0000000..3ff17d8
--- /dev/null
+++ b/docs/rc/doxygen.png
Binary files differ
diff --git a/docs/rc/dynsections.js b/docs/rc/dynsections.js
new file mode 100644
index 0000000..85e1836
--- /dev/null
+++ b/docs/rc/dynsections.js
@@ -0,0 +1,97 @@
+function toggleVisibility(linkObj)
+{
+ var base = $(linkObj).attr('id');
+ var summary = $('#'+base+'-summary');
+ var content = $('#'+base+'-content');
+ var trigger = $('#'+base+'-trigger');
+ var src=$(trigger).attr('src');
+ if (content.is(':visible')===true) {
+   content.hide();
+   summary.show();
+   $(linkObj).addClass('closed').removeClass('opened');
+   $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
+ } else {
+   content.show();
+   summary.hide();
+   $(linkObj).removeClass('closed').addClass('opened');
+   $(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
+ } 
+ return false;
+}
+
+function updateStripes()
+{
+  $('table.directory tr').
+       removeClass('even').filter(':visible:even').addClass('even');
+}
+
+function toggleLevel(level)
+{
+  $('table.directory tr').each(function() {
+    var l = this.id.split('_').length-1;
+    var i = $('#img'+this.id.substring(3));
+    var a = $('#arr'+this.id.substring(3));
+    if (l<level+1) {
+      i.removeClass('iconfopen iconfclosed').addClass('iconfopen');
+      a.html('&#9660;');
+      $(this).show();
+    } else if (l==level+1) {
+      i.removeClass('iconfclosed iconfopen').addClass('iconfclosed');
+      a.html('&#9658;');
+      $(this).show();
+    } else {
+      $(this).hide();
+    }
+  });
+  updateStripes();
+}
+
+function toggleFolder(id)
+{
+  // the clicked row
+  var currentRow = $('#row_'+id);
+
+  // all rows after the clicked row
+  var rows = currentRow.nextAll("tr");
+
+  var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
+
+  // only match elements AFTER this one (can't hide elements before)
+  var childRows = rows.filter(function() { return this.id.match(re); });
+
+  // first row is visible we are HIDING
+  if (childRows.filter(':first').is(':visible')===true) {
+    // replace down arrow by right arrow for current row
+    var currentRowSpans = currentRow.find("span");
+    currentRowSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
+    currentRowSpans.filter(".arrow").html('&#9658;');
+    rows.filter("[id^=row_"+id+"]").hide(); // hide all children
+  } else { // we are SHOWING
+    // replace right arrow by down arrow for current row
+    var currentRowSpans = currentRow.find("span");
+    currentRowSpans.filter(".iconfclosed").removeClass("iconfclosed").addClass("iconfopen");
+    currentRowSpans.filter(".arrow").html('&#9660;');
+    // replace down arrows by right arrows for child rows
+    var childRowsSpans = childRows.find("span");
+    childRowsSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
+    childRowsSpans.filter(".arrow").html('&#9658;');
+    childRows.show(); //show all children
+  }
+  updateStripes();
+}
+
+
+function toggleInherit(id)
+{
+  var rows = $('tr.inherit.'+id);
+  var img = $('tr.inherit_header.'+id+' img');
+  var src = $(img).attr('src');
+  if (rows.filter(':first').is(':visible')===true) {
+    rows.css('display','none');
+    $(img).attr('src',src.substring(0,src.length-8)+'closed.png');
+  } else {
+    rows.css('display','table-row'); // using show() causes jump in firefox
+    $(img).attr('src',src.substring(0,src.length-10)+'open.png');
+  }
+}
+
diff --git a/docs/rc/eigen_navtree_hacks.js b/docs/rc/eigen_navtree_hacks.js
new file mode 100644
index 0000000..ee72246
--- /dev/null
+++ b/docs/rc/eigen_navtree_hacks.js
@@ -0,0 +1,236 @@
+var arrowRight = '&#9658;';
+
+// generate a table of contents in the side-nav based on the h1/h2 tags of the current page.
+function generate_autotoc() {
+  var headers = $("h1, h2");
+  if(headers.length > 1) {
+    var toc = $("#side-nav").append('<div id="nav-toc" class="toc"><h3>Table of contents</h3></div>');
+    toc = $("#nav-toc");
+    var footerHeight = footer.height();
+    toc = toc.append('<ul></ul>');
+    toc = toc.find('ul');
+    var indices = new Array();
+    indices[0] = 0;
+    indices[1] = 0;
+
+    var h1counts = $("h1").length;
+    headers.each(function(i) {
+      var current = $(this);
+      var levelTag = current[0].tagName.charAt(1);
+      if(h1counts==0)
+        levelTag--;
+      var cur_id = current.attr("id");
+
+      indices[levelTag-1]+=1;
+      var prefix = indices[0];
+      if (levelTag >1) {
+        prefix+="."+indices[1];
+      }
+
+      // Uncomment to add number prefixes
+      // current.html(prefix + "   " + current.html());
+      for(var l = levelTag; l < 2; ++l){
+          indices[l] = 0;
+      }
+
+      if(cur_id == undefined) {
+        current.attr('id', 'title' + i);
+        current.addClass('anchor');
+        toc.append("<li class='level" + levelTag + "'><a id='link" + i + "' href='#title" +
+                    i + "' title='" + current.prop("tagName") + "'>" + current.text() + "</a></li>");
+      } else {
+        toc.append("<li class='level" + levelTag + "'><a id='" + cur_id + "' href='#title" +
+                    i + "' title='" + current.prop("tagName") + "'>" + current.text() + "</a></li>");
+      }
+    });
+    resizeHeight();
+  }
+}
+
+
+var global_navtree_object;
+
+// Overloaded to remove links to sections/subsections
+function getNode(o, po)
+{
+  po.childrenVisited = true;
+  var l = po.childrenData.length-1;
+  for (var i in po.childrenData) {
+    var nodeData = po.childrenData[i];
+    if((!nodeData[1]) ||  (nodeData[1].indexOf('#')==-1)) // <- we added this line
+      po.children[i] = newNode(o, po, nodeData[0], nodeData[1], nodeData[2], i==l);
+  }
+}
+
+// Overloaded to adjust the size of the navtree wrt the toc
+function resizeHeight()
+{
+  var toc = $("#nav-toc");
+  var tocHeight = toc.height();  // <- we added this line
+  var headerHeight = header.height();
+  var footerHeight = footer.height();
+  var windowHeight = $(window).height() - headerHeight - footerHeight;
+  content.css({height:windowHeight + "px"});
+  navtree.css({height:(windowHeight-tocHeight) + "px"}); // <- we modified this line
+  sidenav.css({height:(windowHeight) + "px",top: headerHeight+"px"});
+}
+
+// Overloaded to save the root node into global_navtree_object
+function initNavTree(toroot,relpath)
+{
+  var o = new Object();
+  global_navtree_object = o; // <- we added this line
+  o.toroot = toroot;
+  o.node = new Object();
+  o.node.li = document.getElementById("nav-tree-contents");
+  o.node.childrenData = NAVTREE;
+  o.node.children = new Array();
+  o.node.childrenUL = document.createElement("ul");
+  o.node.getChildrenUL = function() { return o.node.childrenUL; };
+  o.node.li.appendChild(o.node.childrenUL);
+  o.node.depth = 0;
+  o.node.relpath = relpath;
+  o.node.expanded = false;
+  o.node.isLast = true;
+  o.node.plus_img = document.createElement("span");
+  o.node.plus_img.className = 'arrow';
+  o.node.plus_img.innerHTML = arrowRight;
+
+  if (localStorageSupported()) {
+    var navSync = $('#nav-sync');
+    if (cachedLink()) {
+      showSyncOff(navSync,relpath);
+      navSync.removeClass('sync');
+    } else {
+      showSyncOn(navSync,relpath);
+    }
+    navSync.click(function(){ toggleSyncButton(relpath); });
+  }
+
+  navTo(o,toroot,window.location.hash,relpath);
+
+  $(window).bind('hashchange', function(){
+     if (window.location.hash && window.location.hash.length>1){
+       var a;
+       if ($(location).attr('hash')){
+         var clslink=stripPath($(location).attr('pathname'))+':'+
+                               $(location).attr('hash').substring(1);
+         a=$('.item a[class$="'+clslink+'"]');
+       }
+       if (a==null || !$(a).parent().parent().hasClass('selected')){
+         $('.item').removeClass('selected');
+         $('.item').removeAttr('id');
+       }
+       var link=stripPath2($(location).attr('pathname'));
+       navTo(o,link,$(location).attr('hash'),relpath);
+     } else if (!animationInProgress) {
+       $('#doc-content').scrollTop(0);
+       $('.item').removeClass('selected');
+       $('.item').removeAttr('id');
+       navTo(o,toroot,window.location.hash,relpath);
+     }
+  })
+
+  $(window).load(showRoot);
+}
+
+// return false if the the node has no children at all, or has only section/subsection children
+function checkChildrenData(node) {
+  if (!(typeof(node.childrenData)==='string')) {
+    for (var i in node.childrenData) {
+      var url = node.childrenData[i][1];
+      if(url.indexOf("#")==-1)
+        return true;
+    }
+    return false;
+  }
+  return (node.childrenData);
+}
+
+// Modified to:
+// 1 - remove the root node
+// 2 - remove the section/subsection children
+function createIndent(o,domNode,node,level)
+{
+  var level=-2; // <- we replaced level=-1 by level=-2
+  var n = node;
+  while (n.parentNode) { level++; n=n.parentNode; }
+  if (checkChildrenData(node)) { // <- we modified this line to use checkChildrenData(node) instead of node.childrenData
+    var imgNode = document.createElement("span");
+    imgNode.className = 'arrow';
+    imgNode.style.paddingLeft=(16*level).toString()+'px';
+    imgNode.innerHTML = arrowRight;
+
+    node.plus_img = imgNode;
+    node.expandToggle = document.createElement("a");
+    node.expandToggle.href = "javascript:void(0)";
+    node.expandToggle.onclick = function() {
+      if (node.expanded) {
+        $(node.getChildrenUL()).slideUp("fast");
+        node.plus_img.innerHTML = arrowRight;
+        node.expanded = false;
+      } else {
+        expandNode(o, node, false, false);
+      }
+    }
+    node.expandToggle.appendChild(imgNode);
+    domNode.appendChild(node.expandToggle);
+  } else {
+      var span = document.createElement("span");
+      span.className = 'arrow';
+      span.style.width   = 16*(level+1)+'px';
+      span.innerHTML = '&#160;';
+      domNode.appendChild(span);
+  }
+}
+
+// Overloaded to automatically expand the selected node
+function selectAndHighlight(hash,n)
+{
+  var a;
+  if (hash) {
+    var link=stripPath($(location).attr('pathname'))+':'+hash.substring(1);
+    a=$('.item a[class$="'+link+'"]');
+  }
+  if (a && a.length) {
+    a.parent().parent().addClass('selected');
+    a.parent().parent().attr('id','selected');
+    highlightAnchor();
+  } else if (n) {
+    $(n.itemDiv).addClass('selected');
+    $(n.itemDiv).attr('id','selected');
+  }
+  if ($('#nav-tree-contents .item:first').hasClass('selected')) {
+    $('#nav-sync').css('top','30px');
+  } else {
+    $('#nav-sync').css('top','5px');
+  }
+  expandNode(global_navtree_object, n, true, true); // <- we added this line
+  showRoot();
+}
+
+
+$(document).ready(function() {
+
+  (function (){ // wait until the first "selected" element has been created
+    try {
+
+      // this line will triger an exception if there is no #selected element, i.e., before the tree structure is complete.
+      document.getElementById("selected").className = "item selected";
+
+      // ok, the default tree has been created, we can keep going...
+
+      // we want to expand the function list by default
+      expandNode(global_navtree_object, global_navtree_object.node.children[0].children[0], true, true);
+
+      // Hide the root node "MADlib"
+      // $(document.getElementsByClassName('index.html')[0]).parent().parent().css({display:"none"});
+
+      // Hide the "modules" node
+      $(document.getElementsByClassName('modules.html')[0]).parent().parent().css({display:"none"});
+
+    } catch (err) {
+      setTimeout(arguments.callee, 10);
+    }
+  })();
+});
diff --git a/docs/rc/elastic__net_8sql__in.html b/docs/rc/elastic__net_8sql__in.html
new file mode 100644
index 0000000..6ed8d62
--- /dev/null
+++ b/docs/rc/elastic__net_8sql__in.html
@@ -0,0 +1,2476 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: elastic_net.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('elastic__net_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">elastic_net.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>SQL functions for elastic net regularization.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a735038a5090c112505c740a90a203e83"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="elastic__net_8sql__in.html#a735038a5090c112505c740a90a203e83">elastic_net_train</a> (text tbl_source, text tbl_result, text col_dep_var, text col_ind_var, text regress_family, float8 alpha, float8 lambda_value, boolean standardize, text grouping_col, text optimizer, text optimizer_params, text excluded, integer max_iter, float8 tolerance)</td></tr>
+<tr class="memdesc:a735038a5090c112505c740a90a203e83"><td class="mdescLeft">&#160;</td><td class="mdescRight">Interface for elastic net.  <a href="#a735038a5090c112505c740a90a203e83">More...</a><br /></td></tr>
+<tr class="separator:a735038a5090c112505c740a90a203e83"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a148de1ad5e1e60b9df3d3af590c06579"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="elastic__net_8sql__in.html#a148de1ad5e1e60b9df3d3af590c06579">elastic_net_train</a> (text tbl_source, text tbl_result, text col_ind_var, text col_dep_var, text regress_family, float8 alpha, float8 lambda_value, boolean standardization, text grouping_columns, text optimizer, text optimizer_params, text excluded, integer max_iter)</td></tr>
+<tr class="separator:a148de1ad5e1e60b9df3d3af590c06579"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a63c8ed415005cc446a59bdc47a09791d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="elastic__net_8sql__in.html#a63c8ed415005cc446a59bdc47a09791d">elastic_net_train</a> (text tbl_source, text tbl_result, text col_ind_var, text col_dep_var, text regress_family, float8 alpha, float8 lambda_value, boolean standardization, text grouping_columns, text optimizer, text optimizer_params, text excluded)</td></tr>
+<tr class="separator:a63c8ed415005cc446a59bdc47a09791d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac26504e7ac55190207758356d821a01a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="elastic__net_8sql__in.html#ac26504e7ac55190207758356d821a01a">elastic_net_train</a> (text tbl_source, text tbl_result, text col_ind_var, text col_dep_var, text regress_family, float8 alpha, float8 lambda_value, boolean standardization, text grouping_columns, text optimizer, text optimizer_params)</td></tr>
+<tr class="separator:ac26504e7ac55190207758356d821a01a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7e698f9a0c7a1aa43f4bf9e169dc8b35"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="elastic__net_8sql__in.html#a7e698f9a0c7a1aa43f4bf9e169dc8b35">elastic_net_train</a> (text tbl_source, text tbl_result, text col_ind_var, text col_dep_var, text regress_family, float8 alpha, float8 lambda_value, boolean standardization, text grouping_columns, text optimizer)</td></tr>
+<tr class="separator:a7e698f9a0c7a1aa43f4bf9e169dc8b35"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab54d8862d3ad299aceca4ac2c914437e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="elastic__net_8sql__in.html#ab54d8862d3ad299aceca4ac2c914437e">elastic_net_train</a> (text tbl_source, text tbl_result, text col_ind_var, text col_dep_var, text regress_family, float8 alpha, float8 lambda_value, boolean standardization, text grouping_columns)</td></tr>
+<tr class="separator:ab54d8862d3ad299aceca4ac2c914437e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0351b7ed17eccb6db2c0bd61b421458b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="elastic__net_8sql__in.html#a0351b7ed17eccb6db2c0bd61b421458b">elastic_net_train</a> (text tbl_source, text tbl_result, text col_ind_var, text col_dep_var, text regress_family, float8 alpha, float8 lambda_value, boolean standardization)</td></tr>
+<tr class="separator:a0351b7ed17eccb6db2c0bd61b421458b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1a57491bc6b156d575bb93edb986aaa5"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="elastic__net_8sql__in.html#a1a57491bc6b156d575bb93edb986aaa5">elastic_net_train</a> (text tbl_source, text tbl_result, text col_ind_var, text col_dep_var, text regress_family, float8 alpha, float8 lambda_value)</td></tr>
+<tr class="separator:a1a57491bc6b156d575bb93edb986aaa5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:add7e2592fb0bd9f2eb1d8b176c80b5d0"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="elastic__net_8sql__in.html#add7e2592fb0bd9f2eb1d8b176c80b5d0">elastic_net_train</a> ()</td></tr>
+<tr class="memdesc:add7e2592fb0bd9f2eb1d8b176c80b5d0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Help function, to print out the supported families.  <a href="#add7e2592fb0bd9f2eb1d8b176c80b5d0">More...</a><br /></td></tr>
+<tr class="separator:add7e2592fb0bd9f2eb1d8b176c80b5d0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6f6ee3def49b5e9a1d3375fe41427dc0"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="elastic__net_8sql__in.html#a6f6ee3def49b5e9a1d3375fe41427dc0">elastic_net_train</a> (text family_or_optimizer)</td></tr>
+<tr class="memdesc:a6f6ee3def49b5e9a1d3375fe41427dc0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Help function, to print out the supported optimizer for a family or print out the parameter list for an optimizer.  <a href="#a6f6ee3def49b5e9a1d3375fe41427dc0">More...</a><br /></td></tr>
+<tr class="separator:a6f6ee3def49b5e9a1d3375fe41427dc0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3578608204ac9b2d3442ff42977f632b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="elastic__net_8sql__in.html#a3578608204ac9b2d3442ff42977f632b">elastic_net_predict</a> (text tbl_model, text tbl_new_source, text col_id, text tbl_predict)</td></tr>
+<tr class="memdesc:a3578608204ac9b2d3442ff42977f632b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prediction and put the result in a table can be used together with General-CV.  <a href="#a3578608204ac9b2d3442ff42977f632b">More...</a><br /></td></tr>
+<tr class="separator:a3578608204ac9b2d3442ff42977f632b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaddbfdfea4207d38ab7e2cd3db876bdc"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="elastic__net_8sql__in.html#aaddbfdfea4207d38ab7e2cd3db876bdc">elastic_net_predict</a> (text regress_family, float8[] coefficients, float8 intercept, float8[] ind_var)</td></tr>
+<tr class="memdesc:aaddbfdfea4207d38ab7e2cd3db876bdc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prediction use learned coefficients for a given example.  <a href="#aaddbfdfea4207d38ab7e2cd3db876bdc">More...</a><br /></td></tr>
+<tr class="separator:aaddbfdfea4207d38ab7e2cd3db876bdc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a96db4ff4ba3ea363fafbf6c036c19fae"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="elastic__net_8sql__in.html#a96db4ff4ba3ea363fafbf6c036c19fae">elastic_net_gaussian_predict</a> (float8[] coefficients, float8 intercept, float8[] ind_var)</td></tr>
+<tr class="memdesc:a96db4ff4ba3ea363fafbf6c036c19fae"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prediction for linear models use learned coefficients for a given example.  <a href="#a96db4ff4ba3ea363fafbf6c036c19fae">More...</a><br /></td></tr>
+<tr class="separator:a96db4ff4ba3ea363fafbf6c036c19fae"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa78cde79f1f2caa7c5b38f933001d793"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="elastic__net_8sql__in.html#aa78cde79f1f2caa7c5b38f933001d793">elastic_net_binomial_predict</a> (float8[] coefficients, float8 intercept, float8[] ind_var)</td></tr>
+<tr class="memdesc:aa78cde79f1f2caa7c5b38f933001d793"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prediction for logistic models use learned coefficients for a given example.  <a href="#aa78cde79f1f2caa7c5b38f933001d793">More...</a><br /></td></tr>
+<tr class="separator:aa78cde79f1f2caa7c5b38f933001d793"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a308718fd5234bc1007b971a639aadf71"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="elastic__net_8sql__in.html#a308718fd5234bc1007b971a639aadf71">elastic_net_binomial_prob</a> (float8[] coefficients, float8 intercept, float8[] ind_var)</td></tr>
+<tr class="memdesc:a308718fd5234bc1007b971a639aadf71"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute the probability of belonging to the True class for a given observation.  <a href="#a308718fd5234bc1007b971a639aadf71">More...</a><br /></td></tr>
+<tr class="separator:a308718fd5234bc1007b971a639aadf71"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a465ca3aeaca43ab1294f82146eb2fc31"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="elastic__net_8sql__in.html#a465ca3aeaca43ab1294f82146eb2fc31">__elastic_net_binomial_loglikelihood</a> (float8[] coefficients, float8 intercept, boolean dep_var, float8[] ind_var)</td></tr>
+<tr class="separator:a465ca3aeaca43ab1294f82146eb2fc31"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad8a31dceade418034918a37c34101c18"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="elastic__net_8sql__in.html#ad8a31dceade418034918a37c34101c18">__gaussian_igd_transition</a> (float8[] state, float8[] ind_var, float8 dep_var, float8[] pre_state, float8 lambda, float8 alpha, integer dimension, float8 stepsize, integer total_rows, float8[] xmean, float8 ymean, float8 step_decay)</td></tr>
+<tr class="separator:ad8a31dceade418034918a37c34101c18"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aba6849a59e2178eb0629d3bfc5abe5da"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="elastic__net_8sql__in.html#aba6849a59e2178eb0629d3bfc5abe5da">__gaussian_igd_merge</a> (float8[] state1, float8[] state2)</td></tr>
+<tr class="separator:aba6849a59e2178eb0629d3bfc5abe5da"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4c5b88fb94d8035e988178a2b67ffa43"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="elastic__net_8sql__in.html#a4c5b88fb94d8035e988178a2b67ffa43">__gaussian_igd_final</a> (float8[] state)</td></tr>
+<tr class="separator:a4c5b88fb94d8035e988178a2b67ffa43"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a493a8cfa6faf0264c7cf9aa80dc9ffb2"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="elastic__net_8sql__in.html#a493a8cfa6faf0264c7cf9aa80dc9ffb2">__gaussian_igd_step</a> (float8[], float8, float8[], float8, float8, integer, float8, integer, float8[], float8, float8)</td></tr>
+<tr class="separator:a493a8cfa6faf0264c7cf9aa80dc9ffb2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abd46990f9fd7d216bc7f9e8115f10408"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="elastic__net_8sql__in.html#abd46990f9fd7d216bc7f9e8115f10408">__gaussian_igd_step_single_seg</a> (float8[], float8, float8[], float8, float8, integer, float8, integer, float8[], float8, float8)</td></tr>
+<tr class="separator:abd46990f9fd7d216bc7f9e8115f10408"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a244ef9698a82bbd2d28cdce326f8e514"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="elastic__net_8sql__in.html#a244ef9698a82bbd2d28cdce326f8e514">__gaussian_igd_state_diff</a> (float8[] state1, float8[] state2)</td></tr>
+<tr class="separator:a244ef9698a82bbd2d28cdce326f8e514"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a407f4a6063a4eb931a39b23f52d675f1"><td class="memItemLeft" align="right" valign="top">__elastic_net_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="elastic__net_8sql__in.html#a407f4a6063a4eb931a39b23f52d675f1">__gaussian_igd_result</a> (float8[] in_state, float8[] feature_sq, float8 threshold, float8 tolerance)</td></tr>
+<tr class="separator:a407f4a6063a4eb931a39b23f52d675f1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a87bf3c26c925cfe8d214cc4f8c784613"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="elastic__net_8sql__in.html#a87bf3c26c925cfe8d214cc4f8c784613">__gaussian_fista_transition</a> (float8[] state, float8[] ind_var, float8 dep_var, float8[] pre_state, float8 lambda, float8 alpha, integer dimension, integer total_rows, float8 max_stepsize, float8 eta, integer use_active_set, integer is_active, integer random_stepsize)</td></tr>
+<tr class="separator:a87bf3c26c925cfe8d214cc4f8c784613"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a35dad39bc1dce3573be2c9cc3f5458b2"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="elastic__net_8sql__in.html#a35dad39bc1dce3573be2c9cc3f5458b2">__gaussian_fista_merge</a> (float8[] state1, float8[] state2)</td></tr>
+<tr class="separator:a35dad39bc1dce3573be2c9cc3f5458b2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9cf4bc6bc719c054cf99436965bbab0c"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="elastic__net_8sql__in.html#a9cf4bc6bc719c054cf99436965bbab0c">__gaussian_fista_final</a> (float8[] state)</td></tr>
+<tr class="separator:a9cf4bc6bc719c054cf99436965bbab0c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4566cf3ca4587153ab7b57fd741582fe"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="elastic__net_8sql__in.html#a4566cf3ca4587153ab7b57fd741582fe">__gaussian_fista_step</a> (float8[], float8, float8[], float8, float8, integer, integer, float8, float8, integer, integer, integer)</td></tr>
+<tr class="separator:a4566cf3ca4587153ab7b57fd741582fe"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab9b58c238fa59cd8b38a07d3cbfef514"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="elastic__net_8sql__in.html#ab9b58c238fa59cd8b38a07d3cbfef514">__gaussian_fista_state_diff</a> (float8[] state1, float8[] state2)</td></tr>
+<tr class="separator:ab9b58c238fa59cd8b38a07d3cbfef514"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9f5ed35bd3467280e7d68604046ccebd"><td class="memItemLeft" align="right" valign="top">__elastic_net_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="elastic__net_8sql__in.html#a9f5ed35bd3467280e7d68604046ccebd">__gaussian_fista_result</a> (float8[] in_state)</td></tr>
+<tr class="separator:a9f5ed35bd3467280e7d68604046ccebd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa0f3feb438f90eef90ddfc9ad4f3e33e"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="elastic__net_8sql__in.html#aa0f3feb438f90eef90ddfc9ad4f3e33e">__binomial_igd_transition</a> (float8[] state, float8[] ind_var, boolean dep_var, float8[] pre_state, float8 lambda, float8 alpha, integer dimension, float8 stepsize, integer total_rows, float8[] xmean, float8 ymean, float8 step_decay)</td></tr>
+<tr class="separator:aa0f3feb438f90eef90ddfc9ad4f3e33e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae4aed277de996eab9023335413fe9e28"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="elastic__net_8sql__in.html#ae4aed277de996eab9023335413fe9e28">__binomial_igd_merge</a> (float8[] state1, float8[] state2)</td></tr>
+<tr class="separator:ae4aed277de996eab9023335413fe9e28"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a39c4af5547dc7f28c189fe5ef8d09ba5"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="elastic__net_8sql__in.html#a39c4af5547dc7f28c189fe5ef8d09ba5">__binomial_igd_final</a> (float8[] state)</td></tr>
+<tr class="separator:a39c4af5547dc7f28c189fe5ef8d09ba5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a791a9701c20c65d1e86a1d5c3462b99d"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="elastic__net_8sql__in.html#a791a9701c20c65d1e86a1d5c3462b99d">__binomial_igd_step</a> (float8[], boolean, float8[], float8, float8, integer, float8, integer, float8[], float8, float8)</td></tr>
+<tr class="separator:a791a9701c20c65d1e86a1d5c3462b99d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac1ec74fff164d85cae14969bb0890e11"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="elastic__net_8sql__in.html#ac1ec74fff164d85cae14969bb0890e11">__binomial_igd_step_single_seg</a> (float8[], boolean, float8[], float8, float8, integer, float8, integer, float8[], float8, float8)</td></tr>
+<tr class="separator:ac1ec74fff164d85cae14969bb0890e11"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2968538b152e7f38e71bcff8e55b768e"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="elastic__net_8sql__in.html#a2968538b152e7f38e71bcff8e55b768e">__binomial_igd_state_diff</a> (float8[] state1, float8[] state2)</td></tr>
+<tr class="separator:a2968538b152e7f38e71bcff8e55b768e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a93bfe398c91709e7d55ed94d18c6ac23"><td class="memItemLeft" align="right" valign="top">__elastic_net_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="elastic__net_8sql__in.html#a93bfe398c91709e7d55ed94d18c6ac23">__binomial_igd_result</a> (float8[] in_state, float8[] feature_sq, float8 threshold, float8 tolerance)</td></tr>
+<tr class="separator:a93bfe398c91709e7d55ed94d18c6ac23"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a43f125953d105e8ad2243f7c722cf753"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="elastic__net_8sql__in.html#a43f125953d105e8ad2243f7c722cf753">__binomial_fista_transition</a> (float8[] state, float8[] ind_var, boolean dep_var, float8[] pre_state, float8 lambda, float8 alpha, integer dimension, integer total_rows, float8 max_stepsize, float8 eta, integer use_active_set, integer is_active, integer random_stepsize)</td></tr>
+<tr class="separator:a43f125953d105e8ad2243f7c722cf753"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2284166bacd4b45fb34d50b2d7aec4d4"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="elastic__net_8sql__in.html#a2284166bacd4b45fb34d50b2d7aec4d4">__binomial_fista_merge</a> (float8[] state1, float8[] state2)</td></tr>
+<tr class="separator:a2284166bacd4b45fb34d50b2d7aec4d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af83bb77c4eb5c9f5750f35d56fd39117"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="elastic__net_8sql__in.html#af83bb77c4eb5c9f5750f35d56fd39117">__binomial_fista_final</a> (float8[] state)</td></tr>
+<tr class="separator:af83bb77c4eb5c9f5750f35d56fd39117"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a69a71f6e1f8fb3f7d8ad8b987bd432db"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="elastic__net_8sql__in.html#a69a71f6e1f8fb3f7d8ad8b987bd432db">__binomial_fista_step</a> (float8[], boolean, float8[], float8, float8, integer, integer, float8, float8, integer, integer, integer)</td></tr>
+<tr class="separator:a69a71f6e1f8fb3f7d8ad8b987bd432db"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aba9d8b5ca783ad4c3d551fd7b2797ade"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="elastic__net_8sql__in.html#aba9d8b5ca783ad4c3d551fd7b2797ade">__binomial_fista_state_diff</a> (float8[] state1, float8[] state2)</td></tr>
+<tr class="separator:aba9d8b5ca783ad4c3d551fd7b2797ade"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1e0cc178e025d8eebb0637d97a02f624"><td class="memItemLeft" align="right" valign="top">__elastic_net_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="elastic__net_8sql__in.html#a1e0cc178e025d8eebb0637d97a02f624">__binomial_fista_result</a> (float8[] in_state)</td></tr>
+<tr class="separator:a1e0cc178e025d8eebb0637d97a02f624"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><dl class="section date"><dt>Date</dt><dd>July 2012</dd></dl>
+<dl class="section see"><dt>See also</dt><dd>For a brief introduction to elastic net, see the module description <a class="el" href="group__grp__elasticnet.html">Elastic Net Regularization</a>. </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="af83bb77c4eb5c9f5750f35d56fd39117"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af83bb77c4eb5c9f5750f35d56fd39117">&#9670;&nbsp;</a></span>__binomial_fista_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __binomial_fista_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a2284166bacd4b45fb34d50b2d7aec4d4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2284166bacd4b45fb34d50b2d7aec4d4">&#9670;&nbsp;</a></span>__binomial_fista_merge()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __binomial_fista_merge </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1e0cc178e025d8eebb0637d97a02f624"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1e0cc178e025d8eebb0637d97a02f624">&#9670;&nbsp;</a></span>__binomial_fista_result()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">__elastic_net_result __binomial_fista_result </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>in_state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aba9d8b5ca783ad4c3d551fd7b2797ade"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aba9d8b5ca783ad4c3d551fd7b2797ade">&#9670;&nbsp;</a></span>__binomial_fista_state_diff()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 __binomial_fista_state_diff </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a69a71f6e1f8fb3f7d8ad8b987bd432db"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a69a71f6e1f8fb3f7d8ad8b987bd432db">&#9670;&nbsp;</a></span>__binomial_fista_step()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] __binomial_fista_step </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a43f125953d105e8ad2243f7c722cf753"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a43f125953d105e8ad2243f7c722cf753">&#9670;&nbsp;</a></span>__binomial_fista_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __binomial_fista_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>ind_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>dep_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>pre_state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>lambda</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>dimension</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>total_rows</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>max_stepsize</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>eta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>use_active_set</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>is_active</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>random_stepsize</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a39c4af5547dc7f28c189fe5ef8d09ba5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a39c4af5547dc7f28c189fe5ef8d09ba5">&#9670;&nbsp;</a></span>__binomial_igd_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __binomial_igd_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae4aed277de996eab9023335413fe9e28"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae4aed277de996eab9023335413fe9e28">&#9670;&nbsp;</a></span>__binomial_igd_merge()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __binomial_igd_merge </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a93bfe398c91709e7d55ed94d18c6ac23"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a93bfe398c91709e7d55ed94d18c6ac23">&#9670;&nbsp;</a></span>__binomial_igd_result()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">__elastic_net_result __binomial_igd_result </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>in_state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>feature_sq</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>threshold</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>tolerance</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a2968538b152e7f38e71bcff8e55b768e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2968538b152e7f38e71bcff8e55b768e">&#9670;&nbsp;</a></span>__binomial_igd_state_diff()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 __binomial_igd_state_diff </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a791a9701c20c65d1e86a1d5c3462b99d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a791a9701c20c65d1e86a1d5c3462b99d">&#9670;&nbsp;</a></span>__binomial_igd_step()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] __binomial_igd_step </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac1ec74fff164d85cae14969bb0890e11"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac1ec74fff164d85cae14969bb0890e11">&#9670;&nbsp;</a></span>__binomial_igd_step_single_seg()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] __binomial_igd_step_single_seg </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa0f3feb438f90eef90ddfc9ad4f3e33e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa0f3feb438f90eef90ddfc9ad4f3e33e">&#9670;&nbsp;</a></span>__binomial_igd_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __binomial_igd_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>ind_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>dep_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>pre_state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>lambda</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>dimension</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>stepsize</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>total_rows</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>xmean</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>ymean</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>step_decay</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a465ca3aeaca43ab1294f82146eb2fc31"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a465ca3aeaca43ab1294f82146eb2fc31">&#9670;&nbsp;</a></span>__elastic_net_binomial_loglikelihood()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 __elastic_net_binomial_loglikelihood </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>coefficients</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>intercept</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>dep_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>ind_var</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a9cf4bc6bc719c054cf99436965bbab0c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9cf4bc6bc719c054cf99436965bbab0c">&#9670;&nbsp;</a></span>__gaussian_fista_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __gaussian_fista_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a35dad39bc1dce3573be2c9cc3f5458b2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a35dad39bc1dce3573be2c9cc3f5458b2">&#9670;&nbsp;</a></span>__gaussian_fista_merge()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __gaussian_fista_merge </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a9f5ed35bd3467280e7d68604046ccebd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9f5ed35bd3467280e7d68604046ccebd">&#9670;&nbsp;</a></span>__gaussian_fista_result()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">__elastic_net_result __gaussian_fista_result </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>in_state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab9b58c238fa59cd8b38a07d3cbfef514"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab9b58c238fa59cd8b38a07d3cbfef514">&#9670;&nbsp;</a></span>__gaussian_fista_state_diff()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 __gaussian_fista_state_diff </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a4566cf3ca4587153ab7b57fd741582fe"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4566cf3ca4587153ab7b57fd741582fe">&#9670;&nbsp;</a></span>__gaussian_fista_step()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] __gaussian_fista_step </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a87bf3c26c925cfe8d214cc4f8c784613"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a87bf3c26c925cfe8d214cc4f8c784613">&#9670;&nbsp;</a></span>__gaussian_fista_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __gaussian_fista_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>ind_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>dep_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>pre_state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>lambda</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>dimension</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>total_rows</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>max_stepsize</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>eta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>use_active_set</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>is_active</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>random_stepsize</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a4c5b88fb94d8035e988178a2b67ffa43"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4c5b88fb94d8035e988178a2b67ffa43">&#9670;&nbsp;</a></span>__gaussian_igd_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __gaussian_igd_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aba6849a59e2178eb0629d3bfc5abe5da"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aba6849a59e2178eb0629d3bfc5abe5da">&#9670;&nbsp;</a></span>__gaussian_igd_merge()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __gaussian_igd_merge </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a407f4a6063a4eb931a39b23f52d675f1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a407f4a6063a4eb931a39b23f52d675f1">&#9670;&nbsp;</a></span>__gaussian_igd_result()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">__elastic_net_result __gaussian_igd_result </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>in_state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>feature_sq</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>threshold</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>tolerance</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a244ef9698a82bbd2d28cdce326f8e514"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a244ef9698a82bbd2d28cdce326f8e514">&#9670;&nbsp;</a></span>__gaussian_igd_state_diff()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 __gaussian_igd_state_diff </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a493a8cfa6faf0264c7cf9aa80dc9ffb2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a493a8cfa6faf0264c7cf9aa80dc9ffb2">&#9670;&nbsp;</a></span>__gaussian_igd_step()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] __gaussian_igd_step </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="abd46990f9fd7d216bc7f9e8115f10408"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abd46990f9fd7d216bc7f9e8115f10408">&#9670;&nbsp;</a></span>__gaussian_igd_step_single_seg()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] __gaussian_igd_step_single_seg </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ad8a31dceade418034918a37c34101c18"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad8a31dceade418034918a37c34101c18">&#9670;&nbsp;</a></span>__gaussian_igd_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __gaussian_igd_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>ind_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>dep_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>pre_state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>lambda</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>dimension</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>stepsize</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>total_rows</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>xmean</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>ymean</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>step_decay</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa78cde79f1f2caa7c5b38f933001d793"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa78cde79f1f2caa7c5b38f933001d793">&#9670;&nbsp;</a></span>elastic_net_binomial_predict()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">boolean elastic_net_binomial_predict </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>coefficients</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>intercept</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>ind_var</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">coefficients</td><td>Logistic fitting coefficients </td></tr>
+    <tr><td class="paramname">intercept</td><td>Logistic fitting intercept </td></tr>
+    <tr><td class="paramname">ind_var</td><td>Features (independent variables)</td></tr>
+  </table>
+  </dd>
+</dl>
+<p>returns a boolean value </p>
+
+</div>
+</div>
+<a id="a308718fd5234bc1007b971a639aadf71"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a308718fd5234bc1007b971a639aadf71">&#9670;&nbsp;</a></span>elastic_net_binomial_prob()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 elastic_net_binomial_prob </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>coefficients</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>intercept</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>ind_var</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">coefficients</td><td>Logistic fitting coefficients </td></tr>
+    <tr><td class="paramname">intercept</td><td>Logistic fitting intercept </td></tr>
+    <tr><td class="paramname">ind_var</td><td>Features (independent variables)</td></tr>
+  </table>
+  </dd>
+</dl>
+<p>returns a double value, which is the probability of this data point being True class </p>
+
+</div>
+</div>
+<a id="a96db4ff4ba3ea363fafbf6c036c19fae"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a96db4ff4ba3ea363fafbf6c036c19fae">&#9670;&nbsp;</a></span>elastic_net_gaussian_predict()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 elastic_net_gaussian_predict </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>coefficients</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>intercept</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>ind_var</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">coefficients</td><td>Linear fitting coefficients </td></tr>
+    <tr><td class="paramname">intercept</td><td>Linear fitting intercept </td></tr>
+    <tr><td class="paramname">ind_var</td><td>Features (independent variables)</td></tr>
+  </table>
+  </dd>
+</dl>
+<p>returns a double value </p>
+
+</div>
+</div>
+<a id="a3578608204ac9b2d3442ff42977f632b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3578608204ac9b2d3442ff42977f632b">&#9670;&nbsp;</a></span>elastic_net_predict() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void elastic_net_predict </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>tbl_model</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>tbl_new_source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>col_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>tbl_predict</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">tbl_model</td><td>The result from elastic_net_train </td></tr>
+    <tr><td class="paramname">tbl_new_source</td><td>Data table </td></tr>
+    <tr><td class="paramname">col_id</td><td>Unique ID associated with each row </td></tr>
+    <tr><td class="paramname">tbl_predict</td><td>Prediction result </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="aaddbfdfea4207d38ab7e2cd3db876bdc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aaddbfdfea4207d38ab7e2cd3db876bdc">&#9670;&nbsp;</a></span>elastic_net_predict() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 elastic_net_predict </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>regress_family</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>coefficients</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>intercept</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>ind_var</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">regress_family</td><td>model family </td></tr>
+    <tr><td class="paramname">coefficients</td><td>The fitting coefficients </td></tr>
+    <tr><td class="paramname">intercept</td><td>The fitting intercept </td></tr>
+    <tr><td class="paramname">ind_var</td><td>Features (independent variables) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>float8</dd></dl>
+<p>Note: Please use function <a class="el" href="elastic__net_8sql__in.html#a96db4ff4ba3ea363fafbf6c036c19fae" title="Prediction for linear models use learned coefficients for a given example. ">elastic_net_gaussian_predict()</a> or <a class="el" href="elastic__net_8sql__in.html#aa78cde79f1f2caa7c5b38f933001d793" title="Prediction for logistic models use learned coefficients for a given example. ">elastic_net_binomial_predict()</a> instead if you could. This may be deprecated in the future, as users are confused between this function and the table function with the same name.</p>
+<p>When regress_family is 'binomial' or 'logistic', this function returns 1 for True and 0 for False </p>
+
+</div>
+</div>
+<a id="a735038a5090c112505c740a90a203e83"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a735038a5090c112505c740a90a203e83">&#9670;&nbsp;</a></span>elastic_net_train() <span class="overload">[1/10]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void elastic_net_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>tbl_source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>tbl_result</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>col_dep_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>col_ind_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>regress_family</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>lambda_value</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>standardize</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>optimizer</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>optimizer_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>excluded</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_iter</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>tolerance</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">tbl_source</td><td>Name of data source table </td></tr>
+    <tr><td class="paramname">tbl_result</td><td>Name of the table to store the results </td></tr>
+    <tr><td class="paramname">col_ind_var</td><td>Name of independent variable column, independent variable is an array </td></tr>
+    <tr><td class="paramname">col_dep_var</td><td>Name of dependent variable column </td></tr>
+    <tr><td class="paramname">regress_family</td><td>Response type (gaussian or binomial) </td></tr>
+    <tr><td class="paramname">alpha</td><td>The elastic net parameter, [0, 1] </td></tr>
+    <tr><td class="paramname">lambda_value</td><td>The regularization parameter </td></tr>
+    <tr><td class="paramname">standardize</td><td>Whether to normalize the variables (default True) </td></tr>
+    <tr><td class="paramname">grouping_col</td><td>List of columns on which to apply grouping (currently only a placeholder) </td></tr>
+    <tr><td class="paramname">optimizer</td><td>The optimization algorithm, 'fista' or 'igd'. Default is 'fista' </td></tr>
+    <tr><td class="paramname">optimizer_params</td><td>Parameters of the above optimizer, the format is 'arg = value, ...'. Default is NULL </td></tr>
+    <tr><td class="paramname">excluded</td><td>Which columns to exclude? Default is NULL (applicable only if col_ind_var is set as * or a column of array, column names as 'col1, col2, ...' if col_ind_var is '*'; element indices as '1,2,3, ...' if col_ind_var is a column of array) </td></tr>
+    <tr><td class="paramname">max_iter</td><td>Maximum number of iterations to run the algorithm (default value of 10000) </td></tr>
+    <tr><td class="paramname">tolerance</td><td>Iteration stopping criteria. Default is 1e-6 </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a148de1ad5e1e60b9df3d3af590c06579"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a148de1ad5e1e60b9df3d3af590c06579">&#9670;&nbsp;</a></span>elastic_net_train() <span class="overload">[2/10]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void elastic_net_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>tbl_source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>tbl_result</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>col_ind_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>col_dep_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>regress_family</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>lambda_value</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>standardization</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_columns</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>optimizer</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>optimizer_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>excluded</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_iter</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a63c8ed415005cc446a59bdc47a09791d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a63c8ed415005cc446a59bdc47a09791d">&#9670;&nbsp;</a></span>elastic_net_train() <span class="overload">[3/10]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void elastic_net_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>tbl_source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>tbl_result</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>col_ind_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>col_dep_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>regress_family</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>lambda_value</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>standardization</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_columns</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>optimizer</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>optimizer_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>excluded</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac26504e7ac55190207758356d821a01a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac26504e7ac55190207758356d821a01a">&#9670;&nbsp;</a></span>elastic_net_train() <span class="overload">[4/10]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void elastic_net_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>tbl_source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>tbl_result</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>col_ind_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>col_dep_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>regress_family</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>lambda_value</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>standardization</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_columns</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>optimizer</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>optimizer_params</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7e698f9a0c7a1aa43f4bf9e169dc8b35"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7e698f9a0c7a1aa43f4bf9e169dc8b35">&#9670;&nbsp;</a></span>elastic_net_train() <span class="overload">[5/10]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void elastic_net_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>tbl_source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>tbl_result</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>col_ind_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>col_dep_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>regress_family</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>lambda_value</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>standardization</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_columns</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>optimizer</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab54d8862d3ad299aceca4ac2c914437e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab54d8862d3ad299aceca4ac2c914437e">&#9670;&nbsp;</a></span>elastic_net_train() <span class="overload">[6/10]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void elastic_net_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>tbl_source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>tbl_result</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>col_ind_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>col_dep_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>regress_family</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>lambda_value</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>standardization</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_columns</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a0351b7ed17eccb6db2c0bd61b421458b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0351b7ed17eccb6db2c0bd61b421458b">&#9670;&nbsp;</a></span>elastic_net_train() <span class="overload">[7/10]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void elastic_net_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>tbl_source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>tbl_result</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>col_ind_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>col_dep_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>regress_family</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>lambda_value</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>standardization</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1a57491bc6b156d575bb93edb986aaa5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1a57491bc6b156d575bb93edb986aaa5">&#9670;&nbsp;</a></span>elastic_net_train() <span class="overload">[8/10]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void elastic_net_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>tbl_source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>tbl_result</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>col_ind_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>col_dep_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>regress_family</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>lambda_value</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="add7e2592fb0bd9f2eb1d8b176c80b5d0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#add7e2592fb0bd9f2eb1d8b176c80b5d0">&#9670;&nbsp;</a></span>elastic_net_train() <span class="overload">[9/10]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text elastic_net_train </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a6f6ee3def49b5e9a1d3375fe41427dc0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6f6ee3def49b5e9a1d3375fe41427dc0">&#9670;&nbsp;</a></span>elastic_net_train() <span class="overload">[10/10]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text elastic_net_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>family_or_optimizer</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">family_or_optimizer</td><td>Response type, 'gaussian' or 'binomial', or optimizer type </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_d662e943e8adcb86abe4b822d2348c9e.html">elastic_net</a></li><li class="navelem"><a class="el" href="elastic__net_8sql__in.html">elastic_net.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:56 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/encode__categorical_8sql__in.html b/docs/rc/encode__categorical_8sql__in.html
new file mode 100644
index 0000000..a306615
--- /dev/null
+++ b/docs/rc/encode__categorical_8sql__in.html
@@ -0,0 +1,742 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: encode_categorical.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('encode__categorical_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">encode_categorical.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>SQL functions for encoding categorical variables to numerical values.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ab508855c762d04c77e993e30d655995e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="encode__categorical_8sql__in.html#ab508855c762d04c77e993e30d655995e">encode_categorical_variables</a> (varchar source_table, varchar output_table, varchar categorical_cols, varchar categorical_cols_to_exclude, varchar row_id, varchar top, varchar value_to_drop, boolean encode_null, varchar output_type, boolean output_dictionary, varchar distributed_by)</td></tr>
+<tr class="memdesc:ab508855c762d04c77e993e30d655995e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Encode categorical columns using either one-hot encoding or dummy coding.  <a href="#ab508855c762d04c77e993e30d655995e">More...</a><br /></td></tr>
+<tr class="separator:ab508855c762d04c77e993e30d655995e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6685fbb11c4f68a25c232a6035c752c4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="encode__categorical_8sql__in.html#a6685fbb11c4f68a25c232a6035c752c4">encode_categorical_variables</a> (varchar source_table, varchar output_table, varchar categorical_cols, varchar categorical_cols_to_exclude, varchar row_id, varchar top, varchar value_to_drop, boolean encode_null, varchar output_type, boolean output_dictionary)</td></tr>
+<tr class="separator:a6685fbb11c4f68a25c232a6035c752c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5ea1ae2dc53c77b047cd1dc186739bc7"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="encode__categorical_8sql__in.html#a5ea1ae2dc53c77b047cd1dc186739bc7">encode_categorical_variables</a> (varchar source_table, varchar output_table, varchar categorical_cols, varchar categorical_cols_to_exclude, varchar row_id, varchar top, varchar value_to_drop, boolean encode_null, varchar output_type)</td></tr>
+<tr class="separator:a5ea1ae2dc53c77b047cd1dc186739bc7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a63e256d5d0aefbcf29d74669276bdf20"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="encode__categorical_8sql__in.html#a63e256d5d0aefbcf29d74669276bdf20">encode_categorical_variables</a> (varchar source_table, varchar output_table, varchar categorical_cols, varchar categorical_cols_to_exclude, varchar row_id, varchar top, varchar value_to_drop, boolean encode_null)</td></tr>
+<tr class="separator:a63e256d5d0aefbcf29d74669276bdf20"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab26bb9de11a426fd1cff17dce24ba98d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="encode__categorical_8sql__in.html#ab26bb9de11a426fd1cff17dce24ba98d">encode_categorical_variables</a> (varchar source_table, varchar output_table, varchar categorical_cols, varchar categorical_cols_to_exclude, varchar row_id, varchar top, varchar value_to_drop)</td></tr>
+<tr class="separator:ab26bb9de11a426fd1cff17dce24ba98d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4a5f5774f0b6aad31427a47064565c82"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="encode__categorical_8sql__in.html#a4a5f5774f0b6aad31427a47064565c82">encode_categorical_variables</a> (varchar source_table, varchar output_table, varchar categorical_cols, varchar categorical_cols_to_exclude, varchar row_id, varchar top)</td></tr>
+<tr class="separator:a4a5f5774f0b6aad31427a47064565c82"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a31753df1ea819930436ab2d10b996599"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="encode__categorical_8sql__in.html#a31753df1ea819930436ab2d10b996599">encode_categorical_variables</a> (varchar source_table, varchar output_table, varchar categorical_cols, varchar categorical_cols_to_exclude, varchar row_id)</td></tr>
+<tr class="separator:a31753df1ea819930436ab2d10b996599"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1f60121c4552a526513561281bf371f3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="encode__categorical_8sql__in.html#a1f60121c4552a526513561281bf371f3">encode_categorical_variables</a> (varchar source_table, varchar output_table, varchar categorical_cols, varchar categorical_cols_to_exclude)</td></tr>
+<tr class="separator:a1f60121c4552a526513561281bf371f3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6a92afff73eb09fa0b7db489bd009235"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="encode__categorical_8sql__in.html#a6a92afff73eb09fa0b7db489bd009235">encode_categorical_variables</a> (varchar source_table, varchar output_table, varchar categorical_cols)</td></tr>
+<tr class="separator:a6a92afff73eb09fa0b7db489bd009235"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab5c44316240bb072316870e43ff2d715"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="encode__categorical_8sql__in.html#ab5c44316240bb072316870e43ff2d715">encode_categorical_variables</a> (varchar message)</td></tr>
+<tr class="separator:ab5c44316240bb072316870e43ff2d715"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8fea222d67f69c73255dbdee2746bed5"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="encode__categorical_8sql__in.html#a8fea222d67f69c73255dbdee2746bed5">encode_categorical_variables</a> ()</td></tr>
+<tr class="separator:a8fea222d67f69c73255dbdee2746bed5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>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</p>
+<p><a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a></p>
+<p>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.</p>
+<dl class="section date"><dt>Date</dt><dd>Dec 2016</dd></dl>
+<dl class="section see"><dt>See also</dt><dd>Encodes categorical variables to numerical values </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="ab508855c762d04c77e993e30d655995e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab508855c762d04c77e993e30d655995e">&#9670;&nbsp;</a></span>encode_categorical_variables() <span class="overload">[1/11]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void encode_categorical_variables </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>categorical_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>categorical_cols_to_exclude</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>top</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>value_to_drop</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>encode_null</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_type</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>output_dictionary</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>distributed_by</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">source_table</td><td>Name of table containing categorical variable </td></tr>
+    <tr><td class="paramname">output_table</td><td>Name of table to output dummy variables </td></tr>
+    <tr><td class="paramname">categorical_cols</td><td>Comma-separated list of column names to dummy code (can be '*') </td></tr>
+    <tr><td class="paramname">categorical_cols_to_exclude</td><td>Comma-separated list of column names to exclude (if categorical_cols = '*') </td></tr>
+    <tr><td class="paramname">row_id</td><td>Columns from source table to index output table </td></tr>
+    <tr><td class="paramname">top</td><td>Parameter to include only top values of a categorical variable </td></tr>
+    <tr><td class="paramname">value_to_drop</td><td>Parameter to set reference column in dummy coding </td></tr>
+    <tr><td class="paramname">encode_null</td><td>Boolean to determine the behavior for rows with NULL value </td></tr>
+    <tr><td class="paramname">output_type</td><td>Parameter to set output data type: 'column', 'array' or 'svec' </td></tr>
+    <tr><td class="paramname">output_dictionary</td><td>Boolean to simplify column naming and with a separate mapping table to actual values </td></tr>
+    <tr><td class="paramname">distributed_by</td><td>Comma-separated list of column names to use for distribution of output</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Void </dd></dl>
+
+</div>
+</div>
+<a id="a6685fbb11c4f68a25c232a6035c752c4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6685fbb11c4f68a25c232a6035c752c4">&#9670;&nbsp;</a></span>encode_categorical_variables() <span class="overload">[2/11]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void encode_categorical_variables </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>categorical_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>categorical_cols_to_exclude</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>top</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>value_to_drop</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>encode_null</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_type</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>output_dictionary</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5ea1ae2dc53c77b047cd1dc186739bc7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5ea1ae2dc53c77b047cd1dc186739bc7">&#9670;&nbsp;</a></span>encode_categorical_variables() <span class="overload">[3/11]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void encode_categorical_variables </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>categorical_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>categorical_cols_to_exclude</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>top</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>value_to_drop</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>encode_null</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_type</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a63e256d5d0aefbcf29d74669276bdf20"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a63e256d5d0aefbcf29d74669276bdf20">&#9670;&nbsp;</a></span>encode_categorical_variables() <span class="overload">[4/11]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void encode_categorical_variables </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>categorical_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>categorical_cols_to_exclude</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>top</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>value_to_drop</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>encode_null</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab26bb9de11a426fd1cff17dce24ba98d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab26bb9de11a426fd1cff17dce24ba98d">&#9670;&nbsp;</a></span>encode_categorical_variables() <span class="overload">[5/11]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void encode_categorical_variables </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>categorical_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>categorical_cols_to_exclude</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>top</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>value_to_drop</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a4a5f5774f0b6aad31427a47064565c82"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4a5f5774f0b6aad31427a47064565c82">&#9670;&nbsp;</a></span>encode_categorical_variables() <span class="overload">[6/11]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void encode_categorical_variables </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>categorical_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>categorical_cols_to_exclude</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>top</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a31753df1ea819930436ab2d10b996599"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a31753df1ea819930436ab2d10b996599">&#9670;&nbsp;</a></span>encode_categorical_variables() <span class="overload">[7/11]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void encode_categorical_variables </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>categorical_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>categorical_cols_to_exclude</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>row_id</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1f60121c4552a526513561281bf371f3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1f60121c4552a526513561281bf371f3">&#9670;&nbsp;</a></span>encode_categorical_variables() <span class="overload">[8/11]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void encode_categorical_variables </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>categorical_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>categorical_cols_to_exclude</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a6a92afff73eb09fa0b7db489bd009235"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6a92afff73eb09fa0b7db489bd009235">&#9670;&nbsp;</a></span>encode_categorical_variables() <span class="overload">[9/11]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void encode_categorical_variables </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>categorical_cols</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab5c44316240bb072316870e43ff2d715"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab5c44316240bb072316870e43ff2d715">&#9670;&nbsp;</a></span>encode_categorical_variables() <span class="overload">[10/11]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar encode_categorical_variables </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8fea222d67f69c73255dbdee2746bed5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8fea222d67f69c73255dbdee2746bed5">&#9670;&nbsp;</a></span>encode_categorical_variables() <span class="overload">[11/11]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar encode_categorical_variables </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_8d53e1c0026e7e34b4cd68f8b91426d6.html">utilities</a></li><li class="navelem"><a class="el" href="encode__categorical_8sql__in.html">encode_categorical.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:56 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/folderclosed.png b/docs/rc/folderclosed.png
new file mode 100644
index 0000000..bb8ab35
--- /dev/null
+++ b/docs/rc/folderclosed.png
Binary files differ
diff --git a/docs/rc/folderopen.png b/docs/rc/folderopen.png
new file mode 100644
index 0000000..d6c7f67
--- /dev/null
+++ b/docs/rc/folderopen.png
Binary files differ
diff --git a/docs/rc/glm_8sql__in.html b/docs/rc/glm_8sql__in.html
new file mode 100644
index 0000000..f59bc8a
--- /dev/null
+++ b/docs/rc/glm_8sql__in.html
@@ -0,0 +1,1919 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: glm.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('glm_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">glm.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>SQL functions for GLM (Poisson)  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ace09cf40c436db6c065ef2606781cc93"><td class="memItemLeft" align="right" valign="top">bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="glm_8sql__in.html#ace09cf40c436db6c065ef2606781cc93">__glm_merge_states</a> (bytea8 state1, bytea8 state2)</td></tr>
+<tr class="separator:ace09cf40c436db6c065ef2606781cc93"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7e32144641562f061625c4d211912a01"><td class="memItemLeft" align="right" valign="top">bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="glm_8sql__in.html#a7e32144641562f061625c4d211912a01">__glm_final</a> (bytea8 state)</td></tr>
+<tr class="separator:a7e32144641562f061625c4d211912a01"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a48ccc5647dc8d0b6211ae3445d7d533e"><td class="memItemLeft" align="right" valign="top">bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="glm_8sql__in.html#a48ccc5647dc8d0b6211ae3445d7d533e">__glm_poisson_log_transition</a> (bytea8, float8, float8[], bytea8)</td></tr>
+<tr class="separator:a48ccc5647dc8d0b6211ae3445d7d533e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a504fa161f5dde9155dd962456597a5c6"><td class="memItemLeft" align="right" valign="top">aggregate bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="glm_8sql__in.html#a504fa161f5dde9155dd962456597a5c6">__glm_poisson_log_agg</a> (float8 y, float8[] x, bytea8 previous_state)</td></tr>
+<tr class="separator:a504fa161f5dde9155dd962456597a5c6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a041ee0e1e80ea5cf07f39b8c13f8accb"><td class="memItemLeft" align="right" valign="top">bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="glm_8sql__in.html#a041ee0e1e80ea5cf07f39b8c13f8accb">__glm_poisson_identity_transition</a> (bytea8, float8, float8[], bytea8)</td></tr>
+<tr class="separator:a041ee0e1e80ea5cf07f39b8c13f8accb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aff5070482e51bf7ce3704febfa8f3b58"><td class="memItemLeft" align="right" valign="top">aggregate bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="glm_8sql__in.html#aff5070482e51bf7ce3704febfa8f3b58">__glm_poisson_identity_agg</a> (float8 y, float8[] x, bytea8 previous_state)</td></tr>
+<tr class="separator:aff5070482e51bf7ce3704febfa8f3b58"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa6b93dd92e49df7e3202db15d9e50c6c"><td class="memItemLeft" align="right" valign="top">bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="glm_8sql__in.html#aa6b93dd92e49df7e3202db15d9e50c6c">__glm_poisson_sqrt_transition</a> (bytea8, float8, float8[], bytea8)</td></tr>
+<tr class="separator:aa6b93dd92e49df7e3202db15d9e50c6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a051510c3a79c019749fd3f04db41c438"><td class="memItemLeft" align="right" valign="top">aggregate bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="glm_8sql__in.html#a051510c3a79c019749fd3f04db41c438">__glm_poisson_sqrt_agg</a> (float8 y, float8[] x, bytea8 previous_state)</td></tr>
+<tr class="separator:a051510c3a79c019749fd3f04db41c438"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa181df655a47f71f0ce0388ce112282b"><td class="memItemLeft" align="right" valign="top">bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="glm_8sql__in.html#aa181df655a47f71f0ce0388ce112282b">__glm_gaussian_identity_transition</a> (bytea8, float8, float8[], bytea8)</td></tr>
+<tr class="separator:aa181df655a47f71f0ce0388ce112282b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a33377c70ad934fdcea9206a9ef2ccf1c"><td class="memItemLeft" align="right" valign="top">aggregate bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="glm_8sql__in.html#a33377c70ad934fdcea9206a9ef2ccf1c">__glm_gaussian_identity_agg</a> (float8 y, float8[] x, bytea8 previous_state)</td></tr>
+<tr class="separator:a33377c70ad934fdcea9206a9ef2ccf1c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6aa9b05a9e74e3bf5e9121ec58bffe4f"><td class="memItemLeft" align="right" valign="top">bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="glm_8sql__in.html#a6aa9b05a9e74e3bf5e9121ec58bffe4f">__glm_gaussian_log_transition</a> (bytea8, float8, float8[], bytea8)</td></tr>
+<tr class="separator:a6aa9b05a9e74e3bf5e9121ec58bffe4f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1dfe1977eb90fb628cbc0b722bb29403"><td class="memItemLeft" align="right" valign="top">aggregate bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="glm_8sql__in.html#a1dfe1977eb90fb628cbc0b722bb29403">__glm_gaussian_log_agg</a> (float8 y, float8[] x, bytea8 previous_state)</td></tr>
+<tr class="separator:a1dfe1977eb90fb628cbc0b722bb29403"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a695c305abf7d59e224b7c7a05364b534"><td class="memItemLeft" align="right" valign="top">bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="glm_8sql__in.html#a695c305abf7d59e224b7c7a05364b534">__glm_gaussian_inverse_transition</a> (bytea8, float8, float8[], bytea8)</td></tr>
+<tr class="separator:a695c305abf7d59e224b7c7a05364b534"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0328f64e64a88cc82c09b4b05ee4256a"><td class="memItemLeft" align="right" valign="top">aggregate bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="glm_8sql__in.html#a0328f64e64a88cc82c09b4b05ee4256a">__glm_gaussian_inverse_agg</a> (float8 y, float8[] x, bytea8 previous_state)</td></tr>
+<tr class="separator:a0328f64e64a88cc82c09b4b05ee4256a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a904065c82d2d2275413377a28115853f"><td class="memItemLeft" align="right" valign="top">bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="glm_8sql__in.html#a904065c82d2d2275413377a28115853f">__glm_gamma_log_transition</a> (bytea8, float8, float8[], bytea8)</td></tr>
+<tr class="separator:a904065c82d2d2275413377a28115853f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7d6f215077e51c95a193880edf67f574"><td class="memItemLeft" align="right" valign="top">aggregate bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="glm_8sql__in.html#a7d6f215077e51c95a193880edf67f574">__glm_gamma_log_agg</a> (float8 y, float8[] x, bytea8 previous_state)</td></tr>
+<tr class="separator:a7d6f215077e51c95a193880edf67f574"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaa373b5854856d2b4761cc843ab5011a"><td class="memItemLeft" align="right" valign="top">bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="glm_8sql__in.html#aaa373b5854856d2b4761cc843ab5011a">__glm_gamma_inverse_transition</a> (bytea8, float8, float8[], bytea8)</td></tr>
+<tr class="separator:aaa373b5854856d2b4761cc843ab5011a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2177e1ed1d58d238528a407fce6d52fb"><td class="memItemLeft" align="right" valign="top">aggregate bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="glm_8sql__in.html#a2177e1ed1d58d238528a407fce6d52fb">__glm_gamma_inverse_agg</a> (float8 y, float8[] x, bytea8 previous_state)</td></tr>
+<tr class="separator:a2177e1ed1d58d238528a407fce6d52fb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a64e74bd1f88b9e42db89a00edac0373a"><td class="memItemLeft" align="right" valign="top">bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="glm_8sql__in.html#a64e74bd1f88b9e42db89a00edac0373a">__glm_gamma_identity_transition</a> (bytea8, float8, float8[], bytea8)</td></tr>
+<tr class="separator:a64e74bd1f88b9e42db89a00edac0373a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adfbdbca61a165aff83ef53356da73a3e"><td class="memItemLeft" align="right" valign="top">aggregate bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="glm_8sql__in.html#adfbdbca61a165aff83ef53356da73a3e">__glm_gamma_identity_agg</a> (float8 y, float8[] x, bytea8 previous_state)</td></tr>
+<tr class="separator:adfbdbca61a165aff83ef53356da73a3e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0680d2db1d03d34a39c3e2e7100a52e7"><td class="memItemLeft" align="right" valign="top">bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="glm_8sql__in.html#a0680d2db1d03d34a39c3e2e7100a52e7">__glm_binomial_probit_transition</a> (bytea8, float8, float8[], bytea8)</td></tr>
+<tr class="separator:a0680d2db1d03d34a39c3e2e7100a52e7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae3bdd5b1c8b963488bc9633807295630"><td class="memItemLeft" align="right" valign="top">aggregate bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="glm_8sql__in.html#ae3bdd5b1c8b963488bc9633807295630">__glm_binomial_probit_agg</a> (float8 y, float8[] x, bytea8 previous_state)</td></tr>
+<tr class="separator:ae3bdd5b1c8b963488bc9633807295630"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4a613bda22c8686a28afb47260ccabc9"><td class="memItemLeft" align="right" valign="top">bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="glm_8sql__in.html#a4a613bda22c8686a28afb47260ccabc9">__glm_inverse_gaussian_identity_transition</a> (bytea8, float8, float8[], bytea8)</td></tr>
+<tr class="separator:a4a613bda22c8686a28afb47260ccabc9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afd34074de9267aff541ff3207907cc3a"><td class="memItemLeft" align="right" valign="top">bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="glm_8sql__in.html#afd34074de9267aff541ff3207907cc3a">__glm_binomial_logit_transition</a> (bytea8, float8, float8[], bytea8)</td></tr>
+<tr class="separator:afd34074de9267aff541ff3207907cc3a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6e5d4b66896ec8b10d0aff46d4de50ce"><td class="memItemLeft" align="right" valign="top">aggregate bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="glm_8sql__in.html#a6e5d4b66896ec8b10d0aff46d4de50ce">__glm_binomial_logit_agg</a> (float8 y, float8[] x, bytea8 previous_state)</td></tr>
+<tr class="separator:a6e5d4b66896ec8b10d0aff46d4de50ce"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0fb8358e0b92c9d9883eaea281a1ba5f"><td class="memItemLeft" align="right" valign="top">__glm_result_type&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="glm_8sql__in.html#a0fb8358e0b92c9d9883eaea281a1ba5f">__glm_result_z_stats</a> (bytea8 state)</td></tr>
+<tr class="separator:a0fb8358e0b92c9d9883eaea281a1ba5f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a63f861e73f6ffe5f4a92e4d3bd75cc84"><td class="memItemLeft" align="right" valign="top">aggregate bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="glm_8sql__in.html#a63f861e73f6ffe5f4a92e4d3bd75cc84">__glm_inverse_gaussian_identity_agg</a> (float8 y, float8[] x, bytea8 previous_state)</td></tr>
+<tr class="separator:a63f861e73f6ffe5f4a92e4d3bd75cc84"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3f4c78c4c52b01251307f24e077e92ff"><td class="memItemLeft" align="right" valign="top">bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="glm_8sql__in.html#a3f4c78c4c52b01251307f24e077e92ff">__glm_inverse_gaussian_log_transition</a> (bytea8, float8, float8[], bytea8)</td></tr>
+<tr class="separator:a3f4c78c4c52b01251307f24e077e92ff"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a68be2c4fabab9720636435dcebed5c10"><td class="memItemLeft" align="right" valign="top">aggregate bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="glm_8sql__in.html#a68be2c4fabab9720636435dcebed5c10">__glm_inverse_gaussian_log_agg</a> (float8 y, float8[] x, bytea8 previous_state)</td></tr>
+<tr class="separator:a68be2c4fabab9720636435dcebed5c10"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8473dca909f252c2a7d60368ffbb5977"><td class="memItemLeft" align="right" valign="top">bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="glm_8sql__in.html#a8473dca909f252c2a7d60368ffbb5977">__glm_inverse_gaussian_inverse_transition</a> (bytea8, float8, float8[], bytea8)</td></tr>
+<tr class="separator:a8473dca909f252c2a7d60368ffbb5977"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a60fb24d4a39f4f98666320b8fc11965c"><td class="memItemLeft" align="right" valign="top">aggregate bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="glm_8sql__in.html#a60fb24d4a39f4f98666320b8fc11965c">__glm_inverse_gaussian_inverse_agg</a> (float8 y, float8[] x, bytea8 previous_state)</td></tr>
+<tr class="separator:a60fb24d4a39f4f98666320b8fc11965c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5d4b8d33917e42124a44b30db557940a"><td class="memItemLeft" align="right" valign="top">bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="glm_8sql__in.html#a5d4b8d33917e42124a44b30db557940a">__glm_inverse_gaussian_sqr_inverse_transition</a> (bytea8, float8, float8[], bytea8)</td></tr>
+<tr class="separator:a5d4b8d33917e42124a44b30db557940a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9b884108c457cb5881770176115f2661"><td class="memItemLeft" align="right" valign="top">aggregate bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="glm_8sql__in.html#a9b884108c457cb5881770176115f2661">__glm_inverse_gaussian_sqr_inverse_agg</a> (float8 y, float8[] x, bytea8 previous_state)</td></tr>
+<tr class="separator:a9b884108c457cb5881770176115f2661"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3b7f6999ae949831f33e355ec28b1f79"><td class="memItemLeft" align="right" valign="top">__glm_result_type&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="glm_8sql__in.html#a3b7f6999ae949831f33e355ec28b1f79">__glm_result_t_stats</a> (bytea8 state)</td></tr>
+<tr class="separator:a3b7f6999ae949831f33e355ec28b1f79"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7e84e1d4351a72ea9ecc61db175891ea"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="glm_8sql__in.html#a7e84e1d4351a72ea9ecc61db175891ea">__glm_loglik_diff</a> (bytea8 state1, bytea8 state2)</td></tr>
+<tr class="separator:a7e84e1d4351a72ea9ecc61db175891ea"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3f8eb219013e05675626acb8cf4612cc"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="glm_8sql__in.html#a3f8eb219013e05675626acb8cf4612cc">glm</a> (varchar source_table, varchar model_table, varchar dependent_varname, varchar independent_varname, varchar family_params, varchar grouping_col, varchar optim_params, boolean verbose)</td></tr>
+<tr class="separator:a3f8eb219013e05675626acb8cf4612cc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a79c8b3660f49977fd3537de1db2e60ba"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="glm_8sql__in.html#a79c8b3660f49977fd3537de1db2e60ba">glm</a> (varchar source_table, varchar model_table, varchar dependent_varname, varchar independent_varname, varchar family_params, varchar grouping_col, varchar optim_params)</td></tr>
+<tr class="separator:a79c8b3660f49977fd3537de1db2e60ba"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a98f75815c048dd6ec06842f00ef08f2a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="glm_8sql__in.html#a98f75815c048dd6ec06842f00ef08f2a">glm</a> (varchar source_table, varchar model_table, varchar dependent_varname, varchar independent_varname, varchar family_params, varchar grouping_col)</td></tr>
+<tr class="separator:a98f75815c048dd6ec06842f00ef08f2a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4938524efbef7684ce8a8e2646f126ef"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="glm_8sql__in.html#a4938524efbef7684ce8a8e2646f126ef">glm</a> (varchar source_table, varchar model_table, varchar dependent_varname, varchar independent_varname, varchar family_params)</td></tr>
+<tr class="separator:a4938524efbef7684ce8a8e2646f126ef"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5887e1ae0feabbbfc93e67ab4447f4bd"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="glm_8sql__in.html#a5887e1ae0feabbbfc93e67ab4447f4bd">glm</a> (text message)</td></tr>
+<tr class="separator:a5887e1ae0feabbbfc93e67ab4447f4bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac70223628f2b8fc5e86e295f9d6512ae"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="glm_8sql__in.html#ac70223628f2b8fc5e86e295f9d6512ae">glm</a> ()</td></tr>
+<tr class="separator:ac70223628f2b8fc5e86e295f9d6512ae"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a93d7d8b202654b86917bf9e997d0ad6f"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="glm_8sql__in.html#a93d7d8b202654b86917bf9e997d0ad6f">glm_predict</a> (float8[] coef, float8[] col_ind_var, text link)</td></tr>
+<tr class="memdesc:a93d7d8b202654b86917bf9e997d0ad6f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Predict the estimated mean value for the response variable given a specific predictor variable value in a generalized linear model.  <a href="#a93d7d8b202654b86917bf9e997d0ad6f">More...</a><br /></td></tr>
+<tr class="separator:a93d7d8b202654b86917bf9e997d0ad6f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac645a2cc2aa22eac90dee923593eb72d"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="glm_8sql__in.html#ac645a2cc2aa22eac90dee923593eb72d">glm_predict_binomial</a> (float8[] coef, float8[] col_ind_var, text link)</td></tr>
+<tr class="memdesc:ac645a2cc2aa22eac90dee923593eb72d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Predict the output category for the response variable given a specific predictor variable value in a generalized linear model.  <a href="#ac645a2cc2aa22eac90dee923593eb72d">More...</a><br /></td></tr>
+<tr class="separator:ac645a2cc2aa22eac90dee923593eb72d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a941d49196e573048852def804c5ce4c4"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="glm_8sql__in.html#a941d49196e573048852def804c5ce4c4">glm_predict_poisson</a> (float8[] coef, float8[] col_ind_var, text link)</td></tr>
+<tr class="memdesc:a941d49196e573048852def804c5ce4c4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Predict the estimated count for the response variable given a specific predictor variable value in a generalized linear model.  <a href="#a941d49196e573048852def804c5ce4c4">More...</a><br /></td></tr>
+<tr class="separator:a941d49196e573048852def804c5ce4c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:add7c22acc8eaaa3eace7089eadc5f367"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="glm_8sql__in.html#add7c22acc8eaaa3eace7089eadc5f367">glm_predict</a> (text message)</td></tr>
+<tr class="separator:add7c22acc8eaaa3eace7089eadc5f367"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa42b3ee4e9c39132154dfa81f96ed4ff"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="glm_8sql__in.html#aa42b3ee4e9c39132154dfa81f96ed4ff">glm_predict</a> ()</td></tr>
+<tr class="separator:aa42b3ee4e9c39132154dfa81f96ed4ff"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aeb1962c5b1bdd12ae3111bc93fa2967e"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="glm_8sql__in.html#aeb1962c5b1bdd12ae3111bc93fa2967e">glm_predict_poisson</a> (text message)</td></tr>
+<tr class="separator:aeb1962c5b1bdd12ae3111bc93fa2967e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9a468186034a936c3997cad22b03cafe"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="glm_8sql__in.html#a9a468186034a936c3997cad22b03cafe">glm_predict_binomial</a> (text message)</td></tr>
+<tr class="separator:a9a468186034a936c3997cad22b03cafe"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><dl class="section date"><dt>Date</dt><dd>June 2014</dd></dl>
+<dl class="section see"><dt>See also</dt><dd>For a brief introduction to GLM (Poisson), see the module description grp_poisson. </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="a6e5d4b66896ec8b10d0aff46d4de50ce"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6e5d4b66896ec8b10d0aff46d4de50ce">&#9670;&nbsp;</a></span>__glm_binomial_logit_agg()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate bytea8 __glm_binomial_logit_agg </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>previous_state</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="afd34074de9267aff541ff3207907cc3a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afd34074de9267aff541ff3207907cc3a">&#9670;&nbsp;</a></span>__glm_binomial_logit_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea8 __glm_binomial_logit_transition </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae3bdd5b1c8b963488bc9633807295630"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae3bdd5b1c8b963488bc9633807295630">&#9670;&nbsp;</a></span>__glm_binomial_probit_agg()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate bytea8 __glm_binomial_probit_agg </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>previous_state</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a0680d2db1d03d34a39c3e2e7100a52e7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0680d2db1d03d34a39c3e2e7100a52e7">&#9670;&nbsp;</a></span>__glm_binomial_probit_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea8 __glm_binomial_probit_transition </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7e32144641562f061625c4d211912a01"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7e32144641562f061625c4d211912a01">&#9670;&nbsp;</a></span>__glm_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea8 __glm_final </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="adfbdbca61a165aff83ef53356da73a3e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adfbdbca61a165aff83ef53356da73a3e">&#9670;&nbsp;</a></span>__glm_gamma_identity_agg()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate bytea8 __glm_gamma_identity_agg </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>previous_state</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a64e74bd1f88b9e42db89a00edac0373a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a64e74bd1f88b9e42db89a00edac0373a">&#9670;&nbsp;</a></span>__glm_gamma_identity_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea8 __glm_gamma_identity_transition </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a2177e1ed1d58d238528a407fce6d52fb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2177e1ed1d58d238528a407fce6d52fb">&#9670;&nbsp;</a></span>__glm_gamma_inverse_agg()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate bytea8 __glm_gamma_inverse_agg </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>previous_state</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aaa373b5854856d2b4761cc843ab5011a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aaa373b5854856d2b4761cc843ab5011a">&#9670;&nbsp;</a></span>__glm_gamma_inverse_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea8 __glm_gamma_inverse_transition </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7d6f215077e51c95a193880edf67f574"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7d6f215077e51c95a193880edf67f574">&#9670;&nbsp;</a></span>__glm_gamma_log_agg()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate bytea8 __glm_gamma_log_agg </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>previous_state</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a904065c82d2d2275413377a28115853f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a904065c82d2d2275413377a28115853f">&#9670;&nbsp;</a></span>__glm_gamma_log_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea8 __glm_gamma_log_transition </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a33377c70ad934fdcea9206a9ef2ccf1c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a33377c70ad934fdcea9206a9ef2ccf1c">&#9670;&nbsp;</a></span>__glm_gaussian_identity_agg()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate bytea8 __glm_gaussian_identity_agg </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>previous_state</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa181df655a47f71f0ce0388ce112282b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa181df655a47f71f0ce0388ce112282b">&#9670;&nbsp;</a></span>__glm_gaussian_identity_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea8 __glm_gaussian_identity_transition </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a0328f64e64a88cc82c09b4b05ee4256a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0328f64e64a88cc82c09b4b05ee4256a">&#9670;&nbsp;</a></span>__glm_gaussian_inverse_agg()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate bytea8 __glm_gaussian_inverse_agg </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>previous_state</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a695c305abf7d59e224b7c7a05364b534"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a695c305abf7d59e224b7c7a05364b534">&#9670;&nbsp;</a></span>__glm_gaussian_inverse_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea8 __glm_gaussian_inverse_transition </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1dfe1977eb90fb628cbc0b722bb29403"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1dfe1977eb90fb628cbc0b722bb29403">&#9670;&nbsp;</a></span>__glm_gaussian_log_agg()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate bytea8 __glm_gaussian_log_agg </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>previous_state</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a6aa9b05a9e74e3bf5e9121ec58bffe4f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6aa9b05a9e74e3bf5e9121ec58bffe4f">&#9670;&nbsp;</a></span>__glm_gaussian_log_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea8 __glm_gaussian_log_transition </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a63f861e73f6ffe5f4a92e4d3bd75cc84"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a63f861e73f6ffe5f4a92e4d3bd75cc84">&#9670;&nbsp;</a></span>__glm_inverse_gaussian_identity_agg()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate bytea8 __glm_inverse_gaussian_identity_agg </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>previous_state</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a4a613bda22c8686a28afb47260ccabc9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4a613bda22c8686a28afb47260ccabc9">&#9670;&nbsp;</a></span>__glm_inverse_gaussian_identity_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea8 __glm_inverse_gaussian_identity_transition </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a60fb24d4a39f4f98666320b8fc11965c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a60fb24d4a39f4f98666320b8fc11965c">&#9670;&nbsp;</a></span>__glm_inverse_gaussian_inverse_agg()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate bytea8 __glm_inverse_gaussian_inverse_agg </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>previous_state</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8473dca909f252c2a7d60368ffbb5977"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8473dca909f252c2a7d60368ffbb5977">&#9670;&nbsp;</a></span>__glm_inverse_gaussian_inverse_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea8 __glm_inverse_gaussian_inverse_transition </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a68be2c4fabab9720636435dcebed5c10"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a68be2c4fabab9720636435dcebed5c10">&#9670;&nbsp;</a></span>__glm_inverse_gaussian_log_agg()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate bytea8 __glm_inverse_gaussian_log_agg </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>previous_state</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a3f4c78c4c52b01251307f24e077e92ff"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3f4c78c4c52b01251307f24e077e92ff">&#9670;&nbsp;</a></span>__glm_inverse_gaussian_log_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea8 __glm_inverse_gaussian_log_transition </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a9b884108c457cb5881770176115f2661"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9b884108c457cb5881770176115f2661">&#9670;&nbsp;</a></span>__glm_inverse_gaussian_sqr_inverse_agg()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate bytea8 __glm_inverse_gaussian_sqr_inverse_agg </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>previous_state</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5d4b8d33917e42124a44b30db557940a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5d4b8d33917e42124a44b30db557940a">&#9670;&nbsp;</a></span>__glm_inverse_gaussian_sqr_inverse_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea8 __glm_inverse_gaussian_sqr_inverse_transition </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7e84e1d4351a72ea9ecc61db175891ea"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7e84e1d4351a72ea9ecc61db175891ea">&#9670;&nbsp;</a></span>__glm_loglik_diff()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 __glm_loglik_diff </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ace09cf40c436db6c065ef2606781cc93"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ace09cf40c436db6c065ef2606781cc93">&#9670;&nbsp;</a></span>__glm_merge_states()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea8 __glm_merge_states </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aff5070482e51bf7ce3704febfa8f3b58"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aff5070482e51bf7ce3704febfa8f3b58">&#9670;&nbsp;</a></span>__glm_poisson_identity_agg()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate bytea8 __glm_poisson_identity_agg </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>previous_state</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a041ee0e1e80ea5cf07f39b8c13f8accb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a041ee0e1e80ea5cf07f39b8c13f8accb">&#9670;&nbsp;</a></span>__glm_poisson_identity_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea8 __glm_poisson_identity_transition </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a504fa161f5dde9155dd962456597a5c6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a504fa161f5dde9155dd962456597a5c6">&#9670;&nbsp;</a></span>__glm_poisson_log_agg()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate bytea8 __glm_poisson_log_agg </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>previous_state</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a48ccc5647dc8d0b6211ae3445d7d533e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a48ccc5647dc8d0b6211ae3445d7d533e">&#9670;&nbsp;</a></span>__glm_poisson_log_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea8 __glm_poisson_log_transition </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a051510c3a79c019749fd3f04db41c438"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a051510c3a79c019749fd3f04db41c438">&#9670;&nbsp;</a></span>__glm_poisson_sqrt_agg()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate bytea8 __glm_poisson_sqrt_agg </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>previous_state</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa6b93dd92e49df7e3202db15d9e50c6c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa6b93dd92e49df7e3202db15d9e50c6c">&#9670;&nbsp;</a></span>__glm_poisson_sqrt_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea8 __glm_poisson_sqrt_transition </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a3b7f6999ae949831f33e355ec28b1f79"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3b7f6999ae949831f33e355ec28b1f79">&#9670;&nbsp;</a></span>__glm_result_t_stats()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">__glm_result_type __glm_result_t_stats </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a0fb8358e0b92c9d9883eaea281a1ba5f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0fb8358e0b92c9d9883eaea281a1ba5f">&#9670;&nbsp;</a></span>__glm_result_z_stats()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">__glm_result_type __glm_result_z_stats </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a3f8eb219013e05675626acb8cf4612cc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3f8eb219013e05675626acb8cf4612cc">&#9670;&nbsp;</a></span>glm() <span class="overload">[1/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void glm </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>family_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>optim_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>verbose</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a79c8b3660f49977fd3537de1db2e60ba"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a79c8b3660f49977fd3537de1db2e60ba">&#9670;&nbsp;</a></span>glm() <span class="overload">[2/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void glm </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>family_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>optim_params</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a98f75815c048dd6ec06842f00ef08f2a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a98f75815c048dd6ec06842f00ef08f2a">&#9670;&nbsp;</a></span>glm() <span class="overload">[3/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void glm </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>family_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_col</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a4938524efbef7684ce8a8e2646f126ef"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4938524efbef7684ce8a8e2646f126ef">&#9670;&nbsp;</a></span>glm() <span class="overload">[4/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void glm </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>family_params</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5887e1ae0feabbbfc93e67ab4447f4bd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5887e1ae0feabbbfc93e67ab4447f4bd">&#9670;&nbsp;</a></span>glm() <span class="overload">[5/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text glm </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac70223628f2b8fc5e86e295f9d6512ae"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac70223628f2b8fc5e86e295f9d6512ae">&#9670;&nbsp;</a></span>glm() <span class="overload">[6/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text glm </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a93d7d8b202654b86917bf9e997d0ad6f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a93d7d8b202654b86917bf9e997d0ad6f">&#9670;&nbsp;</a></span>glm_predict() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 glm_predict </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>coef</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>col_ind_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>link</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">coef</td><td>Coefficients obtained by running generalized linear model. </td></tr>
+    <tr><td class="paramname">col_ind</td><td>Predictor variable array </td></tr>
+    <tr><td class="paramname">link</td><td>Link function used in training. Can be one of probit/logit </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Numeric value of the predicted mean</dd></dl>
+<p>This function computes the dot product of the independent variables and the coefficients. This requires the length of the two vectors to be the same. </p>
+
+</div>
+</div>
+<a id="add7c22acc8eaaa3eace7089eadc5f367"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#add7c22acc8eaaa3eace7089eadc5f367">&#9670;&nbsp;</a></span>glm_predict() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text glm_predict </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa42b3ee4e9c39132154dfa81f96ed4ff"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa42b3ee4e9c39132154dfa81f96ed4ff">&#9670;&nbsp;</a></span>glm_predict() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text glm_predict </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac645a2cc2aa22eac90dee923593eb72d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac645a2cc2aa22eac90dee923593eb72d">&#9670;&nbsp;</a></span>glm_predict_binomial() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">boolean glm_predict_binomial </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>coef</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>col_ind_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>link</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">coef</td><td>Coefficients obtained by running generalized linear model. </td></tr>
+    <tr><td class="paramname">col_ind</td><td>Predictor variable array </td></tr>
+    <tr><td class="paramname">link</td><td>Link function used in training. Can be one of probit/logit. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>True/False Boolean value corresponding to output category True if predicted probability &gt;= 0.5, False otherwise</dd></dl>
+<p>This function computes the dot product of the independent variables and the coefficients. This requires the length of the two vectors to be the same. </p>
+
+</div>
+</div>
+<a id="a9a468186034a936c3997cad22b03cafe"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9a468186034a936c3997cad22b03cafe">&#9670;&nbsp;</a></span>glm_predict_binomial() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text glm_predict_binomial </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a941d49196e573048852def804c5ce4c4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a941d49196e573048852def804c5ce4c4">&#9670;&nbsp;</a></span>glm_predict_poisson() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 glm_predict_poisson </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>coef</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>col_ind_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>link</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">coef</td><td>Coefficients obtained by running generalized linear model. </td></tr>
+    <tr><td class="paramname">col_ind</td><td>Predictor variable array </td></tr>
+    <tr><td class="paramname">link</td><td>Link function used in training </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Numeric value of the predicted count, obtained by rounding the predicted mean to the nearest integral value.</dd></dl>
+<p>This function computes the dot product of the independent variables and the coefficients. This requires the length of the two vectors to be the same. </p>
+
+</div>
+</div>
+<a id="aeb1962c5b1bdd12ae3111bc93fa2967e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aeb1962c5b1bdd12ae3111bc93fa2967e">&#9670;&nbsp;</a></span>glm_predict_poisson() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text glm_predict_poisson </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_e502304d8bc7f1ef2456a474c6d92acd.html">glm</a></li><li class="navelem"><a class="el" href="glm_8sql__in.html">glm.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:56 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/graph_legend.html b/docs/rc/graph_legend.html
new file mode 100644
index 0000000..910263a
--- /dev/null
+++ b/docs/rc/graph_legend.html
@@ -0,0 +1,154 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Graph Legend</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('graph_legend.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Graph Legend</div>  </div>
+</div><!--header-->
+<div class="contents">
+<p>This page explains how to interpret the graphs that are generated by doxygen.</p>
+<p>Consider the following example: </p><div class="fragment"><div class="line">/*! Invisible class because of truncation */</div><div class="line">class Invisible { };</div><div class="line"></div><div class="line">/*! Truncated class, inheritance relation is hidden */</div><div class="line">class Truncated : public Invisible { };</div><div class="line"></div><div class="line">/* Class not documented with doxygen comments */</div><div class="line">class Undocumented { };</div><div class="line"></div><div class="line">/*! Class that is inherited using public inheritance */</div><div class="line">class PublicBase : public Truncated { };</div><div class="line"></div><div class="line">/*! A template class */</div><div class="line">template&lt;class T&gt; class Templ { };</div><div class="line"></div><div class="line">/*! Class that is inherited using protected inheritance */</div><div class="line">class ProtectedBase { };</div><div class="line"></div><div class="line">/*! Class that is inherited using private inheritance */</div><div class="line">class PrivateBase { };</div><div class="line"></div><div class="line">/*! Class that is used by the Inherited class */</div><div class="line">class Used { };</div><div class="line"></div><div class="line">/*! Super class that inherits a number of other classes */</div><div class="line">class Inherited : public PublicBase,</div><div class="line">                  protected ProtectedBase,</div><div class="line">                  private PrivateBase,</div><div class="line">                  public Undocumented,</div><div class="line">                  public Templ&lt;int&gt;</div><div class="line">{</div><div class="line">  private:</div><div class="line">    Used *m_usedClass;</div><div class="line">};</div></div><!-- fragment --><p> This will result in the following graph:</p>
+<center><iframe scrolling="no" frameborder="0" src="graph_legend.svg" width="683" height="212"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe> </center><p>The boxes in the above graph have the following meaning: </p>
+<ul>
+<li>
+A filled gray box represents the struct or class for which the graph is generated. </li>
+<li>
+A box with a black border denotes a documented struct or class. </li>
+<li>
+A box with a gray border denotes an undocumented struct or class. </li>
+<li>
+A box with a red border denotes a documented struct or class forwhich not all inheritance/containment relations are shown. A graph is truncated if it does not fit within the specified boundaries. </li>
+</ul>
+<p>The arrows have the following meaning: </p>
+<ul>
+<li>
+A dark blue arrow is used to visualize a public inheritance relation between two classes. </li>
+<li>
+A dark green arrow is used for protected inheritance. </li>
+<li>
+A dark red arrow is used for private inheritance. </li>
+<li>
+A purple dashed arrow is used if a class is contained or used by another class. The arrow is labelled with the variable(s) through which the pointed class or struct is accessible. </li>
+<li>
+A yellow dashed arrow denotes a relation between a template instance and the template class it was instantiated from. The arrow is labelled with the template parameters of the instance. </li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/graph_legend.md5 b/docs/rc/graph_legend.md5
new file mode 100644
index 0000000..a06ed05
--- /dev/null
+++ b/docs/rc/graph_legend.md5
@@ -0,0 +1 @@
+387ff8eb65306fa251338d3c9bd7bfff
\ No newline at end of file
diff --git a/docs/rc/graph_legend.svg b/docs/rc/graph_legend.svg
new file mode 100644
index 0000000..61dad70
--- /dev/null
+++ b/docs/rc/graph_legend.svg
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.38.0 (20140413.2041)
+ -->
+<!-- Title: Graph Legend Pages: 1 -->
+<svg width="512pt" height="159pt"
+ viewBox="0.00 0.00 512.00 159.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 155)">
+<title>Graph Legend</title>
+<polygon fill="white" stroke="none" points="-4,4 -4,-155 508,-155 508,4 -4,4"/>
+<!-- Node9 -->
+<g id="node1" class="node"><title>Node9</title>
+<polygon fill="#bfbfbf" stroke="black" points="293,-19 239,-19 239,-0 293,-0 293,-19"/>
+<text text-anchor="middle" x="266" y="-7" font-family="Helvetica,sans-Serif" font-size="10.00">Inherited</text>
+</g>
+<!-- Node10 -->
+<g id="node2" class="node"><title>Node10</title>
+<g id="a_node2"><a xlink:href="$classPublicBase.html" xlink:title="PublicBase">
+<polygon fill="none" stroke="black" points="66,-85 0,-85 0,-66 66,-66 66,-85"/>
+<text text-anchor="middle" x="33" y="-73" font-family="Helvetica,sans-Serif" font-size="10.00">PublicBase</text>
+</a>
+</g>
+</g>
+<!-- Node10&#45;&gt;Node9 -->
+<g id="edge1" class="edge"><title>Node10&#45;&gt;Node9</title>
+<path fill="none" stroke="midnightblue" d="M74.07,-63.219C121.464,-50.2008 198.076,-29.1573 238.691,-18.0013"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="73.1392,-59.8449 64.4234,-65.8687 74.9933,-66.5949 73.1392,-59.8449"/>
+</g>
+<!-- Node11 -->
+<g id="node3" class="node"><title>Node11</title>
+<g id="a_node3"><a xlink:href="$classTruncated.html" xlink:title="Truncated">
+<polygon fill="none" stroke="red" points="63,-151 3,-151 3,-132 63,-132 63,-151"/>
+<text text-anchor="middle" x="33" y="-139" font-family="Helvetica,sans-Serif" font-size="10.00">Truncated</text>
+</a>
+</g>
+</g>
+<!-- Node11&#45;&gt;Node10 -->
+<g id="edge2" class="edge"><title>Node11&#45;&gt;Node10</title>
+<path fill="none" stroke="midnightblue" d="M33,-121.584C33,-109.625 33,-94.7211 33,-85.4052"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="29.5001,-121.869 33,-131.869 36.5001,-121.869 29.5001,-121.869"/>
+</g>
+<!-- Node13 -->
+<g id="node4" class="node"><title>Node13</title>
+<g id="a_node4"><a xlink:href="$classProtectedBase.html" xlink:title="ProtectedBase">
+<polygon fill="none" stroke="black" points="165.5,-85 84.5,-85 84.5,-66 165.5,-66 165.5,-85"/>
+<text text-anchor="middle" x="125" y="-73" font-family="Helvetica,sans-Serif" font-size="10.00">ProtectedBase</text>
+</a>
+</g>
+</g>
+<!-- Node13&#45;&gt;Node9 -->
+<g id="edge3" class="edge"><title>Node13&#45;&gt;Node9</title>
+<path fill="none" stroke="darkgreen" d="M153.213,-61.6939C181.001,-49.081 222.69,-30.1584 246.835,-19.199"/>
+<polygon fill="darkgreen" stroke="darkgreen" points="151.675,-58.5484 144.016,-65.8687 154.568,-64.9225 151.675,-58.5484"/>
+</g>
+<!-- Node14 -->
+<g id="node5" class="node"><title>Node14</title>
+<g id="a_node5"><a xlink:href="$classPrivateBase.html" xlink:title="PrivateBase">
+<polygon fill="none" stroke="black" points="254,-85 184,-85 184,-66 254,-66 254,-85"/>
+<text text-anchor="middle" x="219" y="-73" font-family="Helvetica,sans-Serif" font-size="10.00">PrivateBase</text>
+</a>
+</g>
+</g>
+<!-- Node14&#45;&gt;Node9 -->
+<g id="edge4" class="edge"><title>Node14&#45;&gt;Node9</title>
+<path fill="none" stroke="#8b1a1a" d="M231.288,-57.7673C240.304,-45.4902 252.196,-29.2973 259.46,-19.4052"/>
+<polygon fill="#8b1a1a" stroke="#8b1a1a" points="228.437,-55.7369 225.339,-65.8687 234.079,-59.8803 228.437,-55.7369"/>
+</g>
+<!-- Node15 -->
+<g id="node6" class="node"><title>Node15</title>
+<polygon fill="none" stroke="#bfbfbf" points="355.5,-85 272.5,-85 272.5,-66 355.5,-66 355.5,-85"/>
+<text text-anchor="middle" x="314" y="-73" font-family="Helvetica,sans-Serif" font-size="10.00">Undocumented</text>
+</g>
+<!-- Node15&#45;&gt;Node9 -->
+<g id="edge5" class="edge"><title>Node15&#45;&gt;Node9</title>
+<path fill="none" stroke="midnightblue" d="M301.45,-57.7673C292.243,-45.4902 280.098,-29.2973 272.679,-19.4052"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="298.726,-59.9687 307.527,-65.8687 304.326,-55.7686 298.726,-59.9687"/>
+</g>
+<!-- Node16 -->
+<g id="node7" class="node"><title>Node16</title>
+<g id="a_node7"><a xlink:href="$classTempl.html" xlink:title="Templ&lt; int &gt;">
+<polygon fill="none" stroke="black" points="446,-85 374,-85 374,-66 446,-66 446,-85"/>
+<text text-anchor="middle" x="410" y="-73" font-family="Helvetica,sans-Serif" font-size="10.00">Templ&lt; int &gt;</text>
+</a>
+</g>
+</g>
+<!-- Node16&#45;&gt;Node9 -->
+<g id="edge6" class="edge"><title>Node16&#45;&gt;Node9</title>
+<path fill="none" stroke="midnightblue" d="M381.186,-61.6939C352.807,-49.081 310.231,-30.1584 285.573,-19.199"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="380.02,-65.0056 390.58,-65.8687 382.863,-58.6089 380.02,-65.0056"/>
+</g>
+<!-- Node17 -->
+<g id="node8" class="node"><title>Node17</title>
+<g id="a_node8"><a xlink:href="$classTempl.html" xlink:title="Templ&lt; T &gt;">
+<polygon fill="none" stroke="black" points="444,-151 376,-151 376,-132 444,-132 444,-151"/>
+<text text-anchor="middle" x="410" y="-139" font-family="Helvetica,sans-Serif" font-size="10.00">Templ&lt; T &gt;</text>
+</a>
+</g>
+</g>
+<!-- Node17&#45;&gt;Node16 -->
+<g id="edge7" class="edge"><title>Node17&#45;&gt;Node16</title>
+<path fill="none" stroke="orange" stroke-dasharray="5,2" d="M410,-121.584C410,-109.625 410,-94.7211 410,-85.4052"/>
+<polygon fill="orange" stroke="orange" points="406.5,-121.869 410,-131.869 413.5,-121.869 406.5,-121.869"/>
+<text text-anchor="middle" x="424.5" y="-106" font-family="Helvetica,sans-Serif" font-size="10.00">&lt; int &gt;</text>
+</g>
+<!-- Node18 -->
+<g id="node9" class="node"><title>Node18</title>
+<g id="a_node9"><a xlink:href="$classUsed.html" xlink:title="Used">
+<polygon fill="none" stroke="black" points="504,-85 464,-85 464,-66 504,-66 504,-85"/>
+<text text-anchor="middle" x="484" y="-73" font-family="Helvetica,sans-Serif" font-size="10.00">Used</text>
+</a>
+</g>
+</g>
+<!-- Node18&#45;&gt;Node9 -->
+<g id="edge8" class="edge"><title>Node18&#45;&gt;Node9</title>
+<path fill="none" stroke="#9a32cd" stroke-dasharray="5,2" d="M454.106,-65.7239C411.551,-53.2306 334.132,-30.502 293.142,-18.4682"/>
+<polygon fill="#9a32cd" stroke="#9a32cd" points="453.301,-69.1351 463.882,-68.5938 455.273,-62.4185 453.301,-69.1351"/>
+<text text-anchor="middle" x="419.5" y="-40" font-family="Helvetica,sans-Serif" font-size="10.00">m_usedClass</text>
+</g>
+</g>
+</svg>
diff --git a/docs/rc/group__grp__apsp.html b/docs/rc/group__grp__apsp.html
new file mode 100644
index 0000000..ec8fd2f
--- /dev/null
+++ b/docs/rc/group__grp__apsp.html
@@ -0,0 +1,395 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: All Pairs Shortest Path</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__apsp.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">All Pairs Shortest Path<div class="ingroups"><a class="el" href="group__grp__graph.html">Graph</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li>
+<a href="#apsp">APSP</a> </li>
+<li>
+<a href="#notes">Notes</a> </li>
+<li>
+<a href="#examples">Examples</a> </li>
+<li>
+<a href="#literature">Literature</a> </li>
+</ul>
+</div><p>The all pairs shortest paths (APSP) algorithm finds the length (summed weights) of the shortest paths between all pairs of vertices, such that the sum of the weights of the path edges is minimized.</p>
+<dl class="section warning"><dt>Warning</dt><dd>APSP is an expensive algorithm for run-time because it finds the shortest path between all nodes in the graph. It is recommended that you start with a small graph to get a sense of run-time for your use case, then increase size carefully from there. The worst case run-time for this implementation is O(V^2 * E) where V is the number of vertices and E is the number of edges. In practice, run-time will be generally be much less than this, but it depends on the graph. On a Greenplum cluster, the edge table should be distributed by the source vertex id column for better performance.</dd></dl>
+<p><a class="anchor" id="apsp"></a></p><dl class="section user"><dt>APSP</dt><dd><pre class="syntax">
+graph_apsp( vertex_table,
+            vertex_id,
+            edge_table,
+            edge_args,
+            out_table,
+            grouping_cols
+          )
+</pre></dd></dl>
+<p><b>Arguments</b> </p><dl class="arglist">
+<dt>vertex_table </dt>
+<dd><p class="startdd">TEXT. Name of the table containing the vertex data for the graph. Must contain the column specified in the 'vertex_id' parameter below.</p>
+<p class="enddd"></p>
+</dd>
+<dt>vertex_id </dt>
+<dd><p class="startdd">TEXT, default = 'id'. Name of the column in 'vertex_table' containing vertex ids. The vertex ids are of type BIGINT with no duplicates. They do not need to be contiguous.</p>
+<p class="enddd"></p>
+</dd>
+<dt>edge_table </dt>
+<dd><p class="startdd">TEXT. Name of the table containing the edge data. The edge table must contain columns for source vertex, destination vertex and edge weight. Column naming convention is described below in the 'edge_args' parameter.</p>
+<p class="enddd"></p>
+</dd>
+<dt>edge_args </dt>
+<dd><p class="startdd">TEXT. A comma-delimited string containing multiple named arguments of the form "name=value". The following parameters are supported for this string argument:</p><ul>
+<li>src (BIGINT): Name of the column containing the source vertex ids in the edge table. Default column name is 'src'.</li>
+<li>dest (BIGINT): Name of the column containing the destination vertex ids in the edge table. Default column name is 'dest'.</li>
+<li>weight (FLOAT8): Name of the column containing the edge weights in the edge table. Default column name is 'weight'.</li>
+</ul>
+<p class="enddd"></p>
+</dd>
+<dt>out_table </dt>
+<dd><p class="startdd">TEXT. Name of the table to store the result of APSP. It contains a row for every vertex of every group and have the following columns (in addition to the grouping columns):</p><ul>
+<li>source_vertex: The id for the source vertex. Will use the input edge column 'src' for column naming.</li>
+<li>dest_vertex: The id for the destination vertex. Will use the input edge column 'dest' for column naming.</li>
+<li>weight: The total weight of the shortest path from the source vertex to the destination vertex. Will use the input parameter 'weight' for column naming.</li>
+<li>parent: The parent of the destination vertex in the shortest path from source. Parent will equal dest_vertex if there are no intermediate vertices. Will use 'parent' for column naming.</li>
+</ul>
+<p>A summary table named &lt;out_table&gt;_summary is also created. This is an internal table that keeps a record of the input parameters and is used by the path retrieval function described below. </p>
+<p class="enddd"></p>
+</dd>
+<dt>grouping_cols (optional) </dt>
+<dd>TEXT, default = NULL. List of columns used to group the input into discrete subgraphs. These columns must exist in the edge table. When this value is null, no grouping is used and a single APSP result is generated.  </dd>
+</dl>
+<dl class="section user"><dt>Path Retrieval</dt><dd></dd></dl>
+<p>The path retrieval function returns the shortest path from the source vertex to a specified desination vertex.</p>
+<pre class="syntax">
+graph_apsp_get_path( apsp_table,
+                     source_vertex,
+                     dest_vertex,
+                     path_table
+                    )
+</pre><p><b>Arguments</b> </p><dl class="arglist">
+<dt>apsp_table </dt>
+<dd><p class="startdd">TEXT. Name of the table that contains the APSP output.</p>
+<p class="enddd"></p>
+</dd>
+<dt>source_vertex </dt>
+<dd><p class="startdd">BIGINT. The vertex that will be the source of the desired path.</p>
+<p class="enddd"></p>
+</dd>
+<dt>dest_vertex </dt>
+<dd><p class="startdd">BIGINT. The vertex that will be the destination of the desired path.</p>
+<p class="enddd"></p>
+</dd>
+<dt>path_table </dt>
+<dd><p class="startdd">TEXT. Name of the output table that contains the path. It contains a row for every group and has the following columns:</p><ul>
+<li>grouping_cols: The grouping columns given in the creation of the APSP table. If there are no grouping columns, these columns will not exist and the table will have a single row.</li>
+<li>path (ARRAY): The shortest path from the source vertex to the destination vertex. </li>
+</ul>
+<p class="enddd"></p>
+</dd>
+</dl>
+<p><a class="anchor" id="notes"></a></p><dl class="section user"><dt>Notes</dt><dd></dd></dl>
+<p>Graphs with negative edges are supported but graphs with negative cycles are not.</p>
+<p>The implementation is analogous to a matrix multiplication procedure. Please refer to the MADlib design document and references [1] and [2] for more details.</p>
+<p>Also see the Grail project [3] for more background on graph analytics processing in relational databases.</p>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<ol type="1">
+<li>Create vertex and edge tables to represent the graph: <pre class="syntax">
+DROP TABLE IF EXISTS vertex, edge;
+CREATE TABLE vertex(
+        id INTEGER
+        );
+CREATE TABLE edge(
+        src INTEGER,
+        dest INTEGER,
+        weight FLOAT8
+        );
+INSERT INTO vertex VALUES
+(0),
+(1),
+(2),
+(3),
+(4),
+(5),
+(6),
+(7);
+INSERT INTO edge VALUES
+(0, 1, 1.0),
+(0, 2, 1.0),
+(0, 4, 10.0),
+(1, 2, 2.0),
+(1, 3, 10.0),
+(2, 3, 1.0),
+(2, 5, 1.0),
+(2, 6, 3.0),
+(3, 0, 1.0),
+(4, 0, -2.0),
+(5, 6, 1.0),
+(6, 7, 1.0);
+</pre></li>
+<li>Calculate the shortest paths: <pre class="syntax">
+DROP TABLE IF EXISTS out, out_summary;
+SELECT madlib.graph_apsp(
+                         'vertex',      -- Vertex table
+                         NULL,          -- Vertix id column (NULL means use default naming)
+                         'edge',        -- Edge table
+                         NULL,          -- Edge arguments (NULL means use default naming)
+                         'out');        -- Output table of shortest paths
+SELECT * FROM out ORDER BY src,dest;
+</pre> <pre class="result">
+ src | dest |  weight  | parent
+-----+------+----------+--------
+   0 |    0 |        0 |      0
+   0 |    1 |        1 |      1
+   0 |    2 |        1 |      2
+   0 |    3 |        2 |      2
+   0 |    4 |       10 |      4
+   0 |    5 |        2 |      2
+   0 |    6 |        3 |      5
+   0 |    7 |        4 |      6
+   1 |    0 |        4 |      3
+   1 |    1 |        0 |      1
+   1 |    2 |        2 |      2
+   1 |    3 |        3 |      2
+   1 |    4 |       14 |      0
+   1 |    5 |        3 |      2
+   1 |    6 |        4 |      5
+   1 |    7 |        5 |      6
+(showing only 16 of 64 rows)
+</pre></li>
+<li>Get the shortest path from vertex 0 to vertex 5: <pre class="syntax">
+DROP TABLE IF EXISTS out_path;
+SELECT madlib.graph_apsp_get_path('out',0,5,'out_path');
+SELECT * FROM out_path;
+</pre> <pre class="result">
+  path
+---------
+ {0,2,5}
+</pre></li>
+<li>Now let's do a similar example except using different column names in the tables (i.e., not the defaults). Create the vertex and edge tables: <pre class="syntax">
+DROP TABLE IF EXISTS vertex_alt, edge_alt;
+CREATE TABLE vertex_alt AS SELECT id AS v_id FROM vertex;
+CREATE TABLE edge_alt AS SELECT src AS e_src, dest, weight AS e_weight FROM edge;
+</pre></li>
+<li>Calculate the shortest paths: <pre class="syntax">
+DROP TABLE IF EXISTS out_alt, out_alt_summary;
+SELECT madlib.graph_apsp(
+                         'vertex_alt',                  -- Vertex table
+                         'v_id',                        -- Vertex id column
+                         'edge_alt',                    -- Edge table
+                         'src=e_src, weight=e_weight',  -- Edge arguments
+                         'out_alt');                    -- Output table of shortest paths
+SELECT * FROM out_alt ORDER BY e_src, dest;
+</pre> <pre class="result">
+ e_src | dest | e_weight | parent
+-------+------+----------+--------
+     0 |    0 |        0 |      0
+     0 |    1 |        1 |      1
+     0 |    2 |        1 |      2
+     0 |    3 |        2 |      2
+     0 |    4 |       10 |      4
+     0 |    5 |        2 |      2
+     0 |    6 |        3 |      5
+     0 |    7 |        4 |      6
+     1 |    0 |        4 |      3
+     1 |    1 |        0 |      1
+     1 |    2 |        2 |      2
+     1 |    3 |        3 |      2
+     1 |    4 |       14 |      0
+     1 |    5 |        3 |      2
+     1 |    6 |        4 |      5
+     1 |    7 |        5 |      6
+(showing only 16 of 64 rows)
+</pre></li>
+<li>Create a graph with 2 groups and find APSP for each group: <pre class="syntax">
+DROP TABLE IF EXISTS edge_gr;
+CREATE TABLE edge_gr AS
+(
+  SELECT *, 0 AS grp FROM edge
+  UNION
+  SELECT *, 1 AS grp FROM edge WHERE src &lt; 6 AND dest &lt; 6
+);
+INSERT INTO edge_gr VALUES
+(4,5,-20,1);
+</pre></li>
+<li>Find APSP for all groups: <pre class="syntax">
+DROP TABLE IF EXISTS out_gr, out_gr_summary;
+SELECT madlib.graph_apsp(
+                         'vertex',      -- Vertex table
+                         NULL,          -- Vertex id column (NULL means use default naming)
+                         'edge_gr',     -- Edge table
+                         NULL,          -- Edge arguments (NULL means use default naming)
+                         'out_gr',      -- Output table of shortest paths
+                         'grp'          -- Grouping columns
+);
+SELECT * FROM out_gr WHERE src &lt; 2 ORDER BY grp,src,dest;
+</pre> <pre class="result">
+ grp | src | dest | weight | parent
+-----+-----+------+--------+--------
+   0 |   0 |    0 |      0 |      0
+   0 |   0 |    1 |      1 |      1
+   0 |   0 |    2 |      1 |      2
+   0 |   0 |    3 |      2 |      2
+   0 |   0 |    4 |     10 |      4
+   0 |   0 |    5 |      2 |      2
+   0 |   0 |    6 |      4 |      2
+   0 |   0 |    7 |      5 |      6
+   0 |   1 |    0 |      4 |      3
+   0 |   1 |    1 |      0 |      1
+   0 |   1 |    2 |      2 |      2
+   0 |   1 |    3 |      3 |      2
+   0 |   1 |    4 |     14 |      0
+   0 |   1 |    5 |      3 |      2
+   0 |   1 |    6 |      4 |      5
+   0 |   1 |    7 |      5 |      6
+   1 |   0 |    0 |      0 |      0
+   1 |   0 |    1 |      1 |      1
+   1 |   0 |    2 |      1 |      2
+   1 |   0 |    3 |      2 |      2
+   1 |   0 |    4 |     10 |      4
+   1 |   0 |    5 |    -10 |      4
+   1 |   1 |    0 |      4 |      3
+   1 |   1 |    1 |      0 |      1
+   1 |   1 |    2 |      2 |      2
+   1 |   1 |    3 |      3 |      2
+   1 |   1 |    4 |     14 |      0
+   1 |   1 |    5 |     -6 |      4
+(28 rows)
+</pre></li>
+<li>Find the path from vertex 0 to vertex 5 in every group <pre class="syntax">
+DROP TABLE IF EXISTS out_gr_path;
+SELECT madlib.graph_apsp_get_path('out_gr',0,5,'out_gr_path');
+SELECT * FROM out_gr_path ORDER BY grp;
+</pre> <pre class="result">
+ grp |  path
+-----+---------
+   0 | {0,2,5}
+   1 | {0,4,5}
+</pre></li>
+</ol>
+<p><a class="anchor" id="literature"></a></p><dl class="section user"><dt>Literature</dt><dd></dd></dl>
+<p>[1] <a href="http://www.columbia.edu/~cs2035/courses/ieor6614.S11/apsp.pdf">http://www.columbia.edu/~cs2035/courses/ieor6614.S11/apsp.pdf</a></p>
+<p>[2] <a href="http://users.cecs.anu.edu.au/~Alistair.Rendell/Teaching/apac_comp3600/module4/all_pairs_shortest_paths.xhtml">http://users.cecs.anu.edu.au/~Alistair.Rendell/Teaching/apac_comp3600/module4/all_pairs_shortest_paths.xhtml</a></p>
+<p>[3] The case against specialized graph analytics engines, J. Fan, G. Soosai Raj, and J. M. Patel. CIDR 2015. <a href="http://cidrdb.org/cidr2015/Papers/CIDR15_Paper20.pdf">http://cidrdb.org/cidr2015/Papers/CIDR15_Paper20.pdf</a> </p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__arima.html b/docs/rc/group__grp__arima.html
new file mode 100644
index 0000000..e66eb64
--- /dev/null
+++ b/docs/rc/group__grp__arima.html
@@ -0,0 +1,420 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: ARIMA</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__arima.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">ARIMA<div class="ingroups"><a class="el" href="group__grp__tsa.html">Time Series Analysis</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li class="level1">
+<a href="#train">Training Function</a> </li>
+<li class="level1">
+<a href="#forecast">Forecasting Function</a> </li>
+<li class="level1">
+<a href="#examples">Examples</a> </li>
+<li class="level1">
+<a href="#background">Technical Background</a> </li>
+<li class="level1">
+<a href="#literature">Literature</a> </li>
+<li class="level1">
+<a href="#related">Related Topics</a> </li>
+</ul>
+</div><p>Given a time series of data X, the Autoregressive Integrated Moving Average (ARIMA) model is a tool for understanding and, perhaps, predicting future values in the series. The model consists of three parts, an autoregressive (AR) part, a moving average (MA) part, and an integrated (I) part where an initial differencing step can be applied to remove any non-stationarity in the signal. The model is generally referred to as an ARIMA(p, d, q) model where parameters p, d, and q are non-negative integers that refer to the order of the autoregressive, integrated, and moving average parts of the model respectively.</p>
+<p><a class="anchor" id="train"></a></p><dl class="section user"><dt>Training Function</dt><dd></dd></dl>
+<p>The ARIMA training function has the following syntax. </p><pre class="syntax">
+arima_train( input_table,
+       output_table,
+       timestamp_column,
+       timeseries_column,
+       grouping_columns,
+       include_mean,
+       non_seasonal_orders,
+       optimizer_params
+     )
+</pre><p><b>Arguments</b> </p><dl class="arglist">
+<dt>input_table </dt>
+<dd><p class="startdd">TEXT. The name of the table containing time series data.</p>
+<p class="enddd"></p>
+</dd>
+<dt>output_table </dt>
+<dd><p class="startdd">TEXT. The name of the table to store the ARIMA model. Three tables are created, with names based on the value of the <em>output_table</em> argument in the training function:</p>
+<ol type="1">
+<li><em>output_table</em>: Table containing the ARIMA model. Contains the following columns: <table class="output">
+<tr>
+<th>mean </th><td>Model mean (only if 'include_mean' is TRUE)  </td></tr>
+<tr>
+<th>mean_std_error </th><td>Standard errors for mean  </td></tr>
+<tr>
+<th>ar_params </th><td>Auto-regressions parameters of the ARIMA model  </td></tr>
+<tr>
+<th>ar_std_errors </th><td>Standard errors for AR parameters  </td></tr>
+<tr>
+<th>ma_params </th><td>Moving average parameters of the ARIMA model  </td></tr>
+<tr>
+<th>ma_std_errors </th><td>Standard errors for MA parameters  </td></tr>
+</table>
+</li>
+<li><em>output_table</em>_summary: Table containing descriptive statistics of the ARIMA model. Contains the following columns: <table class="output">
+<tr>
+<th>input_table </th><td>Table name with the source data  </td></tr>
+<tr>
+<th>timestamp_col </th><td>Column name in the source table that contains the timestamp index to data  </td></tr>
+<tr>
+<th>timeseries_col </th><td>Column name in the source table that contains the data values  </td></tr>
+<tr>
+<th>non_seasonal_orders </th><td>Orders of the non-seasonal ARIMA model  </td></tr>
+<tr>
+<th>include_mean </th><td>TRUE if intercept was included in ARIMA model  </td></tr>
+<tr>
+<th>residual_variance </th><td>Variance of the residuals  </td></tr>
+<tr>
+<th>log_likelihood </th><td>Log likelihood value (when using MLE)  </td></tr>
+<tr>
+<th>iter_num </th><td>The number of iterations executed  </td></tr>
+<tr>
+<th>exec_time </th><td>Total time taken to train the model  </td></tr>
+</table>
+</li>
+<li><em>output_table</em>_residual: Table containing the residuals for each data point in 'input_table'. Contains the following columns: <table class="output">
+<tr>
+<th>timestamp_col </th><td>Same as the 'timestamp_col' parameter (all indices from source table included except the first <em>d</em> elements, where <em>d</em> is the differencing order value from 'non_seasonal_orders')   </td></tr>
+<tr>
+<th>residual </th><td>Residual value for each data point  </td></tr>
+</table>
+</li>
+</ol>
+<p></p>
+<p class="enddd"></p>
+</dd>
+<dt>timestamp_column </dt>
+<dd><p class="startdd">TEXT. The name of the column containing the timestamp (index) data. This could be a serial index (INTEGER) or date/time value (TIMESTAMP).</p>
+<p class="enddd"></p>
+</dd>
+<dt>timeseries_column </dt>
+<dd><p class="startdd">TEXT. The name of the column containing the time series data. This data is currently restricted to DOUBLE PRECISION.</p>
+<p class="enddd"></p>
+</dd>
+<dt>grouping_columns (optional) </dt>
+<dd><p class="startdd">TEXT, default: NULL. <em>Not currently implemented. Any non-NULL value is ignored.</em></p>
+<p>A comma-separated list of column names used to group the input dataset into discrete groups, training one ARIMA model per group. It is similar to the SQL <code>GROUP BY</code> clause. When this value is null, no grouping is used and a single result model is generated.</p>
+<p class="enddd"></p>
+</dd>
+<dt>include_mean (optional) </dt>
+<dd><p class="startdd">BOOLEAN, default: FALSE. Mean value of the data series is added in the ARIMA model if this variable is True. </p>
+<p class="enddd"></p>
+</dd>
+<dt>non_seasonal_orders (optional) </dt>
+<dd><p class="startdd">INTEGER[], default: 'ARRAY[1,1,1]'. Orders of the ARIMA model. The orders are [p, d, q], where parameters p, d, and q are non-negative integers that refer to the order of the autoregressive, integrated, and moving average parts of the model respectively. </p>
+<p class="enddd"></p>
+</dd>
+<dt>optimizer_params (optional) </dt>
+<dd>TEXT. Comma-separated list of optimizer-specific parameters of the form ‘name=value'. The order of the parameters does not matter. The following parameters are recognized:<ul>
+<li><b>max_iter:</b> Maximum number of iterations to run learning algorithm (Default = 100)</li>
+<li><b>tau:</b> Computes the initial step size for gradient algorithm (Default = 0.001)</li>
+<li><b>e1:</b> Algorithm-specific threshold for convergence (Default = 1e-15)</li>
+<li><b>e2:</b> Algorithm-specific threshold for convergence (Default = 1e-15)</li>
+<li><b>e3:</b> Algorithm-specific threshold for convergence (Default = 1e-15)</li>
+<li><b>hessian_delta:</b> Delta parameter to compute a numerical approximation of the Hessian matrix (Default = 1e-6)  </li>
+</ul>
+</dd>
+</dl>
+<p><a class="anchor" id="forecast"></a></p><dl class="section user"><dt>Forecasting Function</dt><dd></dd></dl>
+<p>The ARIMA forecast function has the following syntax. </p><pre class="syntax">
+arima_forecast( model_table,
+                output_table,
+                steps_ahead
+              )
+</pre><p> <b>Arguments</b> </p><dl class="arglist">
+<dt>model_table </dt>
+<dd><p class="startdd">TEXT. The name of the table containing the ARIMA model trained on the time series dataset.</p>
+<p class="enddd"></p>
+</dd>
+<dt>output_table </dt>
+<dd><p class="startdd">TEXT. The name of the table to store the forecasted values. The output table produced by the forecast function contains the following columns. </p><table class="output">
+<tr>
+<th>group_by_cols </th><td>Grouping column values (if grouping parameter is provided)  </td></tr>
+<tr>
+<th>step_ahead </th><td>Time step for the forecast  </td></tr>
+<tr>
+<th>forecast_value </th><td>Forecast of the current time step  </td></tr>
+</table>
+<p class="enddd"></p>
+</dd>
+<dt>steps_ahead </dt>
+<dd>INTEGER. The number of steps to forecast at the end of the time series. </dd>
+</dl>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd><ol type="1">
+<li>View online help for the ARIMA training function. <pre class="example">
+SELECT madlib.arima_train();
+</pre></li>
+<li>Create an input data set. <pre class="example">
+DROP TABLE IF EXISTS arima_beer;
+CREATE TABLE arima_beer (time_id integer NOT NULL, value double precision NOT NULL );
+COPY arima_beer (time_id, value) FROM stdin WITH DELIMITER '|';
+1  | 93.2
+2  | 96.0
+3  | 95.2
+4  | 77.0
+5  | 70.9
+6  | 64.7
+7  | 70.0
+8  | 77.2
+9  | 79.5
+10 | 100.5
+11 | 100.7
+12 | 107.0
+13 | 95.9
+14 | 82.7
+15 | 83.2
+16 | 80.0
+17 | 80.4
+18 | 67.5
+19 | 75.7
+20 | 71.0
+21 | 89.2
+22 | 101.0
+23 | 105.2
+24 | 114.0
+25 | 96.2
+26 | 84.4
+27 | 91.2
+28 | 81.9
+29 | 80.5
+30 | 70.4
+31 | 74.7
+32 | 75.9
+33 | 86.2
+34 | 98.7
+35 | 100.9
+36 | 113.7
+37 | 89.7
+38 | 84.4
+39 | 87.2
+40 | 85.5
+\.
+</pre></li>
+<li>Train an ARIMA model. <pre class="example">
+-- Train ARIMA model with 'grouping_columns'=NULL, 'include_mean'=TRUE,
+--   and 'non_seasonal_orders'=[1,1,1]
+SELECT madlib.arima_train( 'arima_beer',
+                           'arima_beer_output',
+                           'time_id',
+                           'value',
+                           NULL,
+                           FALSE,
+                           ARRAY[1, 1, 1]
+                         );
+</pre></li>
+<li>Examine the ARIMA model. <pre class="example">
+\x ON
+SELECT * FROM arima_beer_output;
+</pre> Result: <pre class="result">
+-[ RECORD 1 ]-+------------------
+ar_params     | {0.221954769696}
+ar_std_errors | {0.575367782602}
+ma_params     | {-0.140623564576}
+ma_std_errors | {0.533445214346}
+</pre></li>
+<li>View the summary statistics table. <pre class="example">
+SELECT * FROM arima_beer_output_summary;
+</pre> Result: <pre class="result">
+-[ RECORD 1 ]-------+---------------
+input_table         | arima_beer
+timestamp_col       | time_id
+timeseries_col      | value
+non_seasonal_orders | {1,1,1}
+include_mean        | f
+residual_variance   | 100.989970539
+log_likelihood      | -145.331516396
+iter_num            | 28
+exec_time (s)       | 2.75
+</pre></li>
+<li>View the residuals. <pre class="example">
+\x OFF
+SELECT * FROM arima_beer_output_residual;
+</pre> Result: <pre class="result">
+ time_id |      residual
+---------+--------------------
+       2 |                  0
+       4 |   -18.222328834394
+       6 |  -5.49616627282665
+...
+      35 |   1.06298837051437
+      37 |  -25.0886854003757
+      39 |   3.48401666299571
+(40 rows)
+</pre></li>
+<li>Use the ARIMA forecast function to forecast 10 future values. <pre class="example">
+SELECT madlib.arima_forecast( 'arima_beer_output',
+                              'arima_beer_forecast_output',
+                              10
+                            );
+SELECT * FROM arima_beer_forecast_output;
+</pre> Result: <pre class="result">
+ steps_ahead | forecast_value
+-------------+----------------
+           1 |  85.3802343659
+           3 |  85.3477516875
+           5 |  85.3461514635
+           7 |  85.3460726302
+           9 |  85.3460687465
+           2 |  85.3536518121
+           4 |  85.3464421267
+           6 |  85.3460869494
+           8 |  85.3460694519
+          10 |    85.34606859
+(10 rows)
+</pre></li>
+</ol>
+</dd></dl>
+<p><a class="anchor" id="background"></a></p><dl class="section user"><dt>Technical Background</dt><dd>An ARIMA model is an <em>a</em>uto-<em>r</em>egressive <em>i</em>ntegrated <em>m</em>oving <em>a</em>verage model. An ARIMA model is typically expressed in the form <p class="formulaDsp">
+\[ (1 - \phi(B)) Y_t = (1 + \theta(B)) Z_t, \]
+</p>
+</dd></dl>
+<p>where \(B\) is the backshift operator. The time \( t \) is from \( 1 \) to \( N \).</p>
+<p>ARIMA models involve the following variables:</p><ul>
+<li>The values of the time series: \( X_t \).</li>
+<li>Parameters of the model: \( p \), \( q \), and \( d \); \( d \) is the differencing order, \( p \) is the order of the AR operator, and \( q \) is the order of the MA operator.</li>
+<li>The AR operator: \( \phi(B) \).</li>
+<li>The MA operator: \( \theta(B) \).</li>
+<li>The lag difference: \( Y_{t} \), where \( Y_{t} = (1-B)^{d}(X_{t} - \mu) \).</li>
+<li>The mean value: \( \mu \), which is set to be zero for \( d&gt;0 \) and estimated from the data when d=0.</li>
+<li>The error terms: \( Z_t \).</li>
+</ul>
+<p>The auto regression operator models the prediction for the next observation as some linear combination of the previous observations. More formally, an AR operator of order \( p \) is defined as</p>
+<p class="formulaDsp">
+\[ \phi(B) Y_t= \phi_1 Y_{t-1} + \dots + \phi_{p} Y_{t-p} \]
+</p>
+<p>The moving average operator is similar, and it models the prediction for the next observation as a linear combination of the errors in the previous prediction errors. More formally, the MA operator of order \( q \) is defined as</p>
+<p class="formulaDsp">
+\[ \theta(B) Z_t = \theta_{1} Z_{t-1} + \dots + \theta_{q} Z_{t-q}. \]
+</p>
+<p>We estimate the parameters using the Levenberg-Marquardt Algorithm. In mathematics and computing, the Levenberg-Marquardt algorithm (LMA), also known as the damped least-squares (DLS) method, provides a numerical solution to the problem of minimizing a function, generally nonlinear, over a space of parameters of the function.</p>
+<p>Like other numeric minimization algorithms, LMA is an iterative procedure. To start a minimization, the user has to provide an initial guess for the parameter vector, $p$, as well as some tuning parameters \(\tau, \epsilon_1, \epsilon_2, \epsilon_3,\).</p>
+<p><a class="anchor" id="literature"></a></p><dl class="section user"><dt>Literature</dt><dd></dd></dl>
+<p>[1] Rob J Hyndman and George Athanasopoulos: Forecasting: principles and practice, <a href="http://otexts.com/fpp/">http://otexts.com/fpp/</a></p>
+<p>[2] Robert H. Shumway, David S. Stoffer: Time Series Analysis and Its Applications With R Examples, Third edition Springer Texts in Statistics, 2010</p>
+<p>[3] Henri Gavin: The Levenberg-Marquardt method for nonlinear least squares curve-fitting problems, 2011</p>
+<p><a class="anchor" id="related"></a></p><dl class="section user"><dt>Related Topics</dt><dd></dd></dl>
+<p>File <a class="el" href="arima_8sql__in.html" title="Arima function for forecasting of timeseries data. ">arima.sql_in</a> documenting the ARIMA functions </p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:59 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__array.html b/docs/rc/group__grp__array.html
new file mode 100644
index 0000000..89e3d5a
--- /dev/null
+++ b/docs/rc/group__grp__array.html
@@ -0,0 +1,358 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Array Operations</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__array.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Array Operations<div class="ingroups"><a class="el" href="group__grp__datatrans.html">Data Types and Transformations</a> &raquo; <a class="el" href="group__grp__arraysmatrix.html">Arrays and Matrices</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li>
+<a href="#notes">Implementation Notes</a> </li>
+<li>
+<a href="#list">List of Array Operations</a> </li>
+<li>
+<a href="#examples">Examples</a> </li>
+<li>
+<a href="#related">Related Topics</a> </li>
+</ul>
+</div><p>This module provides a set of basic array operations implemented in C and SQL. It is a support module for several machine learning algorithms that require fast array operations.</p>
+<p><a class="anchor" id="notes"></a></p><dl class="section user"><dt>Implementation Notes</dt><dd></dd></dl>
+<p>All functions (except <a class="el" href="array__ops_8sql__in.html#acb57ea4521dcb717f9e3148e0acccc74" title="This function normalizes an array as sum of squares to be 1. ">normalize()</a> and <a class="el" href="array__ops_8sql__in.html#acc295a568878940ffc3e2c9a75990efb" title="This function takes an array as the input and keep only elements that satisfy the operator on specifi...">array_filter()</a>) described in this module work with 2-D arrays.</p>
+<p>These functions support several numeric types:</p><ul>
+<li>SMALLINT</li>
+<li>INTEGER</li>
+<li>BIGINT</li>
+<li>REAL</li>
+<li>DOUBLE PRECISION (FLOAT8)</li>
+<li>NUMERIC (internally casted into FLOAT8, loss of precisions can happen)</li>
+</ul>
+<p>Additionally, <a class="el" href="array__ops_8sql__in.html#af057b589f2a2cb1095caa99feaeb3d70" title="This function takes a 2-D array as the input and unnests it by one level. It returns a set of 1-D arr...">array_unnest_2d_to_1d()</a> supports other data types such as TEXT or VARCHAR.</p>
+<p>Several of the function require NO NULL VALUES, while others omit NULLs and return results. See details in description of individual functions.</p>
+<p><a class="anchor" id="list"></a></p><dl class="section user"><dt>Array Operations</dt><dd><table class="output">
+<tr>
+<th><a class="el" href="array__ops_8sql__in.html#a91c8d3715142927b3967f05a4fbf1575" title="Adds two arrays. It requires that all the values are NON-NULL. Return type is the same as the input t...">array_add()</a></th><td><p class="starttd">Adds two arrays. It requires that all the values are NON-NULL. Return type is the same as the input type.</p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th><a class="el" href="array__ops_8sql__in.html#a26e8508a2bae10a6574cec697a270eea" title="Aggregate, element-wise sum of arrays. It requires that all the values are NON-NULL. Return type is the same as the input type. ">sum()</a></th><td><p class="starttd">Aggregate, sums vector element-wisely. It requires that all the values are NON-NULL. Return type is the same as the input type.</p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th><a class="el" href="array__ops_8sql__in.html#a2875a161a01c7dcdea9a4997b074eefc" title="Subtracts two arrays. It requires that all the values are NON-NULL. Return type is the same as the in...">array_sub()</a></th><td><p class="starttd">Subtracts two arrays. It requires that all the values are NON-NULL. Return type is the same as the input type. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th><a class="el" href="array__ops_8sql__in.html#a652d70c480d484c4a1a92ded384b0dd7" title="Element-wise product of two arrays. It requires that all the values are NON-NULL. Return type is the ...">array_mult()</a></th><td><p class="starttd">Element-wise product of two arrays. It requires that all the values are NON-NULL. Return type is the same as the input type. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th><a class="el" href="array__ops_8sql__in.html#a6cc05e7052495f8b64692faf40219576" title="Element-wise division of two arrays. It requires that all the values are NON-NULL. Return type is the same as the input type. ">array_div()</a></th><td><p class="starttd">Element-wise division of two arrays. It requires that all the values are NON-NULL. Return type is the same as the input type. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th><a class="el" href="array__ops_8sql__in.html#acde10964ed23b7c8da515fb84cb8d5e0" title="Dot-product of two arrays. It requires that all the values are NON-NULL. Return type is the same as t...">array_dot()</a></th><td><p class="starttd">Dot-product of two arrays. It requires that all the values are NON-NULL. Return type is the same as the input type. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th><a class="el" href="array__ops_8sql__in.html#aedf6cb13eb4803bcc12dc4d95ea8ff4e" title="Checks whether one array contains the other. This function returns TRUE if each non-zero element in t...">array_contains()</a></th><td><p class="starttd">Checks whether one array contains the other. This function returns TRUE if each non-zero element in the right array equals to the element with the same index in the left array. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th><a class="el" href="array__ops_8sql__in.html#ae891429cc50705c530f3e5ca15541849" title="This function finds the maximum value in the array. NULLs are ignored. Return type is the same as the...">array_max()</a></th><td><p class="starttd">This function finds the maximum value in the array. NULLs are ignored. Return type is the same as the input type. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th><a class="el" href="array__ops_8sql__in.html#aa415256a9064aecc600dfb5e377fb7b1" title="This function finds the maximum value and corresponding index in the array. NULLs are ignored...">array_max_index()</a></th><td><p class="starttd">This function finds the maximum value and corresponding index in the array. NULLs are ignored. Return type is array in format [max, index], and its element type is the same as the input type. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th><a class="el" href="array__ops_8sql__in.html#a6659bf9d9363eb179fab34f81f8ac59b" title="This function finds the minimum value in the array. NULLs are ignored. Return type is the same as the...">array_min()</a></th><td><p class="starttd">This function finds the minimum value in the array. NULLs are ignored. Return type is the same as the input type. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th><a class="el" href="array__ops_8sql__in.html#a813a4d9ffc1c18b1b3e18f6ecdb2051f" title="This function finds the minimum value and corresponding index in the array. NULLs are ignored...">array_min_index()</a></th><td><p class="starttd">This function finds the minimum value and corresponding index in the array. NULLs are ignored. Return type is array in format [min, index], and its element type is the same as the input type. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th><a class="el" href="array__ops_8sql__in.html#a4c98f20e6a737358806f63318daea5ec" title="This function finds the sum of the values in the array. NULLs are ignored. Return type is the same as...">array_sum()</a></th><td><p class="starttd">This function finds the sum of the values in the array. NULLs are ignored. Return type is the same as the input type. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th><a class="el" href="array__ops_8sql__in.html#a418de59800833aa95f9b7cbd6b12901c" title="This function finds the sum of the values in the array. NULLs are ignored. Return type is always FLOA...">array_sum_big()</a></th><td><p class="starttd">This function finds the sum of the values in the array. NULLs are ignored. Return type is always FLOAT8 regardless of input. This function is meant to replace <a class="el" href="array__ops_8sql__in.html#a4c98f20e6a737358806f63318daea5ec" title="This function finds the sum of the values in the array. NULLs are ignored. Return type is the same as...">array_sum()</a> in cases when a sum may overflow the element type. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th><a class="el" href="array__ops_8sql__in.html#a13c0b0c53e8b0dc4e08c21bb8152ee7d" title="This function finds the sum of abs of the values in the array. NULLs are ignored. Return type is the ...">array_abs_sum()</a></th><td><p class="starttd">This function finds the sum of abs of the values in the array. NULLs are ignored. Return type is the same as the input type. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th><a class="el" href="array__ops_8sql__in.html#ac14e74c10b58f5518cd0e3e56067e5ba" title="This function takes an array as the input and finds absolute value of each element in the array...">array_abs()</a></th><td><p class="starttd">This function takes an array as the input and finds abs of each element in the array, returning the resulting array. It requires that all the values are NON-NULL. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th><a class="el" href="array__ops_8sql__in.html#a407598f9eb70637798b02fd731bfca2c" title="This function finds the mean of the values in the array. NULLs are ignored. ">array_mean()</a></th><td><p class="starttd">This function finds the mean of the values in the array. NULLs are ignored. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th><a class="el" href="array__ops_8sql__in.html#a3b6c2d173a611e6d6b184d825c2b336d" title="This function finds the standard deviation of the values in the array. NULLs are ignored. ">array_stddev()</a></th><td><p class="starttd">This function finds the standard deviation of the values in the array. NULLs are ignored. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th><a class="el" href="array__ops_8sql__in.html#ab066e65a41db78b00b4532996b2a6efc" title="This function creates an array of set size (the argument value) of FLOAT8, initializing the values to...">array_of_float()</a></th><td><p class="starttd">This function creates an array of set size (the argument value) of FLOAT8, initializing the values to 0.0. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th><a class="el" href="array__ops_8sql__in.html#ab7d8550e66d2e0bd54b8f0997d93880c" title="This function creates an array of set size (the argument value) of BIGINT, initializing the values to...">array_of_bigint()</a></th><td><p class="starttd">This function creates an array of set size (the argument value) of BIGINT, initializing the values to 0. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th><a class="el" href="array__ops_8sql__in.html#a065a5323f3b742be47e39ad8b4c90fc2" title="This functions set every values in the array to some desired value (provided as the argument)...">array_fill()</a></th><td><p class="starttd">This functions set every value in the array to some desired value (provided as the argument). </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th><a class="el" href="array__ops_8sql__in.html#acc295a568878940ffc3e2c9a75990efb" title="This function takes an array as the input and keep only elements that satisfy the operator on specifi...">array_filter()</a></th><td><p class="starttd">This function takes an array as the input and keep only elements that satisfy the operator on specified scalar. It requires that the array is 1-D and all the values are NON-NULL. Return type is the same as the input type. By default, this function removes all zeros. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th><a class="el" href="array__ops_8sql__in.html#ae6881cc5c86941b6ffca35d7f3cd5c12" title="This function takes an array as the input and executes element-wise multiplication by the scalar prov...">array_scalar_mult()</a></th><td><p class="starttd">This function takes an array as the input and executes element-wise multiplication by the scalar provided as the second argument, returning the resulting array. It requires that all the values are NON-NULL. Return type is the same as the input type. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th><a class="el" href="array__ops_8sql__in.html#a0b6ffe59b12c3dee076c3059f9ab363f" title="This function takes an array as the input and executes element-wise addition by the scalar provided a...">array_scalar_add()</a></th><td><p class="starttd">This function takes an array as the input and executes element-wise addition of the scalar provided as the second argument, returning the resulting array. It requires that all the values are NON-NULL. Return type is the same as the input type. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th><a class="el" href="array__ops_8sql__in.html#a83451ed0c3ca5a9c62751dba47e45df7" title="This function takes an array as the input and finds square root of each element in the array...">array_sqrt()</a></th><td><p class="starttd">This function takes an array as the input and finds square root of each element in the array, returning the resulting array. It requires that all the values are NON-NULL. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th><a class="el" href="array__ops_8sql__in.html#a761e7ca753a5e1acf26896b37ed8b0bd" title="This function takes an array and a float8 as the input and finds power of each element in the array...">array_pow()</a></th><td><p class="starttd">This function takes an array and a float8 as the input and finds power of each element in the array, returning the resulting array. It requires that all the values are NON-NULL. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th><a class="el" href="array__ops_8sql__in.html#aff60f4091bed6374683f047c8a70ef9a" title="This function takes an array as the input and finds square of each element in the array...">array_square()</a></th><td><p class="starttd">This function takes an array as the input and finds square of each element in the array, returning the resulting array. It requires that all the values are NON-NULL. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th><a class="el" href="array__ops_8sql__in.html#acb57ea4521dcb717f9e3148e0acccc74" title="This function normalizes an array as sum of squares to be 1. ">normalize()</a></th><td><p class="starttd">This function normalizes an array as sum of squares to be 1. It requires that the array is 1-D and all the values are NON-NULL. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th><a class="el" href="array__ops_8sql__in.html#af057b589f2a2cb1095caa99feaeb3d70" title="This function takes a 2-D array as the input and unnests it by one level. It returns a set of 1-D arr...">array_unnest_2d_to_1d()</a></th><td><p class="starttd">This function takes a 2-D array as the input and unnests it by one level. It returns a set of 1-D arrays that correspond to rows of the input array as well as an ID column with values corresponding to row positions occupied by those 1-D arrays within the 2-D array. </p>
+<p class="endtd"></p>
+</td></tr>
+</table>
+</dd></dl>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<ol type="1">
+<li>Create a database table with two integer array columns and add some data. <pre class="example">
+CREATE TABLE array_tbl ( id integer,
+                         array1 integer[],
+                         array2 integer[]
+                       );
+INSERT INTO array_tbl VALUES
+                       ( 1, '{1,2,3,4,5,6,7,8,9}', '{9,8,7,6,5,4,3,2,1}' ),
+                       ( 2, '{1,1,0,1,1,2,3,99,8}','{0,0,0,-5,4,1,1,7,6}' );
+</pre></li>
+<li>Find the minimum, maximum, mean, and standard deviation of the <code>array1</code> column. <pre class="example">
+SELECT id, madlib.array_min(array1), madlib.array_max(array1),
+           madlib.array_min_index(array1), madlib.array_max_index(array1),
+           madlib.array_mean(array1), madlib.array_stddev(array1)
+FROM array_tbl;
+</pre> Result: <pre class="result">
+id | array_min | array_max | array_min_index | array_max_index |    array_mean    |   array_stddev
+----+-----------+-----------+---------------+---------------+------------------+------------------
+  1 |         1 |         9 | {1,1}         | {9,9}         |                5 | 2.73861278752583
+  2 |         0 |        99 | {0,3}         | {99,8}        | 12.8888888888889 | 32.3784050118457(2 rows)
+</pre></li>
+<li>Perform array addition and subtraction. <pre class="example">
+SELECT id, madlib.array_add(array1,array2),
+          madlib.array_sub(array1,array2)
+FROM array_tbl;
+</pre> Result: <pre class="result">
+ id |          array_add           |        array_sub
+&#160;---+------------------------------+-------------------------
+  2 | {1,1,0,-4,5,3,4,106,14}      | {1,1,0,6,-3,1,2,92,2}
+  1 | {10,10,10,10,10,10,10,10,10} | {-8,-6,-4,-2,0,2,4,6,8}
+(2 rows)
+</pre></li>
+<li>Perform element-wise array multiplication and division. The row with <code>id=2</code> is excluded because the divisor array contains zero, which would cause a divide-by-zero error. <pre class="example">
+SELECT id, madlib.array_mult(array1,array2),
+           madlib.array_div(array1,array2)
+FROM array_tbl
+WHERE 0 != ALL(array2);</pre> Result: <pre class="result">
+ id |         array_mult         |      array_div
+&#160;---+----------------------------+---------------------
+  1 | {9,16,21,24,25,24,21,16,9} | {0,0,0,0,1,1,2,4,9}
+(1 row)
+</pre></li>
+<li>Calculate the dot product of the arrays. <pre class="example">
+SELECT id, madlib.array_dot(array1, array2)
+FROM array_tbl;
+</pre> Result: <pre class="result">
+ id | array_dot
+&#160;---+----------
+  2 |       745
+  1 |       165
+(2 rows)
+</pre></li>
+<li>Multiply an array by a scalar 3. <pre class="example">
+SELECT id, madlib.array_scalar_mult(array1,3)
+FROM array_tbl;
+</pre> Result: <pre class="result">
+ id |     array_scalar_mult
+&#160;---+--------------------------
+  1 | {3,6,9,12,15,18,21,24,27}
+  2 | {3,3,0,3,3,6,9,297,24}
+(2 rows)
+</pre></li>
+<li>Construct a nine-element array with each element set to the value 1.3. <pre class="example">
+SELECT madlib.array_fill(madlib.array_of_float(9), 1.3::float);
+</pre> Result: <pre class="result">
+              array_fill
+&#160;--------------------------------------
+ {1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3}
+(1 row)
+</pre></li>
+<li>Unnest a column of 2-D arrays into sets of 1-D arrays. <pre class="example">
+SELECT id, (madlib.array_unnest_2d_to_1d(val)).*
+FROM (
+  SELECT 1::INT AS id, ARRAY[[1.3,2.0,3.2],[10.3,20.0,32.2]]::FLOAT8[][] AS val
+  UNION ALL
+  SELECT 2, ARRAY[[pi(),pi()/2],[2*pi(),pi()],[pi()/4,4*pi()]]::FLOAT8[][]
+) t
+ORDER BY 1,2;
+</pre> Result: <pre class="result">
+ id | unnest_row_id |            unnest_result
+----+---------------+--------------------------------------
+  1 |             1 | {1.3,2,3.2}
+  1 |             2 | {10.3,20,32.2}
+  2 |             1 | {3.14159265358979,1.5707963267949}
+  2 |             2 | {6.28318530717959,3.14159265358979}
+  2 |             3 | {0.785398163397448,12.5663706143592}
+(5 rows)
+</pre> If the function is called without the .* notation then it will return a composite record type with two attributes: the row ID and corresponding unnested array result.</li>
+</ol>
+<p><a class="anchor" id="related"></a></p><dl class="section user"><dt>Related Topics</dt><dd></dd></dl>
+<p>File <a class="el" href="array__ops_8sql__in.html" title="implementation of array operations in SQL ">array_ops.sql_in</a> for list of functions and usage. </p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__arraysmatrix.html b/docs/rc/group__grp__arraysmatrix.html
new file mode 100644
index 0000000..d011273
--- /dev/null
+++ b/docs/rc/group__grp__arraysmatrix.html
@@ -0,0 +1,175 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Arrays and Matrices</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__arraysmatrix.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#groups">Modules</a>  </div>
+  <div class="headertitle">
+<div class="title">Arrays and Matrices<div class="ingroups"><a class="el" href="group__grp__datatrans.html">Data Types and Transformations</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>These modules provide basic mathematical operations to be run on array and matrices.</p>
+<p>For a distributed system, a matrix cannot simply be represented as a 2D array of numbers in memory. <b>We provide two forms of distributed representation of a matrix</b>:</p>
+<ul>
+<li>Dense: The matrix is represented as a distributed collection of 1-D arrays. An example 3x10 matrix would be the below table: <pre>
+ row_id |         row_vec
+--------+-------------------------
+   1    | {9,6,5,8,5,6,6,3,10,8}
+   2    | {8,2,2,6,6,10,2,1,9,9}
+   3    | {3,9,9,9,8,6,3,9,5,6}
+</pre></li>
+<li>Sparse: The matrix is represented using the row and column indices for each non-zero entry of the matrix. Example: <pre>
+ row_id | col_id | value
+--------+--------+-------
+      1 |      1 |     9
+      1 |      5 |     6
+      1 |      6 |     6
+      2 |      1 |     8
+      3 |      1 |     3
+      3 |      2 |     9
+      4 |      7 |     0
+(6 rows)
+</pre> &#160; All matrix operations work with either form of representation.</li>
+</ul>
+<p>In many cases, a matrix function can be <b>decomposed to vector operations applied independently on each row of a matrix (or corresponding rows of two matrices)</b>. We have also provided access to these internal vector operations (<a class="el" href="group__grp__array.html">Array Operations</a>) for greater flexibility. Matrix operations like <em>matrix_add</em> use the corresponding vector operation (<em>array_add</em>) and also include additional validation and formating. Other functions like <em>matrix_mult</em> are complex and use a combination of such vector operations and other SQL operations.</p>
+<p><b>It's important to note</b> that these array functions are only available for the dense format representation of the matrix. In general, the scope of a single array function invocation is limited to only an array (1-dimensional or 2-dimensional) that fits in memory. When such function is executed on a table of arrays, the function is called multiple times - once for each array (or pair of arrays). On contrary, scope of a single matrix function invocation is the complete matrix stored as a distributed table. </p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group__grp__array"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__array.html">Array Operations</a></td></tr>
+<tr class="memdesc:group__grp__array"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provides fast array operations supporting other MADlib modules. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__matrix"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__matrix.html">Matrix Operations</a></td></tr>
+<tr class="memdesc:group__grp__matrix"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provides fast matrix operations supporting other MADlib modules. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__matrix__factorization"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__matrix__factorization.html">Matrix Factorization</a></td></tr>
+<tr class="memdesc:group__grp__matrix__factorization"><td class="mdescLeft">&#160;</td><td class="mdescRight">Linear algebra methods that factorize a matrix into a product of matrices. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__linalg"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__linalg.html">Norms and Distance Functions</a></td></tr>
+<tr class="memdesc:group__grp__linalg"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provides utility functions for basic linear algebra operations. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__svec"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__svec.html">Sparse Vectors</a></td></tr>
+<tr class="memdesc:group__grp__svec"><td class="mdescLeft">&#160;</td><td class="mdescRight">Implements a sparse vector data type that provides compressed storage of vectors that may have many duplicate elements. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__arraysmatrix.js b/docs/rc/group__grp__arraysmatrix.js
new file mode 100644
index 0000000..f112873
--- /dev/null
+++ b/docs/rc/group__grp__arraysmatrix.js
@@ -0,0 +1,8 @@
+var group__grp__arraysmatrix =
+[
+    [ "Array Operations", "group__grp__array.html", null ],
+    [ "Matrix Operations", "group__grp__matrix.html", null ],
+    [ "Matrix Factorization", "group__grp__matrix__factorization.html", "group__grp__matrix__factorization" ],
+    [ "Norms and Distance Functions", "group__grp__linalg.html", null ],
+    [ "Sparse Vectors", "group__grp__svec.html", null ]
+];
\ No newline at end of file
diff --git a/docs/rc/group__grp__assoc__rules.html b/docs/rc/group__grp__assoc__rules.html
new file mode 100644
index 0000000..32b1de9
--- /dev/null
+++ b/docs/rc/group__grp__assoc__rules.html
@@ -0,0 +1,411 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Apriori Algorithm</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__assoc__rules.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Apriori Algorithm<div class="ingroups"><a class="el" href="group__grp__unsupervised.html">Unsupervised Learning</a> &raquo; <a class="el" href="group__grp__association__rules.html">Association Rules</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li>
+<a href="#rules">Rules</a> </li>
+<li>
+<a href="#algorithm">Apriori Algorithm</a> </li>
+<li>
+<a href="#syntax">Function Syntax</a> </li>
+<li>
+<a href="#examples">Examples</a> </li>
+<li>
+<a href="#notes">Notes</a> </li>
+<li>
+<a href="#literature">Literature</a> </li>
+<li>
+<a href="#related">Related Topics</a> </li>
+</ul>
+</div><p>This module implements the association rules data mining technique on a transactional data set. Given the names of a table and the columns, minimum support and confidence values, this function generates all single and multidimensional association rules that meet the minimum thresholds.</p>
+<p>Association rule mining is a widely used technique for discovering relationships between variables in a large data set (e.g., items in a store that are commonly purchased together). The classic market basket analysis example using association rules is the "beer and diapers" rule. According to data mining urban legend, a study of customer purchase behavior in a supermarket found that men often purchased beer and diapers together. After making this discovery, the managers strategically placed beer and diapers closer together on the shelves and saw a dramatic increase in sales. In addition to market basket analysis, association rules are also used in bioinformatics, web analytics, and several other fields.</p>
+<p>This type of data mining algorithm uses transactional data. Every transaction event has a unique identification, and each transaction consists of a set of items (or itemset). Purchases are considered binary (either it was purchased or not), and this implementation does not take into consideration the quantity of each item. For the MADlib association rules function, it is assumed that the data is stored in two columns with one item and transaction id per row. Transactions with multiple items will span multiple rows with one row per item.</p>
+<pre>
+    trans_id | product
+    ---------+---------
+           1 | 1
+           1 | 2
+           1 | 3
+           1 | 4
+           2 | 3
+           2 | 4
+           2 | 5
+           3 | 1
+           3 | 4
+           3 | 6
+    ...
+</pre><p><a class="anchor" id="rules"></a></p><dl class="section user"><dt>Rules</dt><dd></dd></dl>
+<p>Association rules take the form "If X, then Y", where X and Y are non-empty itemsets. X and Y are called the antecedent and consequent, or the left-hand-side and right-hand-side, of the rule respectively. Using our previous example, the association rule may state "If {diapers}, then {beer}" with .2 support and .85 confidence.</p>
+<p>The following metrics are defined for any given itemset "X".</p><ul>
+<li>Count: The number of transactions that contain X</li>
+<li>Support: The ratio of transactions that contain X to all transactions, T <p class="formulaDsp">
+\[ S (X) = \frac{Total X}{Total transactions} \]
+</p>
+</li>
+</ul>
+<p>Given any association rule "If X, then Y", the association rules function will also calculate the following metrics:</p><ul>
+<li>Count: The number of transactions that contain X,Y</li>
+<li>Support: The ratio of transactions that contain X,Y to all transactions, T <p class="formulaDsp">
+\[ S (X \Rightarrow Y) = \frac{Total(X \cup Y)}{Total transactions} \]
+</p>
+</li>
+<li>Confidence: The ratio of transactions that contain \( X,Y \) to transactions that contain \( X \). One could view this metric as the conditional probability of \( Y \) , given \( X \) . \( P(Y|X) \) <p class="formulaDsp">
+\[ C (X \Rightarrow Y) = \frac{s(X \cap Y )}{s(X)} \]
+</p>
+</li>
+<li>Lift: The ratio of observed support of \( X,Y \) to the expected support of \( X,Y \) , assuming \( X \) and \( Y \) are independent. <p class="formulaDsp">
+\[ L (X \Rightarrow Y) = \frac{s(X \cap Y )}{s(X) \cdot s(Y)} \]
+</p>
+</li>
+<li><p class="startli">Conviction: The ratio of expected support of \( X \) occurring without \( Y \) assuming \( X \) and \( \neg Y \) are independent, to the observed support of \( X \) occuring without \( Y \). If conviction is greater than 1, then this metric shows that incorrect predictions ( \( X \Rightarrow Y \) ) occur less often than if these two actions were independent. This metric can be viewed as the ratio that the association rule would be incorrect if the actions were independent (i.e. a conviction of 1.5 indicates that if the variables were independent, this rule would be incorrect 50% more often.)</p>
+<p class="formulaDsp">
+\[ Conv (X \Rightarrow Y) = \frac{1 - S(Y)}{1 - C(X \Rightarrow Y)} \]
+</p>
+</li>
+</ul>
+<p><a class="anchor" id="algorithm"></a></p><dl class="section user"><dt>Apriori Algorithm</dt><dd></dd></dl>
+<p>Although there are many algorithms that generate association rules, the classic algorithm is called Apriori [1] which we have implemented in this module. It is a breadth-first search, as opposed to depth-first searches like Eclat. Frequent itemsets of order \( n \) are generated from sets of order \( n - 1 \). Using the downward closure property, all sets must have frequent subsets. There are two steps in this algorithm; generating frequent itemsets, and using these itemsets to construct the association rules. A simplified version of the algorithm is as follows, and assumes a minimum level of support and confidence is provided:</p>
+<p><em>Initial</em> <em>step</em> </p><ol type="1">
+<li>Generate all itemsets of order 1.</li>
+<li>Eliminate itemsets that have support less than minimum support.</li>
+</ol>
+<p><em>Main</em> <em>algorithm</em> </p><ol type="1">
+<li>For \( n \ge 2 \), generate itemsets of order \( n \) by combining the itemsets of order \( n - 1 \). This is done by doing the union of two itemsets that have identical items except one.</li>
+<li>Eliminate itemsets that have (n-1) order subsets with insufficient support.</li>
+<li>Eliminate itemsets with insufficient support.</li>
+<li>Repeat until itemsets cannot be generated, or maximum itemset size is exceeded.</li>
+</ol>
+<p><em>Association</em> <em>rule</em> <em>generation</em> </p>
+<p>Given a frequent itemset \( A \) generated from the Apriori algorithm, and all subsets \( B \) , we generate rules such that \( B \Rightarrow (A - B) \) meets minimum confidence requirements.</p>
+<dl class="section note"><dt>Note</dt><dd>Beware of combinatorial explosion. The Apriori algorithm can potentially generate a huge number of rules, even for fairly simple data sets, resulting in run times that are unreasonably long. To avoid this, it is recommended to cap the maximum itemset size to a small number to start with, then increase it gradually. Similarly, <em>max_LHS_size</em> and <em>max_RHS_size</em> limit the number of items on the LHS and RHS of the rules and can significantly reduce run times. <em>Support</em> and <em>confidence</em> values are parameters that can also be used to control rule generation.</dd></dl>
+<p><a class="anchor" id="syntax"></a></p><dl class="section user"><dt>Function Syntax</dt><dd>Association rules has the following syntax: <pre class="syntax">
+assoc_rules( support,
+             confidence,
+             tid_col,
+             item_col,
+             input_table,
+             output_schema,
+             verbose,
+             max_itemset_size,
+             max_LHS_size,
+             max_RHS_size
+           );</pre> This generates all association rules that satisfy the specified minimum <em>support</em> and <em>confidence</em>.</dd></dl>
+<p><b>Arguments</b> </p><dl class="arglist">
+<dt>support </dt>
+<dd><p class="startdd">Minimum level of support needed for each itemset to be included in result.</p>
+<p class="enddd"></p>
+</dd>
+<dt>confidence </dt>
+<dd><p class="startdd">Minimum level of confidence needed for each rule to be included in result.</p>
+<p class="enddd"></p>
+</dd>
+<dt>tid_col </dt>
+<dd><p class="startdd">Name of the column storing the transaction ids.</p>
+<p class="enddd"></p>
+</dd>
+<dt>item_col </dt>
+<dd><p class="startdd">Name of the column storing the products.</p>
+<p class="enddd"></p>
+</dd>
+<dt>input_table </dt>
+<dd><p class="startdd">Name of the table containing the input data.</p>
+<p>The input data is expected to be of the following form: </p><pre>{TABLE|VIEW} <em>input_table</em> (
+    <em>trans_id</em> INTEGER,
+    <em>product</em> TEXT
+)</pre><p>The algorithm maps the product names to consecutive integer ids starting at 1. If they are already structured this way, then the ids will not change. </p>
+<p class="enddd"></p>
+</dd>
+<dt>output_schema </dt>
+<dd><p class="startdd">The name of the schema where the final results will be stored. The schema must be created before calling the function. Alternatively, use <code>NULL</code> to output to the current schema.</p>
+<p>The results containing the rules, support, count, confidence, lift, and conviction are stored in the table <code>assoc_rules</code> in the schema specified by <code>output_schema</code>.</p>
+<p>The table has the following columns. </p><table class="output">
+<tr>
+<th>ruleid </th><td>integer  </td></tr>
+<tr>
+<th>pre </th><td>text  </td></tr>
+<tr>
+<th>post </th><td>text  </td></tr>
+<tr>
+<th>count </th><td>integer  </td></tr>
+<tr>
+<th>support </th><td>double  </td></tr>
+<tr>
+<th>confidence </th><td>double  </td></tr>
+<tr>
+<th>lift </th><td>double  </td></tr>
+<tr>
+<th>conviction </th><td>double  </td></tr>
+</table>
+<p>On Greenplum Database, the table is distributed by the <code>ruleid</code> column.</p>
+<p>The <code>pre</code> and <code>post</code> columns are the itemsets of left and right hand sides of the association rule respectively. The <code>support</code>, <code>confidence</code>, <code>lift</code>, and <code>conviction</code> columns are calculated as described earlier. </p>
+<p class="enddd"></p>
+</dd>
+<dt>verbose (optional) </dt>
+<dd><p class="startdd">BOOLEAN, default: FALSE. Determines if details are printed for each iteration as the algorithm progresses.</p>
+<p class="enddd"></p>
+</dd>
+<dt>max_itemset_size (optional) </dt>
+<dd><p class="startdd">INTEGER, default: 10. Determines the maximum size of frequent itemsets that are used for generating association rules. Must be 2 or more. This parameter can be used to reduce run time for data sets where itemset size is large, which is a common situation. If your query is not returning or is running too long, try using a lower value for this parameter.</p>
+<p class="enddd"></p>
+</dd>
+<dt>max_LHS_size (optional) </dt>
+<dd><p class="startdd">INTEGER, default: NULL. Determines the maximum size of the left hand side of the rule. Must be 1 or more. This parameter can be used to reduce run time.</p>
+<p class="enddd"></p>
+</dd>
+<dt>max_RHS_size (optional) </dt>
+<dd>INTEGER, default: NULL. Determines the maximum size of the right hand side of the rule. Must be 1 or more. This parameter can be used to reduce run time. For example, setting to 1 can significantly reduce run time if this makes sense for your use case. (The <em>apriori</em> algorithm in the R package <em>arules</em> [2] only supports a RHS of 1.) </dd>
+</dl>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<p>Let's look at some sample transactional data and generate association rules.</p>
+<ol type="1">
+<li>Create an input dataset: <pre class="example">
+DROP TABLE IF EXISTS test_data;
+CREATE TABLE test_data (
+    trans_id INT,
+    product TEXT
+);
+INSERT INTO test_data VALUES (1, 'beer');
+INSERT INTO test_data VALUES (1, 'diapers');
+INSERT INTO test_data VALUES (1, 'chips');
+INSERT INTO test_data VALUES (2, 'beer');
+INSERT INTO test_data VALUES (2, 'diapers');
+INSERT INTO test_data VALUES (3, 'beer');
+INSERT INTO test_data VALUES (3, 'diapers');
+INSERT INTO test_data VALUES (4, 'beer');
+INSERT INTO test_data VALUES (4, 'chips');
+INSERT INTO test_data VALUES (5, 'beer');
+INSERT INTO test_data VALUES (6, 'beer');
+INSERT INTO test_data VALUES (6, 'diapers');
+INSERT INTO test_data VALUES (6, 'chips');
+INSERT INTO test_data VALUES (7, 'beer');
+INSERT INTO test_data VALUES (7, 'diapers');
+</pre></li>
+<li>Let \( min(support) = .25 \) and \( min(confidence) = .5 \), and the output schema is set to <code>NULL</code> indicating output to the current schema. In this example we set verbose to TRUE so that we have some insight into progress of the function. We can now generate association rules as follows: <pre class="example">
+SELECT * FROM madlib.assoc_rules( .25,            -- Support
+                                  .5,             -- Confidence
+                                  'trans_id',     -- Transaction id col
+                                  'product',      -- Product col
+                                  'test_data',    -- Input data
+                                  NULL,           -- Output schema
+                                  TRUE            -- Verbose output
+                                );
+</pre> Result (iteration details not shown): <pre class="result">
+ output_schema | output_table | total_rules |   total_time
+---------------+--------------+-------------+-----------------
+ public        | assoc_rules  |           7 | 00:00:00.569254
+(1 row)
+</pre> The association rules are stored in the assoc_rules table: <pre class="example">
+SELECT * FROM assoc_rules
+ORDER BY support DESC, confidence DESC;
+</pre> Result: <pre class="result">
+ ruleid |       pre       |      post      | count |      support      |    confidence     |       lift        |    conviction
+--------+-----------------+----------------+-------+-------------------+-------------------+-------------------+-------------------
+      2 | {diapers}       | {beer}         |     5 | 0.714285714285714 |                 1 |                 1 |                 0
+      6 | {beer}          | {diapers}      |     5 | 0.714285714285714 | 0.714285714285714 |                 1 |                 1
+      5 | {chips}         | {beer}         |     3 | 0.428571428571429 |                 1 |                 1 |                 0
+      4 | {chips,diapers} | {beer}         |     2 | 0.285714285714286 |                 1 |                 1 |                 0
+      1 | {chips}         | {diapers,beer} |     2 | 0.285714285714286 | 0.666666666666667 | 0.933333333333333 | 0.857142857142857
+      7 | {chips}         | {diapers}      |     2 | 0.285714285714286 | 0.666666666666667 | 0.933333333333333 | 0.857142857142857
+      3 | {beer,chips}    | {diapers}      |     2 | 0.285714285714286 | 0.666666666666667 | 0.933333333333333 | 0.857142857142857
+(7 rows)
+</pre></li>
+<li>Limit association rules generated from itemsets of size at most 2. This parameter is a good way to reduce long run times. <pre class="example">
+SELECT * FROM madlib.assoc_rules( .25,            -- Support
+                                  .5,             -- Confidence
+                                  'trans_id',     -- Transaction id col
+                                  'product',      -- Product col
+                                  'test_data',    -- Input data
+                                  NULL,           -- Output schema
+                                  TRUE,           -- Verbose output
+                                  2               -- Max itemset size
+                                );
+</pre> Result (iteration details not shown): <pre class="result">
+ output_schema | output_table | total_rules |   total_time
+---------------+--------------+-------------+-----------------
+ public        | assoc_rules  |           4 | 00:00:00.565176
+(1 row)
+</pre> The association rules are again stored in the assoc_rules table: <pre class="example">
+SELECT * FROM assoc_rules
+ORDER BY support DESC, confidence DESC;
+</pre> Result: <pre class="result">
+ ruleid |    pre    |   post    | count |      support      |    confidence     |       lift        |    conviction
+--------+-----------+-----------+-------+-------------------+-------------------+-------------------+-------------------
+      1 | {diapers} | {beer}    |     5 | 0.714285714285714 |                 1 |                 1 |                 0
+      2 | {beer}    | {diapers} |     5 | 0.714285714285714 | 0.714285714285714 |                 1 |                 1
+      3 | {chips}   | {beer}    |     3 | 0.428571428571429 |                 1 |                 1 |                 0
+      4 | {chips}   | {diapers} |     2 | 0.285714285714286 | 0.666666666666667 | 0.933333333333333 | 0.857142857142857
+(4 rows)
+</pre></li>
+<li>Post-processing can now be done on the output table in the case that you want to filter the results. For example, if you want any single item on the left hand side and a particular item on the right hand side: <pre class="example">
+SELECT * FROM assoc_rules WHERE array_upper(pre,1) = 1 AND post = array['beer'];
+</pre> Result: <pre class="result">
+ ruleid |    pre    |  post  | count |      support      | confidence | lift | conviction
+--------+-----------+--------+-------+-------------------+------------+------+------------
+      1 | {diapers} | {beer} |     5 | 0.714285714285714 |          1 |    1 |          0
+      3 | {chips}   | {beer} |     3 | 0.428571428571429 |          1 |    1 |          0
+(2 rows)
+</pre></li>
+<li>Limit the size of right hand side to 1. This parameter is a good way to reduce long run times. <pre class="example">
+SELECT * FROM madlib.assoc_rules( .25,            -- Support
+                                  .5,             -- Confidence
+                                  'trans_id',     -- Transaction id col
+                                  'product',      -- Product col
+                                  'test_data',    -- Input data
+                                  NULL,           -- Output schema
+                                  TRUE,           -- Verbose output
+                                  NULL,           -- Max itemset size
+                                  NULL,           -- Max LHS size
+                                  1               -- Max RHS size
+                                );
+</pre> Result (iteration details not shown): <pre class="result">
+ output_schema | output_table | total_rules |   total_time
+---------------+--------------+-------------+-----------------
+ public        | assoc_rules  |           6 | 00:00:00.031362
+(1 row)
+</pre> The association rules are again stored in the assoc_rules table: <pre class="example">
+SELECT * FROM assoc_rules
+ORDER BY support DESC, confidence DESC;
+</pre> Result: <pre class="result">
+ ruleid |       pre       |   post    | count |      support      |    confidence     |       lift        |    conviction
+--------+-----------------+-----------+-------+-------------------+-------------------+-------------------+-------------------
+      4 | {diapers}       | {beer}    |     5 | 0.714285714285714 |                 1 |                 1 |                 0
+      3 | {beer}          | {diapers} |     5 | 0.714285714285714 | 0.714285714285714 |                 1 |                 1
+      1 | {chips}         | {beer}    |     3 | 0.428571428571429 |                 1 |                 1 |                 0
+      6 | {diapers,chips} | {beer}    |     2 | 0.285714285714286 |                 1 |                 1 |                 0
+      2 | {chips}         | {diapers} |     2 | 0.285714285714286 | 0.666666666666667 | 0.933333333333333 | 0.857142857142857
+      5 | {beer,chips}    | {diapers} |     2 | 0.285714285714286 | 0.666666666666667 | 0.933333333333333 | 0.857142857142857
+(6 rows)
+</pre></li>
+</ol>
+<p><a class="anchor" id="notes"></a></p><dl class="section user"><dt>Notes</dt><dd></dd></dl>
+<p>The association rules function always creates a table named <code>assoc_rules</code>. Make a copy of this table before running the function again if you would like to keep multiple association rule tables. This behavior will be improved in a later release.</p>
+<p><a class="anchor" id="literature"></a></p><dl class="section user"><dt>Literature</dt><dd></dd></dl>
+<p>[1] <a href="https://en.wikipedia.org/wiki/Apriori_algorithm">https://en.wikipedia.org/wiki/Apriori_algorithm</a></p>
+<p>[2] <a href="https://cran.r-project.org/web/packages/arules/arules.pdf">https://cran.r-project.org/web/packages/arules/arules.pdf</a></p>
+<p><a class="anchor" id="related"></a></p><dl class="section user"><dt>Related Topics</dt><dd></dd></dl>
+<p>File <a class="el" href="assoc__rules_8sql__in.html" title="The assoc_rules function computes association rules for a given set of data. The data is assumed to h...">assoc_rules.sql_in</a> documenting the SQL function. </p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:59 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__association__rules.html b/docs/rc/group__grp__association__rules.html
new file mode 100644
index 0000000..b5ebbb9
--- /dev/null
+++ b/docs/rc/group__grp__association__rules.html
@@ -0,0 +1,139 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Association Rules</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__association__rules.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#groups">Modules</a>  </div>
+  <div class="headertitle">
+<div class="title">Association Rules<div class="ingroups"><a class="el" href="group__grp__unsupervised.html">Unsupervised Learning</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Methods used to discover patterns in transactional datasets. </p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group__grp__assoc__rules"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__assoc__rules.html">Apriori Algorithm</a></td></tr>
+<tr class="memdesc:group__grp__assoc__rules"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes association rules for a given set of data. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:59 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__association__rules.js b/docs/rc/group__grp__association__rules.js
new file mode 100644
index 0000000..e10c849
--- /dev/null
+++ b/docs/rc/group__grp__association__rules.js
@@ -0,0 +1,4 @@
+var group__grp__association__rules =
+[
+    [ "Apriori Algorithm", "group__grp__assoc__rules.html", null ]
+];
\ No newline at end of file
diff --git a/docs/rc/group__grp__automl.html b/docs/rc/group__grp__automl.html
new file mode 100644
index 0000000..1e3bbe6
--- /dev/null
+++ b/docs/rc/group__grp__automl.html
@@ -0,0 +1,128 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: AutoML</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17-dev</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__automl.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">AutoML<div class="ingroups"><a class="el" href="group__grp__early__stage.html">Early Stage Development</a> &raquo; <a class="el" href="group__grp__dl.html">Deep Learning</a> &raquo; <a class="el" href="group__grp__model__selection.html">Model Selection for DL</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Thu Mar 26 2020 20:40:13 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__balance__sampling.html b/docs/rc/group__grp__balance__sampling.html
new file mode 100644
index 0000000..2d305b1
--- /dev/null
+++ b/docs/rc/group__grp__balance__sampling.html
@@ -0,0 +1,600 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Balanced Sampling</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__balance__sampling.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Balanced Sampling<div class="ingroups"><a class="el" href="group__grp__sampling.html">Sampling</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li>
+<a href="#strs">Balanced Sampling</a> </li>
+<li>
+<a href="#examples">Examples</a> </li>
+<li>
+<a href="#literature">Literature</a> </li>
+<li>
+<a href="#related">Related Topics</a> </li>
+</ul>
+</div><p>Some classification algorithms only perform optimally when the number of samples in each class is roughly the same. Highly skewed datasets are common in many domains (e.g., fraud detection), so resampling to offset this imbalance can produce a better decision boundary.</p>
+<p>This module offers a number of resampling techniques including undersampling majority classes, oversampling minority classes, and combinations of the two.</p>
+<p><a class="anchor" id="strs"></a></p><dl class="section user"><dt>Balanced Sampling</dt><dd></dd></dl>
+<pre class="syntax">
+balance_sample( source_table,
+                output_table,
+                class_col,
+                class_sizes,
+                output_table_size,
+                grouping_cols,
+                with_replacement,
+                keep_null
+              )
+</pre><p><b>Arguments</b> </p><dl class="arglist">
+<dt>source_table </dt>
+<dd><p class="startdd">TEXT. Name of the table containing the input data.</p>
+<p class="enddd"></p>
+</dd>
+<dt>output_table </dt>
+<dd><p class="startdd">TEXT. Name of output table that contains the sampled data. The output table contains all columns present in the source table, plus a new generated id called "__madlib_id__" added as the first column. </p>
+<p class="enddd"></p>
+</dd>
+<dt>class_col </dt>
+<dd><p class="startdd">TEXT, Name of the column containing the class to be balanced. </p>
+<p class="enddd"></p>
+</dd>
+<dt>class_sizes (optional) </dt>
+<dd><p class="startdd">VARCHAR, default ‘uniform’. Parameter to define the size of the different class values. (Class values are sometimes also called levels). Can be set to the following:</p>
+<ul>
+<li>
+<b>‘uniform’</b>: All class values will be resampled to have the same number of rows.  </li>
+<li>
+<b>'undersample'</b>: Undersample such that all class values end up with the same number of observations as the minority class. Done without replacement by default unless the parameter ‘with_replacement’ is set to TRUE.  </li>
+<li>
+<b>'oversample'</b>: Oversample with replacement such that all class values end up with the same number of observations as the majority class. Not affected by the parameter ‘with_replacement’ since oversampling is always done with replacement.  Short forms of the above will work too, e.g., 'uni' works the same as 'uniform'. </li>
+</ul>
+<p>Alternatively, you can also explicitly set class size in a string containing a comma-delimited list. Order does not matter and all class values do not need to be specified. Use the format “class_value_1=x, class_value_2=y, …” where 'class_value' in the list must exist in the column 'class_col'. Set to an integer representing the desired number of observations. E.g., ‘red=3000, blue=4000’ means you want to resample the dataset to result in exactly 3000 red and 4000 blue rows in the ‘output_table’.  </p>
+<dl class="section note"><dt>Note</dt><dd>The allowed names for class values follows object naming rules in PostgreSQL [1]. Quoted identifiers are allowed and should be enclosed in double quotes in the usual way. If for some reason the class values in the examples above were “ReD” and “BluE” then the comma delimited list for ‘class_size’ would be: ‘“ReD”=3000, “BluE”=4000’. </dd></dl>
+</dd>
+<dt>output_table_size (optional) </dt>
+<dd><p class="startdd">INTEGER, default NULL. Desired size of the output data set. This parameter is ignored if ‘class_size’ parameter is set to either ‘oversample’ or ‘undersample’ since output table size is already determined. If NULL, the resulting output table size will depend on the settings for the ‘class_size’ parameter (see table below for more details). </p>
+<p class="enddd"></p>
+</dd>
+<dt>grouping_cols (optional) </dt>
+<dd><p class="startdd">TEXT, default: NULL. A single column or a list of comma-separated columns that defines the strata. When this parameter is NULL, no grouping is used so the sampling is non-stratified, that is, the whole table is treated as a single group.</p>
+<dl class="section note"><dt>Note</dt><dd>The 'output_table_size' and the 'class_sizes' are defined for the whole table. When grouping is used, these parameters are split evenly for each group. Further, if a specific class value is specified in the 'class_sizes' parameter, that particular class value should be present in each group. If not, an error will be thrown. </dd></dl>
+</dd>
+<dt>with_replacement (optional) </dt>
+<dd><p class="startdd">BOOLEAN, default FALSE. Determines whether to sample with replacement or without replacement (default). With replacement means that it is possible that the same row may appear in the sample set more than once. Without replacement means a given row can be selected only once. This parameter affects undersampling only since oversampling is always done with replacement.</p>
+<p class="enddd"></p>
+</dd>
+<dt>keep_null (optional) </dt>
+<dd>BOOLEAN, default FALSE. Determines whether to sample rows whose class values are NULL. By default, all rows with NULL class values are ignored. If this is set to TRUE, then NULL is treated as another class value. </dd>
+</dl>
+<p><b>How Output Table Size is Determined</b></p>
+<p>The rule of thumb is that if you specify a value for 'output_table_size', then you will generally get an output table of that size, with some minor rounding variations. If you set 'output_table_size' to NULL, then the size of the output table will be calculated depending on what you put for the 'class_size' parameter. The following table shows how the parameters 'class_size' and 'output_table_size' work together:</p>
+<table class="doxtable">
+<tr>
+<th align="left">Case </th><th align="left">'class_size' </th><th align="left">'output_table_size' </th><th align="left">Result  </th></tr>
+<tr>
+<td align="left">1 </td><td align="left">'uniform' </td><td align="left">NULL </td><td align="left">Resample for uniform class size with output size = input size (i.e., balanced). </td></tr>
+<tr>
+<td align="left">2 </td><td align="left">'uniform' </td><td align="left">10000 </td><td align="left">Resample for uniform class size with output size = 10K (i.e., balanced). </td></tr>
+<tr>
+<td align="left">3 </td><td align="left">NULL </td><td align="left">NULL </td><td align="left">Resample for uniform class size with output size = input size (i.e., balanced). Class_size=NULL has same behavior as ‘uniform’. </td></tr>
+<tr>
+<td align="left">4 </td><td align="left">NULL </td><td align="left">10000 </td><td align="left">Resample for uniform class size with output size = 10K (i.e., balanced). Class_size=NULL has same behavior as ‘uniform’. </td></tr>
+<tr>
+<td align="left">5 </td><td align="left">'undersample' </td><td align="left">n/a </td><td align="left">Undersample such that all class values end up with the same number of observations as the minority. </td></tr>
+<tr>
+<td align="left">6 </td><td align="left">'oversample' </td><td align="left">n/a </td><td align="left">Oversample with replacement (always) such that all class values end up with the same number of observations as the majority. </td></tr>
+<tr>
+<td align="left">7 </td><td align="left">'red=3000' </td><td align="left">NULL </td><td align="left">Resample red to 3K, leave rest of the class values (blue, green, etc.) as is. </td></tr>
+<tr>
+<td align="left">8 </td><td align="left">'red=3000, blue=4000' </td><td align="left">10000 </td><td align="left">Resample red to 3K and blue to 4K, divide remaining class values evenly 3K/(n-2) each, where n=number of class values. Note that if red and blue are the only class values, then output table size will be 7K not 10K. (This is the only case where specifying a value for 'output_table_size' may not actually result in an output table of that size.) </td></tr>
+</table>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<p>Note that due to the random nature of sampling, your results may look different from those below.</p>
+<ol type="1">
+<li>Create an input table using part of the flags data set from <a href="https://archive.ics.uci.edu/ml/datasets/Flags">https://archive.ics.uci.edu/ml/datasets/Flags</a> : <pre class="syntax">
+DROP TABLE IF EXISTS flags;
+CREATE TABLE flags (
+    id INTEGER,
+    name TEXT,
+    landmass INTEGER,
+    zone INTEGER,
+    area INTEGER,
+    population INTEGER,
+    language INTEGER,
+    colours INTEGER,
+    mainhue TEXT
+);
+INSERT INTO flags VALUES
+(1, 'Argentina', 2, 3, 2777, 28, 2, 2, 'blue'),
+(2, 'Australia', 6, 2, 7690, 15, 1, 3, 'blue'),
+(3, 'Austria', 3, 1, 84, 8, 4, 2, 'red'),
+(4, 'Brazil', 2, 3, 8512, 119, 6, 4, 'green'),
+(5, 'Canada', 1, 4, 9976, 24, 1, 2, 'red'),
+(6, 'China', 5, 1, 9561, 1008, 7, 2, 'red'),
+(7, 'Denmark', 3, 1, 43, 5, 6, 2, 'red'),
+(8, 'Greece', 3, 1, 132, 10, 6, 2, 'blue'),
+(9, 'Guatemala', 1, 4, 109, 8, 2, 2, 'blue'),
+(10, 'Ireland', 3, 4, 70, 3, 1, 3, 'white'),
+(11, 'Jamaica', 1, 4, 11, 2, 1, 3, 'green'),
+(12, 'Luxembourg', 3, 1, 3, 0, 4, 3, 'red'),
+(13, 'Mexico', 1, 4, 1973, 77, 2, 4, 'green'),
+(14, 'Norway', 3, 1, 324, 4, 6, 3, 'red'),
+(15, 'Portugal', 3, 4, 92, 10, 6, 5, 'red'),
+(16, 'Spain', 3, 4, 505, 38, 2, 2, 'red'),
+(17, 'Sweden', 3, 1, 450, 8, 6, 2, 'blue'),
+(18, 'Switzerland', 3, 1, 41, 6, 4, 2, 'red'),
+(19, 'UK', 3, 4, 245, 56, 1, 3, 'red'),
+(20, 'USA', 1, 4, 9363, 231, 1, 3, 'white'),
+(21, 'xElba', 3, 1, 1, 1, 6, NULL, NULL),
+(22, 'xPrussia', 3, 1, 249, 61, 4, NULL, NULL);
+</pre></li>
+<li>Uniform sampling. All class values will be resampled so that they have the same number of rows. The output data size will be the same as the input data size, ignoring NULL values. Uniform sampling is the default for the 'class_size' parameter so we do not need to explicitly set it: <pre class="syntax">
+DROP TABLE IF EXISTS output_table;
+SELECT madlib.balance_sample(
+                              'flags',             -- Source table
+                              'output_table',      -- Output table
+                              'mainhue');          -- Class column
+SELECT * FROM output_table ORDER BY mainhue, name;
+</pre> <pre class="result">
+ __madlib_id__ | id |    name     | landmass | zone | area | population | language | colours | mainhue
+---------------+----+-------------+----------+------+------+------------+----------+---------+---------
+             5 |  1 | Argentina   |        2 |    3 | 2777 |         28 |        2 |       2 | blue
+             2 |  2 | Australia   |        6 |    2 | 7690 |         15 |        1 |       3 | blue
+             3 |  8 | Greece      |        3 |    1 |  132 |         10 |        6 |       2 | blue
+             4 |  9 | Guatemala   |        1 |    4 |  109 |          8 |        2 |       2 | blue
+             1 | 17 | Sweden      |        3 |    1 |  450 |          8 |        6 |       2 | blue
+            11 |  4 | Brazil      |        2 |    3 | 8512 |        119 |        6 |       4 | green
+            12 |  4 | Brazil      |        2 |    3 | 8512 |        119 |        6 |       4 | green
+            14 | 13 | Mexico      |        1 |    4 | 1973 |         77 |        2 |       4 | green
+            15 | 13 | Mexico      |        1 |    4 | 1973 |         77 |        2 |       4 | green
+            13 | 13 | Mexico      |        1 |    4 | 1973 |         77 |        2 |       4 | green
+             8 |  3 | Austria     |        3 |    1 |   84 |          8 |        4 |       2 | red
+            10 |  5 | Canada      |        1 |    4 | 9976 |         24 |        1 |       2 | red
+             9 |  7 | Denmark     |        3 |    1 |   43 |          5 |        6 |       2 | red
+             6 | 15 | Portugal    |        3 |    4 |   92 |         10 |        6 |       5 | red
+             7 | 18 | Switzerland |        3 |    1 |   41 |          6 |        4 |       2 | red
+            19 | 10 | Ireland     |        3 |    4 |   70 |          3 |        1 |       3 | white
+            20 | 10 | Ireland     |        3 |    4 |   70 |          3 |        1 |       3 | white
+            18 | 10 | Ireland     |        3 |    4 |   70 |          3 |        1 |       3 | white
+            16 | 20 | USA         |        1 |    4 | 9363 |        231 |        1 |       3 | white
+            17 | 20 | USA         |        1 |    4 | 9363 |        231 |        1 |       3 | white
+(20 rows)
+</pre> Next we do uniform sampling again, but this time we specify a size for the output table: <pre class="syntax">
+DROP TABLE IF EXISTS output_table;
+SELECT madlib.balance_sample(
+                              'flags',             -- Source table
+                              'output_table',      -- Output table
+                              'mainhue',           -- Class column
+                              'uniform',           -- Uniform sample
+                               12);                -- Desired output table size
+SELECT * FROM output_table ORDER BY mainhue, name;
+</pre> <pre class="result">
+ __madlib_id__ | id |   name    | landmass | zone | area | population | language | colours | mainhue
+---------------+----+-----------+----------+------+------+------------+----------+---------+---------
+            10 |  1 | Argentina |        2 |    3 | 2777 |         28 |        2 |       2 | blue
+            12 |  2 | Australia |        6 |    2 | 7690 |         15 |        1 |       3 | blue
+            11 |  8 | Greece    |        3 |    1 |  132 |         10 |        6 |       2 | blue
+             2 |  4 | Brazil    |        2 |    3 | 8512 |        119 |        6 |       4 | green
+             3 | 11 | Jamaica   |        1 |    4 |   11 |          2 |        1 |       3 | green
+             1 | 13 | Mexico    |        1 |    4 | 1973 |         77 |        2 |       4 | green
+             5 |  7 | Denmark   |        3 |    1 |   43 |          5 |        6 |       2 | red
+             6 | 14 | Norway    |        3 |    1 |  324 |          4 |        6 |       3 | red
+             4 | 15 | Portugal  |        3 |    4 |   92 |         10 |        6 |       5 | red
+             9 | 10 | Ireland   |        3 |    4 |   70 |          3 |        1 |       3 | white
+             7 | 20 | USA       |        1 |    4 | 9363 |        231 |        1 |       3 | white
+             8 | 20 | USA       |        1 |    4 | 9363 |        231 |        1 |       3 | white
+(12 rows)
+</pre></li>
+<li>Oversampling. Oversample with replacement such that all class values except NULLs end up with the same number of observations as the majority class. Countries with red flags is the majority class with 10 observations, so other class values will be oversampled to 10 observations: <pre class="syntax">
+DROP TABLE IF EXISTS output_table;
+SELECT madlib.balance_sample(
+                              'flags',             -- Source table
+                              'output_table',      -- Output table
+                              'mainhue',           -- Class column
+                              'oversample');       -- Oversample
+SELECT * FROM output_table ORDER BY mainhue, name;
+</pre> <pre class="result">
+ __madlib_id__ | id |    name     | landmass | zone | area | population | language | colours | mainhue
+---------------+----+-------------+----------+------+------+------------+----------+---------+---------
+            35 |  1 | Argentina   |        2 |    3 | 2777 |         28 |        2 |       2 | blue
+            33 |  1 | Argentina   |        2 |    3 | 2777 |         28 |        2 |       2 | blue
+            37 |  1 | Argentina   |        2 |    3 | 2777 |         28 |        2 |       2 | blue
+            34 |  1 | Argentina   |        2 |    3 | 2777 |         28 |        2 |       2 | blue
+            36 |  1 | Argentina   |        2 |    3 | 2777 |         28 |        2 |       2 | blue
+            32 |  1 | Argentina   |        2 |    3 | 2777 |         28 |        2 |       2 | blue
+            31 |  2 | Australia   |        6 |    2 | 7690 |         15 |        1 |       3 | blue
+            39 |  9 | Guatemala   |        1 |    4 |  109 |          8 |        2 |       2 | blue
+            38 |  9 | Guatemala   |        1 |    4 |  109 |          8 |        2 |       2 | blue
+            40 | 17 | Sweden      |        3 |    1 |  450 |          8 |        6 |       2 | blue
+            19 |  4 | Brazil      |        2 |    3 | 8512 |        119 |        6 |       4 | green
+            20 |  4 | Brazil      |        2 |    3 | 8512 |        119 |        6 |       4 | green
+            12 | 11 | Jamaica     |        1 |    4 |   11 |          2 |        1 |       3 | green
+            11 | 11 | Jamaica     |        1 |    4 |   11 |          2 |        1 |       3 | green
+            13 | 11 | Jamaica     |        1 |    4 |   11 |          2 |        1 |       3 | green
+            17 | 13 | Mexico      |        1 |    4 | 1973 |         77 |        2 |       4 | green
+            15 | 13 | Mexico      |        1 |    4 | 1973 |         77 |        2 |       4 | green
+            16 | 13 | Mexico      |        1 |    4 | 1973 |         77 |        2 |       4 | green
+            18 | 13 | Mexico      |        1 |    4 | 1973 |         77 |        2 |       4 | green
+            14 | 13 | Mexico      |        1 |    4 | 1973 |         77 |        2 |       4 | green
+             9 |  3 | Austria     |        3 |    1 |   84 |          8 |        4 |       2 | red
+             8 |  5 | Canada      |        1 |    4 | 9976 |         24 |        1 |       2 | red
+             1 |  6 | China       |        5 |    1 | 9561 |       1008 |        7 |       2 | red
+            10 |  7 | Denmark     |        3 |    1 |   43 |          5 |        6 |       2 | red
+             2 | 12 | Luxembourg  |        3 |    1 |    3 |          0 |        4 |       3 | red
+             4 | 14 | Norway      |        3 |    1 |  324 |          4 |        6 |       3 | red
+             6 | 15 | Portugal    |        3 |    4 |   92 |         10 |        6 |       5 | red
+             3 | 16 | Spain       |        3 |    4 |  505 |         38 |        2 |       2 | red
+             5 | 18 | Switzerland |        3 |    1 |   41 |          6 |        4 |       2 | red
+             7 | 19 | UK          |        3 |    4 |  245 |         56 |        1 |       3 | red
+            22 | 10 | Ireland     |        3 |    4 |   70 |          3 |        1 |       3 | white
+            26 | 10 | Ireland     |        3 |    4 |   70 |          3 |        1 |       3 | white
+            24 | 10 | Ireland     |        3 |    4 |   70 |          3 |        1 |       3 | white
+            21 | 10 | Ireland     |        3 |    4 |   70 |          3 |        1 |       3 | white
+            27 | 10 | Ireland     |        3 |    4 |   70 |          3 |        1 |       3 | white
+            25 | 10 | Ireland     |        3 |    4 |   70 |          3 |        1 |       3 | white
+            23 | 10 | Ireland     |        3 |    4 |   70 |          3 |        1 |       3 | white
+            29 | 20 | USA         |        1 |    4 | 9363 |        231 |        1 |       3 | white
+            30 | 20 | USA         |        1 |    4 | 9363 |        231 |        1 |       3 | white
+            28 | 20 | USA         |        1 |    4 | 9363 |        231 |        1 |       3 | white
+(40 rows)
+</pre></li>
+<li>Undersampling. Undersample such that all class values except NULLs end up with the same number of observations as the minority class. Countries with white flags is the minority class with 2 observations, so other class values will be undersampled to 2 observations: <pre class="syntax">
+DROP TABLE IF EXISTS output_table;
+SELECT madlib.balance_sample(
+                              'flags',             -- Source table
+                              'output_table',      -- Output table
+                              'mainhue',           -- Class column
+                              'undersample');      -- Undersample
+SELECT * FROM output_table ORDER BY mainhue, name;
+</pre> <pre class="result">
+ __madlib_id__ | id |    name     | landmass | zone | area | population | language | colours | mainhue
+---------------+----+-------------+----------+------+------+------------+----------+---------+---------
+             1 |  1 | Argentina   |        2 |    3 | 2777 |         28 |        2 |       2 | blue
+             2 |  2 | Australia   |        6 |    2 | 7690 |         15 |        1 |       3 | blue
+             4 |  4 | Brazil      |        2 |    3 | 8512 |        119 |        6 |       4 | green
+             3 | 13 | Mexico      |        1 |    4 | 1973 |         77 |        2 |       4 | green
+             5 | 16 | Spain       |        3 |    4 |  505 |         38 |        2 |       2 | red
+             6 | 18 | Switzerland |        3 |    1 |   41 |          6 |        4 |       2 | red
+             8 | 10 | Ireland     |        3 |    4 |   70 |          3 |        1 |       3 | white
+             7 | 20 | USA         |        1 |    4 | 9363 |        231 |        1 |       3 | white
+(8 rows)
+</pre> We may also want to undersample with replacement, so we set the 'with_replacement' parameter to TRUE: <pre class="syntax">
+DROP TABLE IF EXISTS output_table;
+SELECT madlib.balance_sample(
+                              'flags',             -- Source table
+                              'output_table',      -- Output table
+                              'mainhue',           -- Class column
+                              'undersample',       -- Undersample
+                               NULL,               -- Output table size will be calculated
+                               NULL,               -- No grouping
+                              'TRUE');             -- Sample with replacement
+SELECT * FROM output_table ORDER BY mainhue, name;
+</pre> <pre class="result">
+ __madlib_id__ | id |   name    | landmass | zone | area | population | language | colours | mainhue
+---------------+----+-----------+----------+------+------+------------+----------+---------+---------
+             2 |  9 | Guatemala |        1 |    4 |  109 |          8 |        2 |       2 | blue
+             1 |  9 | Guatemala |        1 |    4 |  109 |          8 |        2 |       2 | blue
+             3 |  4 | Brazil    |        2 |    3 | 8512 |        119 |        6 |       4 | green
+             4 | 13 | Mexico    |        1 |    4 | 1973 |         77 |        2 |       4 | green
+             6 |  5 | Canada    |        1 |    4 | 9976 |         24 |        1 |       2 | red
+             5 | 19 | UK        |        3 |    4 |  245 |         56 |        1 |       3 | red
+             7 | 20 | USA       |        1 |    4 | 9363 |        231 |        1 |       3 | white
+             8 | 20 | USA       |        1 |    4 | 9363 |        231 |        1 |       3 | white
+(8 rows)
+</pre> Note above that some rows may appear multiple times above since we sampled with replacement.</li>
+<li>Setting class size by count. Here we set the number of rows for red and blue flags, and leave green and white flags unchanged: <pre class="syntax">
+DROP TABLE IF EXISTS output_table;
+SELECT madlib.balance_sample(
+                              'flags',             -- Source table
+                              'output_table',      -- Output table
+                              'mainhue',           -- Class column
+                              'red=7, blue=7');    -- Want 7 reds and 7 blues
+SELECT * FROM output_table ORDER BY mainhue, name;
+</pre> <pre class="result">
+ __madlib_id__ | id |    name    | landmass | zone | area | population | language | colours | mainhue
+---------------+----+------------+----------+------+------+------------+----------+---------+---------
+             5 |  2 | Australia  |        6 |    2 | 7690 |         15 |        1 |       3 | blue
+             7 |  8 | Greece     |        3 |    1 |  132 |         10 |        6 |       2 | blue
+             6 |  8 | Greece     |        3 |    1 |  132 |         10 |        6 |       2 | blue
+             1 |  9 | Guatemala  |        1 |    4 |  109 |          8 |        2 |       2 | blue
+             3 | 17 | Sweden     |        3 |    1 |  450 |          8 |        6 |       2 | blue
+             2 | 17 | Sweden     |        3 |    1 |  450 |          8 |        6 |       2 | blue
+             4 | 17 | Sweden     |        3 |    1 |  450 |          8 |        6 |       2 | blue
+             8 |  4 | Brazil     |        2 |    3 | 8512 |        119 |        6 |       4 | green
+            18 | 11 | Jamaica    |        1 |    4 |   11 |          2 |        1 |       3 | green
+            19 | 13 | Mexico     |        1 |    4 | 1973 |         77 |        2 |       4 | green
+            13 |  3 | Austria    |        3 |    1 |   84 |          8 |        4 |       2 | red
+            14 |  5 | Canada     |        1 |    4 | 9976 |         24 |        1 |       2 | red
+            17 |  6 | China      |        5 |    1 | 9561 |       1008 |        7 |       2 | red
+            15 | 12 | Luxembourg |        3 |    1 |    3 |          0 |        4 |       3 | red
+            16 | 14 | Norway     |        3 |    1 |  324 |          4 |        6 |       3 | red
+            11 | 15 | Portugal   |        3 |    4 |   92 |         10 |        6 |       5 | red
+            12 | 16 | Spain      |        3 |    4 |  505 |         38 |        2 |       2 | red
+             9 | 10 | Ireland    |        3 |    4 |   70 |          3 |        1 |       3 | white
+            10 | 20 | USA        |        1 |    4 | 9363 |        231 |        1 |       3 | white
+(19 rows)
+</pre> Next we set the number of rows for red and blue flags, and also set an output table size. This means that green and white flags will be uniformly sampled to get to the desired output table size: <pre class="syntax">
+DROP TABLE IF EXISTS output_table;
+SELECT madlib.balance_sample(
+                              'flags',             -- Source table
+                              'output_table',      -- Output table
+                              'mainhue',           -- Class column
+                              'red=7, blue=7',     -- Want 7 reds and 7 blues
+                               22);                -- Desired output table size
+SELECT * FROM output_table ORDER BY mainhue, name;
+</pre> <pre class="result">
+ __madlib_id__ | id |    name     | landmass | zone | area | population | language | colours | mainhue
+---------------+----+-------------+----------+------+------+------------+----------+---------+---------
+            16 |  1 | Argentina   |        2 |    3 | 2777 |         28 |        2 |       2 | blue
+            20 |  2 | Australia   |        6 |    2 | 7690 |         15 |        1 |       3 | blue
+            21 |  2 | Australia   |        6 |    2 | 7690 |         15 |        1 |       3 | blue
+            22 |  8 | Greece      |        3 |    1 |  132 |         10 |        6 |       2 | blue
+            18 | 17 | Sweden      |        3 |    1 |  450 |          8 |        6 |       2 | blue
+            19 | 17 | Sweden      |        3 |    1 |  450 |          8 |        6 |       2 | blue
+            17 | 17 | Sweden      |        3 |    1 |  450 |          8 |        6 |       2 | blue
+             9 |  4 | Brazil      |        2 |    3 | 8512 |        119 |        6 |       4 | green
+            10 |  4 | Brazil      |        2 |    3 | 8512 |        119 |        6 |       4 | green
+             8 | 11 | Jamaica     |        1 |    4 |   11 |          2 |        1 |       3 | green
+            11 | 13 | Mexico      |        1 |    4 | 1973 |         77 |        2 |       4 | green
+             6 |  3 | Austria     |        3 |    1 |   84 |          8 |        4 |       2 | red
+             7 |  5 | Canada      |        1 |    4 | 9976 |         24 |        1 |       2 | red
+             2 |  7 | Denmark     |        3 |    1 |   43 |          5 |        6 |       2 | red
+             1 | 12 | Luxembourg  |        3 |    1 |    3 |          0 |        4 |       3 | red
+             3 | 15 | Portugal    |        3 |    4 |   92 |         10 |        6 |       5 | red
+             5 | 16 | Spain       |        3 |    4 |  505 |         38 |        2 |       2 | red
+             4 | 18 | Switzerland |        3 |    1 |   41 |          6 |        4 |       2 | red
+            14 | 10 | Ireland     |        3 |    4 |   70 |          3 |        1 |       3 | white
+            13 | 10 | Ireland     |        3 |    4 |   70 |          3 |        1 |       3 | white
+            15 | 10 | Ireland     |        3 |    4 |   70 |          3 |        1 |       3 | white
+            12 | 20 | USA         |        1 |    4 | 9363 |        231 |        1 |       3 | white
+(22 rows)
+</pre></li>
+<li>To make NULL a valid class value, set the parameter to keep NULLs: <pre class="syntax">
+DROP TABLE IF EXISTS output_table;
+SELECT madlib.balance_sample(
+                              'flags',             -- Source table
+                              'output_table',      -- Output table
+                              'mainhue',           -- Class column
+                               NULL,               -- Uniform
+                               NULL,               -- Output table size
+                               NULL,               -- No grouping
+                               NULL,               -- Sample without replacement
+                              'TRUE');             -- Make NULLs a valid class value
+SELECT * FROM output_table ORDER BY mainhue, name;
+</pre> <pre class="result">
+ __madlib_id__ | id |    name     | landmass | zone | area | population | language | colours | mainhue
+---------------+----+-------------+----------+------+------+------------+----------+---------+---------
+            25 |  1 | Argentina   |        2 |    3 | 2777 |         28 |        2 |       2 | blue
+            22 |  2 | Australia   |        6 |    2 | 7690 |         15 |        1 |       3 | blue
+            24 |  8 | Greece      |        3 |    1 |  132 |         10 |        6 |       2 | blue
+            21 |  9 | Guatemala   |        1 |    4 |  109 |          8 |        2 |       2 | blue
+            23 | 17 | Sweden      |        3 |    1 |  450 |          8 |        6 |       2 | blue
+             7 |  4 | Brazil      |        2 |    3 | 8512 |        119 |        6 |       4 | green
+             6 |  4 | Brazil      |        2 |    3 | 8512 |        119 |        6 |       4 | green
+            10 | 11 | Jamaica     |        1 |    4 |   11 |          2 |        1 |       3 | green
+             8 | 13 | Mexico      |        1 |    4 | 1973 |         77 |        2 |       4 | green
+             9 | 13 | Mexico      |        1 |    4 | 1973 |         77 |        2 |       4 | green
+             3 |  3 | Austria     |        3 |    1 |   84 |          8 |        4 |       2 | red
+             1 |  5 | Canada      |        1 |    4 | 9976 |         24 |        1 |       2 | red
+             2 | 16 | Spain       |        3 |    4 |  505 |         38 |        2 |       2 | red
+             4 | 18 | Switzerland |        3 |    1 |   41 |          6 |        4 |       2 | red
+             5 | 19 | UK          |        3 |    4 |  245 |         56 |        1 |       3 | red
+            13 | 10 | Ireland     |        3 |    4 |   70 |          3 |        1 |       3 | white
+            11 | 10 | Ireland     |        3 |    4 |   70 |          3 |        1 |       3 | white
+            14 | 10 | Ireland     |        3 |    4 |   70 |          3 |        1 |       3 | white
+            12 | 10 | Ireland     |        3 |    4 |   70 |          3 |        1 |       3 | white
+            15 | 20 | USA         |        1 |    4 | 9363 |        231 |        1 |       3 | white
+            17 | 21 | xElba       |        3 |    1 |    1 |          1 |        6 |         |
+            18 | 21 | xElba       |        3 |    1 |    1 |          1 |        6 |         |
+            16 | 21 | xElba       |        3 |    1 |    1 |          1 |        6 |         |
+            20 | 22 | xPrussia    |        3 |    1 |  249 |         61 |        4 |         |
+            19 | 22 | xPrussia    |        3 |    1 |  249 |         61 |        4 |         |
+(25 rows)
+</pre></li>
+<li>To perform the balance sampling for independent groups, use the 'grouping_cols' parameter. Note below that each group (zone) has a different count of the classes (mainhue), with some groups not containing some class values. <pre class="syntax">
+DROP TABLE IF EXISTS output_table;
+SELECT madlib.balance_sample(
+    'flags',          -- Source table
+    'output_table',   -- Output table
+    'mainhue',        -- Class column
+    NULL,             -- Uniform
+    NULL,             -- Output table size
+    'zone'            -- Grouping by zone
+);
+SELECT * FROM output_table ORDER BY zone, mainhue;
+</pre> <pre class="result">
+ __madlib_id__ | id |    name     | landmass | zone | area | population | language | colours | mainhue
+---------------+----+-------------+----------+------+------+------------+----------+---------+---------
+             6 |  8 | Greece      |        3 |    1 |  132 |         10 |        6 |       2 | blue
+             5 |  8 | Greece      |        3 |    1 |  132 |         10 |        6 |       2 | blue
+             8 | 17 | Sweden      |        3 |    1 |  450 |          8 |        6 |       2 | blue
+             7 |  8 | Greece      |        3 |    1 |  132 |         10 |        6 |       2 | blue
+             2 |  7 | Denmark     |        3 |    1 |   43 |          5 |        6 |       2 | red
+             1 |  6 | China       |        5 |    1 | 9561 |       1008 |        7 |       2 | red
+             4 | 12 | Luxembourg  |        3 |    1 |    3 |          0 |        4 |       3 | red
+             3 | 18 | Switzerland |        3 |    1 |   41 |          6 |        4 |       2 | red
+             1 |  2 | Australia   |        6 |    2 | 7690 |         15 |        1 |       3 | blue
+             1 |  1 | Argentina   |        2 |    3 | 2777 |         28 |        2 |       2 | blue
+             2 |  4 | Brazil      |        2 |    3 | 8512 |        119 |        6 |       4 | green
+             6 |  9 | Guatemala   |        1 |    4 |  109 |          8 |        2 |       2 | blue
+             5 |  9 | Guatemala   |        1 |    4 |  109 |          8 |        2 |       2 | blue
+             4 |  9 | Guatemala   |        1 |    4 |  109 |          8 |        2 |       2 | blue
+            12 | 13 | Mexico      |        1 |    4 | 1973 |         77 |        2 |       4 | green
+            10 | 13 | Mexico      |        1 |    4 | 1973 |         77 |        2 |       4 | green
+            11 | 13 | Mexico      |        1 |    4 | 1973 |         77 |        2 |       4 | green
+             1 | 19 | UK          |        3 |    4 |  245 |         56 |        1 |       3 | red
+             3 |  5 | Canada      |        1 |    4 | 9976 |         24 |        1 |       2 | red
+             2 | 15 | Portugal    |        3 |    4 |   92 |         10 |        6 |       5 | red
+             8 | 20 | USA         |        1 |    4 | 9363 |        231 |        1 |       3 | white
+             7 | 20 | USA         |        1 |    4 | 9363 |        231 |        1 |       3 | white
+             9 | 10 | Ireland     |        3 |    4 |   70 |          3 |        1 |       3 | white
+(23 rows)
+</pre></li>
+<li>Grouping can be used with class size specification as well. Note below that 'blue=&lt;Integer&gt;' is the only valid class value since 'blue' is the only class value that is present in each group. Further, 'blue=8' will be split between the four groups, resulting in two blue rows for each group. <pre class="syntax">
+DROP TABLE IF EXISTS output_table;
+SELECT madlib.balance_sample(
+    'flags',          -- Source table
+    'output_table',   -- Output table
+    'mainhue',        -- Class column
+    'blue=8',         -- Specified class value size. Rest of the values are outputed as is.
+    NULL,             -- Output table size
+    'zone'            -- Group by zone
+);
+SELECT * FROM output_table ORDER BY zone, mainhue;
+</pre> <pre class="result">
+ __madlib_id__ | id |    name     | landmass | zone | area | population | language | colours | mainhue
+---------------+----+-------------+----------+------+------+------------+----------+---------+---------
+             2 | 17 | Sweden      |        3 |    1 |  450 |          8 |        6 |       2 | blue
+             1 |  8 | Greece      |        3 |    1 |  132 |         10 |        6 |       2 | blue
+             3 |  3 | Austria     |        3 |    1 |   84 |          8 |        4 |       2 | red
+             5 |  7 | Denmark     |        3 |    1 |   43 |          5 |        6 |       2 | red
+             4 |  6 | China       |        5 |    1 | 9561 |       1008 |        7 |       2 | red
+             8 | 18 | Switzerland |        3 |    1 |   41 |          6 |        4 |       2 | red
+             7 | 14 | Norway      |        3 |    1 |  324 |          4 |        6 |       3 | red
+             6 | 12 | Luxembourg  |        3 |    1 |    3 |          0 |        4 |       3 | red
+             1 |  2 | Australia   |        6 |    2 | 7690 |         15 |        1 |       3 | blue
+             2 |  2 | Australia   |        6 |    2 | 7690 |         15 |        1 |       3 | blue
+             1 |  1 | Argentina   |        2 |    3 | 2777 |         28 |        2 |       2 | blue
+             2 |  1 | Argentina   |        2 |    3 | 2777 |         28 |        2 |       2 | blue
+             3 |  4 | Brazil      |        2 |    3 | 8512 |        119 |        6 |       4 | green
+             2 |  9 | Guatemala   |        1 |    4 |  109 |          8 |        2 |       2 | blue
+             1 |  9 | Guatemala   |        1 |    4 |  109 |          8 |        2 |       2 | blue
+             5 | 11 | Jamaica     |        1 |    4 |   11 |          2 |        1 |       3 | green
+             6 | 13 | Mexico      |        1 |    4 | 1973 |         77 |        2 |       4 | green
+             3 |  5 | Canada      |        1 |    4 | 9976 |         24 |        1 |       2 | red
+             7 | 15 | Portugal    |        3 |    4 |   92 |         10 |        6 |       5 | red
+             8 | 16 | Spain       |        3 |    4 |  505 |         38 |        2 |       2 | red
+             9 | 19 | UK          |        3 |    4 |  245 |         56 |        1 |       3 | red
+            10 | 20 | USA         |        1 |    4 | 9363 |        231 |        1 |       3 | white
+             4 | 10 | Ireland     |        3 |    4 |   70 |          3 |        1 |       3 | white
+(23 rows)
+</pre></li>
+</ol>
+<p><a class="anchor" id="literature"></a></p><dl class="section user"><dt>Literature</dt><dd></dd></dl>
+<p>[1] Object naming in PostgreSQL <a href="https://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS">https://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS</a></p>
+<p><a class="anchor" id="related"></a></p><dl class="section user"><dt>Related Topics</dt><dd></dd></dl>
+<p>File <a class="el" href="balance__sample_8sql__in.html" title="SQL functions for balanced data sets sampling. ">balance_sample.sql_in</a> for list of functions and usage. </p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__bayes.html b/docs/rc/group__grp__bayes.html
new file mode 100644
index 0000000..d35626e
--- /dev/null
+++ b/docs/rc/group__grp__bayes.html
@@ -0,0 +1,488 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Naive Bayes Classification</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__bayes.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Naive Bayes Classification<div class="ingroups"><a class="el" href="group__grp__early__stage.html">Early Stage Development</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li>
+<a href="#train">Training Function(s)</a> </li>
+<li>
+<a href="#classify">Classify Function(s)</a> </li>
+<li>
+<a href="#probabilities">Probabilities Function(s)</a> </li>
+<li>
+<a href="#adhoc">Ad Hoc Computation</a> </li>
+<li>
+<a href="#notes">Implementation Notes</a> </li>
+<li>
+<a href="#examples">Examples</a> </li>
+<li>
+<a href="#background">Technical Background</a> </li>
+<li>
+<a href="#related">Related Topics</a> </li>
+</ul>
+</div><dl class="section warning"><dt>Warning</dt><dd><em> This MADlib method is still in early stage development. Interface and implementation are subject to change. </em></dd></dl>
+<p>Naive Bayes refers to a stochastic model where all independent variables \( a_1, \dots, a_n \) (often referred to as attributes in this context) independently contribute to the probability that a data point belongs to a certain class \( c \).</p>
+<p>Naives Bayes classification estimates feature probabilities and class priors using maximum likelihood or Laplacian smoothing. For numeric attributes, Gaussian smoothing can be used to estimate the feature probabilities.These parameters are then used to classify new data.</p>
+<p><a class="anchor" id="train"></a></p><dl class="section user"><dt>Training Function(s)</dt><dd></dd></dl>
+<p>For data with only categorical attributes, precompute feature probabilities and class priors using the following function:</p>
+<pre class="syntax">
+create_nb_prepared_data_tables ( trainingSource,
+                                 trainingClassColumn,
+                                 trainingAttrColumn,
+                                 numAttrs,
+                                 featureProbsName,
+                                 classPriorsName
+                               )
+</pre><p>For data containing both categorical and numeric attributes, use the following form to precompute the Gaussian parameters (mean and variance) for numeric attributes alongside the feature probabilities for categorical attributes and class priors.</p>
+<pre class="syntax">
+create_nb_prepared_data_tables ( trainingSource,
+                                 trainingClassColumn,
+                                 trainingAttrColumn,
+                                 numericAttrsColumnIndices,
+                                 numAttrs,
+                                 featureProbsName,
+                                 numericAttrParamsName,
+                                 classPriorsName
+                               )
+</pre><p>The <em>trainingSource</em> is expected to be of the following form: </p><pre>{TABLE|VIEW} <em>trainingSource</em> (
+    ...
+    <em>trainingClassColumn</em> INTEGER,
+    <em>trainingAttrColumn</em> INTEGER[] OR NUMERIC[] OR FLOAT8[],
+    ...
+)</pre><p><em>numericAttrsColumnIndices</em> should be of type TEXT, specified as an array of indices (starting from 1) in the <em>trainingAttrColumn</em> attributes-array that correspond to numeric attributes.</p>
+<p>The two output tables are:</p><ul>
+<li><em>featureProbsName</em> &ndash; stores feature probabilities</li>
+<li><em>classPriorsName</em> &ndash; stores the class priors</li>
+</ul>
+<p>In addition to the above, if the function specifying numeric attributes is used, an additional table <em>numericAttrParamsName</em> is created which stores the Gaussian parameters for the numeric attributes.</p>
+<p><a class="anchor" id="classify"></a></p><dl class="section user"><dt>Classify Function(s)</dt><dd></dd></dl>
+<p>Perform Naive Bayes classification: </p><pre class="syntax">
+create_nb_classify_view ( featureProbsName,
+                          classPriorsName,
+                          classifySource,
+                          classifyKeyColumn,
+                          classifyAttrColumn,
+                          numAttrs,
+                          destName
+                        )
+</pre><p>For data with numeric attributes, use the following version:</p>
+<pre class="syntax">
+create_nb_classify_view ( featureProbsName,
+                          classPriorsName,
+                          classifySource,
+                          classifyKeyColumn,
+                          classifyAttrColumn,
+                          numAttrs,
+                          numericAttrParamsName,
+                          destName
+                        )
+</pre><p>The <b>data to classify</b> is expected to be of the following form: </p><pre>{TABLE|VIEW} <em>classifySource</em> (
+    ...
+    <em>classifyKeyColumn</em> ANYTYPE,
+    <em>classifyAttrColumn</em> INTEGER[],
+    ...
+)</pre><p>This function creates the view <code><em>destName</em></code> mapping <em>classifyKeyColumn</em> to the Naive Bayes classification. </p><pre class="result">
+key | nb_classification
+&#160;---+------------------
+...
+</pre><p><a class="anchor" id="probabilities"></a></p><dl class="section user"><dt>Probabilities Function(s)</dt><dd></dd></dl>
+<p>Compute Naive Bayes probabilities. </p><pre class="syntax">
+create_nb_probs_view( featureProbsName,
+                      classPriorsName,
+                      classifySource,
+                      classifyKeyColumn,
+                      classifyAttrColumn,
+                      numAttrs,
+                      destName
+                    )
+</pre><p>For data with numeric attributes , use the following version:</p>
+<pre class="syntax">
+create_nb_probs_view( featureProbsName,
+                      classPriorsName,
+                      classifySource,
+                      classifyKeyColumn,
+                      classifyAttrColumn,
+                      numAttrs,
+                      numericAttrParamsName,
+                      destName
+                    )
+</pre><p>This creates the view <code><em>destName</em></code> mapping <em>classifyKeyColumn</em> and every single class to the Naive Bayes probability: </p><pre class="result">
+key | class | nb_prob
+&#160;---+-------+--------
+...
+</pre><p><a class="anchor" id="adhoc"></a></p><dl class="section user"><dt>Ad Hoc Computation Function</dt><dd></dd></dl>
+<p>With ad hoc execution (no precomputation), the functions <a class="el" href="bayes_8sql__in.html#a798402280fc6db710957ae3ab58767e0" title="Create a view with columns (key, nb_classification) ">create_nb_classify_view()</a> and <a class="el" href="bayes_8sql__in.html#a163afffd0c845d325f060f74bcf02243" title="Create view with columns (key, class, nb_prob) ">create_nb_probs_view()</a> can be used in an ad-hoc fashion without the precomputation step. In this case, replace the function arguments</p>
+<pre>'<em>featureProbsName</em>', '<em>classPriorsName</em>'</pre><p> with </p><pre>'<em>trainingSource</em>', '<em>trainingClassColumn</em>', '<em>trainingAttrColumn</em>'</pre><p> for data without any any numeric attributes and with </p><pre>'<em>trainingSource</em>', '<em>trainingClassColumn</em>', '<em>trainingAttrColumn</em>', '<em>numericAttrsColumnIndices</em>'</pre><p> for data containing numeric attributes as well.</p>
+<p><a class="anchor" id="notes"></a></p><dl class="section user"><dt>Implementation Notes</dt><dd><ul>
+<li>The probabilities computed on the platforms of PostgreSQL and Greenplum database have a small difference due to the nature of floating point computation. Usually this is not important. However, if a data point has <p class="formulaDsp">
+\[ P(C=c_i \mid A) \approx P(C=c_j \mid A) \]
+</p>
+ for two classes, this data point might be classified into diferent classes on PostgreSQL and Greenplum. This leads to the differences in classifications on PostgreSQL and Greenplum for some data sets, but this should not affect the quality of the results.</li>
+<li>When two classes have equal and highest probability among all classes, the classification result is an array of these two classes, but the order of the two classes is random.</li>
+<li>The current implementation of Naive Bayes classification is suitable for discontinuous (categorial) attributes as well as continuous (numeric) attributes.<br />
+For continuous data, a typical assumption, usually used for small datasets, is that the continuous values associated with each class are distributed according to a Gaussian distribution, and the probabilities \( P(A_i = a \mid C=c) \) are estimated using the Gaussian Distribution formula: <p class="formulaDsp">
+\[ P(A_i=a \mid C=c) = \frac{1}{\sqrt{2\pi\sigma^{2}_c}}exp\left(-\frac{(a-\mu_c)^{2}}{2\sigma^{2}_c}\right) \]
+</p>
+ where \(\mu_c\) and \(\sigma^{2}_c\) are the population mean and variance of the attribute for the class \(c\).<br />
+Another common technique for handling continuous values, which is better for large data sets, is to use binning to discretize the values, and convert the continuous data into categorical bins. This approach is currently not implemented.</li>
+<li>One can provide floating point data to the Naive Bayes classification function. If the corresponding attribute index is not specified in <em>numericAttrsColumnIndices</em>, floating point numbers will be used as symbolic substitutions for categorial data. In this case, the classification would work best if there are sufficient data points for each floating point attribute. However, if floating point numbers are used as continuous data without the attribute being marked as of type numeric in <em>numericAttrsColumnIndices</em>, no warning is raised and the result may not be as expected.</li>
+</ul>
+</dd></dl>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<p>The following is an extremely simplified example of the above option #1 which can by verified by hand.</p>
+<ol type="1">
+<li>The training and the classification data. <pre class="example">
+SELECT * FROM training;
+</pre> Result: <pre class="result">
+ id | class | attributes
+&#160;---+-------+------------
+  1 |     1 | {1,2,3}
+  2 |     1 | {1,2,1}
+  3 |     1 | {1,4,3}
+  4 |     2 | {1,2,2}
+  5 |     2 | {0,2,2}
+  6 |     2 | {0,1,3}
+(6 rows)
+</pre> <pre class="example">
+SELECT * FROM toclassify;
+</pre> Result: <pre class="result">
+ id | attributes
+&#160;---+------------
+  1 | {0,2,1}
+  2 | {1,2,3}
+(2 rows)
+</pre></li>
+<li>Precompute feature probabilities and class priors. <pre class="example">
+SELECT madlib.create_nb_prepared_data_tables( 'training',
+                                              'class',
+                                              'attributes',
+                                              3,
+                                              'nb_feature_probs',
+                                              'nb_class_priors'
+                                            );
+</pre></li>
+<li>Optionally check the contents of the precomputed tables. <pre class="example">
+SELECT * FROM nb_class_priors;
+</pre> Result: <pre class="result">
+ class | class_cnt | all_cnt
+&#160;------+-----------+---------
+     1 |         3 |       6
+     2 |         3 |       6
+(2 rows)
+</pre> <pre class="example">
+SELECT * FROM nb_feature_probs;
+</pre> Result: <pre class="result">
+ class | attr | value | cnt | attr_cnt
+&#160;------+------+-------+-----+----------
+     1 |    1 |     0 |   0 |        2
+     1 |    1 |     1 |   3 |        2
+     1 |    2 |     1 |   0 |        3
+     1 |    2 |     2 |   2 |        3
+...
+</pre></li>
+<li>Create the view with Naive Bayes classification and check the results. <pre class="example">
+SELECT madlib.create_nb_classify_view( 'nb_feature_probs',
+                                       'nb_class_priors',
+                                       'toclassify',
+                                       'id',
+                                       'attributes',
+                                       3,
+                                       'nb_classify_view_fast'
+                                     );
+&#160;
+SELECT * FROM nb_classify_view_fast;
+</pre> Result: <pre class="result">
+ key | nb_classification
+&#160;----+-------------------
+   1 | {2}
+   2 | {1}
+(2 rows)
+</pre></li>
+<li>Look at the probabilities for each class (note that we use "Laplacian smoothing"), <pre class="example">
+SELECT madlib.create_nb_probs_view( 'nb_feature_probs',
+                                    'nb_class_priors',
+                                    'toclassify',
+                                    'id',
+                                    'attributes',
+                                    3,
+                                    'nb_probs_view_fast'
+                                  );
+&#160;
+SELECT * FROM nb_probs_view_fast;
+</pre> Result: <pre class="result">
+ key | class | nb_prob
+&#160;----+-------+---------
+   1 |     1 |     0.4
+   1 |     2 |     0.6
+   2 |     1 |    0.75
+   2 |     2 |    0.25
+(4 rows)
+</pre></li>
+</ol>
+<p>The following is an example of using a dataset with both numeric and categorical attributes</p>
+<ol type="1">
+<li>The training and the classification data. Attributes {height(numeric),weight(numeric),shoe size(categorical)}, Class{sex(1=male,2=female)} <pre class="example">
+SELECT * FROM gaussian_data;
+</pre> Result: <pre class="result">
+ id | sex |  attributes
+&#160;----+-----+---------------
+  1 |   1 | {6,180,12}
+  2 |   1 | {5.92,190,12}
+  3 |   1 | {5.58,170,11}
+  4 |   1 | {5.92,165,11}
+  5 |   2 | {5,100,6}
+  6 |   2 | {5.5,150,6}
+  7 |   2 | {5.42,130,7}
+  8 |   2 | {5.75,150,8}
+(8 rows)
+</pre> <pre class="example">
+SELECT * FROM gaussian_test;
+</pre> Result: <pre class="result">
+ id | sex |  attributes
+----+-----+--------------
+  9 |   1 | {5.8,180,11}
+ 10 |   2 | {5,160,6}
+(2 rows)
+</pre></li>
+<li>Precompute feature probabilities and class priors. <pre class="example">
+SELECT madlib.create_nb_prepared_data_tables( 'gaussian_data',
+                                              'sex',
+                                              'attributes',
+                                              'ARRAY[1,2]',
+                                              3,
+                                              'categ_feature_probs',
+                                              'numeric_attr_params',
+                                              'class_priors'
+                                            );
+</pre></li>
+<li>Optionally check the contents of the precomputed tables. <pre class="example">
+SELECT * FROM class_priors;
+</pre> Result: <pre class="result">
+class | class_cnt | all_cnt
+&#160;-------+-----------+---------
+     1 |         4 |       8
+     2 |         4 |       8
+(2 rows)
+</pre> <pre class="example">
+SELECT * FROM categ_feature_probs;
+</pre> Result: <pre class="result">
+ class | attr | value | cnt | attr_cnt
+-------+------+-------+-----+----------
+     2 |    3 |     6 |   2 |        5
+     1 |    3 |    12 |   2 |        5
+     2 |    3 |     7 |   1 |        5
+     1 |    3 |    11 |   2 |        5
+     2 |    3 |     8 |   1 |        5
+     2 |    3 |    12 |   0 |        5
+     1 |    3 |     6 |   0 |        5
+     2 |    3 |    11 |   0 |        5
+     1 |    3 |     8 |   0 |        5
+     1 |    3 |     7 |   0 |        5
+(10 rows)
+</pre> <pre class="example">
+SELECT * FROM numeric_attr_params;
+</pre> Result: <pre class="result">
+class | attr |      attr_mean       |        attr_var
+-------+------+----------------------+------------------------
+     1 |    1 |   5.8550000000000000 | 0.03503333333333333333
+     1 |    2 | 176.2500000000000000 |   122.9166666666666667
+     2 |    1 |   5.4175000000000000 | 0.09722500000000000000
+     2 |    2 | 132.5000000000000000 |   558.3333333333333333
+(4 rows)
+</pre></li>
+<li>Create the view with Naive Bayes classification and check the results. <pre class="example">
+SELECT madlib.create_nb_classify_view( 'categ_feature_probs',
+                                       'class_priors',
+                                       'gaussian_test',
+                                       'id',
+                                       'attributes',
+                                       3,
+                                       'numeric_attr_params',
+                                       'classify_view'
+                                     );
+&#160;
+SELECT * FROM classify_view;
+</pre> Result: <pre class="result">
+ key | nb_classification
+&#160;----+-------------------
+   9 | {1}
+   10 | {2}
+(2 rows)
+</pre></li>
+<li>Look at the probabilities for each class <pre class="example">
+SELECT madlib.create_nb_probs_view( 'categ_feature_probs',
+                                       'class_priors',
+                                       'gaussian_test',
+                                       'id',
+                                       'attributes',
+                                       3,
+                                       'numeric_attr_params',
+                                       'probs_view'
+                                  );
+&#160;
+SELECT * FROM probs_view;
+</pre> Result: <pre class="result">
+ key | class |       nb_prob
+-----+-------+----------------------
+   9 |     1 |    0.993556745948775
+   9 |     2 |  0.00644325405122553
+  10 |     1 | 5.74057538627122e-05
+  10 |     2 |    0.999942594246137
+(4 rows)
+</pre></li>
+</ol>
+<p><a class="anchor" id="background"></a></p><dl class="section user"><dt>Technical Background</dt><dd></dd></dl>
+<p>In detail, <b>Bayes'</b> theorem states that </p><p class="formulaDsp">
+\[ \Pr(C = c \mid A_1 = a_1, \dots, A_n = a_n) = \frac{\Pr(C = c) \cdot \Pr(A_1 = a_1, \dots, A_n = a_n \mid C = c)} {\Pr(A_1 = a_1, \dots, A_n = a_n)} \,, \]
+</p>
+<p> and the <b>naive</b> assumption is that </p><p class="formulaDsp">
+\[ \Pr(A_1 = a_1, \dots, A_n = a_n \mid C = c) = \prod_{i=1}^n \Pr(A_i = a_i \mid C = c) \,. \]
+</p>
+<p> Naives Bayes classification estimates feature probabilities and class priors using maximum likelihood or Laplacian smoothing. These parameters are then used to classifying new data.</p>
+<p>A Naive Bayes classifier computes the following formula: </p><p class="formulaDsp">
+\[ \text{classify}(a_1, ..., a_n) = \arg\max_c \left\{ \Pr(C = c) \cdot \prod_{i=1}^n \Pr(A_i = a_i \mid C = c) \right\} \]
+</p>
+<p> where \( c \) ranges over all classes in the training data and probabilites are estimated with relative frequencies from the training set. There are different ways to estimate the feature probabilities \( P(A_i = a \mid C = c) \). The maximum likelihood estimate takes the relative frequencies. That is: </p><p class="formulaDsp">
+\[ P(A_i = a \mid C = c) = \frac{\#(c,i,a)}{\#c} \]
+</p>
+<p> where</p><ul>
+<li>\( \#(c,i,a) \) denotes the # of training samples where attribute \( i \) is \( a \) and class is \( c \)</li>
+<li>\( \#c \) denotes the # of training samples where class is \( c \).</li>
+</ul>
+<p>Since the maximum likelihood sometimes results in estimates of "0", you might want to use a "smoothed" estimate. To do this, you add a number of "virtual" samples and make the assumption that these samples are evenly distributed among the values assumed by attribute \( i \) (that is, the set of all values observed for attribute \( a \) for any class):</p>
+<p class="formulaDsp">
+\[ P(A_i = a \mid C = c) = \frac{\#(c,i,a) + s}{\#c + s \cdot \#i} \]
+</p>
+<p> where</p><ul>
+<li>\( \#i \) denotes the # of distinct values for attribute \( i \) (for all classes)</li>
+<li>\( s \geq 0 \) denotes the smoothing factor.</li>
+</ul>
+<p>The case \( s = 1 \) is known as "Laplace smoothing". The case \( s = 0 \) trivially reduces to maximum-likelihood estimates.</p>
+<p><a class="anchor" id="literature"></a></p><dl class="section user"><dt>Literature</dt><dd></dd></dl>
+<p>[1] Tom Mitchell: Machine Learning, McGraw Hill, 1997. Book chapter <em>Generativ and Discriminative Classifiers: Naive Bayes and Logistic Regression</em> available at: <a href="http://www.cs.cmu.edu/~tom/NewChapters.html">http://www.cs.cmu.edu/~tom/NewChapters.html</a></p>
+<p>[2] Wikipedia, Naive Bayes classifier, <a href="http://en.wikipedia.org/wiki/Naive_Bayes_classifier">http://en.wikipedia.org/wiki/Naive_Bayes_classifier</a></p>
+<p><a class="anchor" id="related"></a></p><dl class="section user"><dt>Related Topics</dt><dd>File <a class="el" href="bayes_8sql__in.html" title="SQL functions for naive Bayes. ">bayes.sql_in</a> documenting the SQL functions.</dd></dl>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__bfs.html b/docs/rc/group__grp__bfs.html
new file mode 100644
index 0000000..990a9e6
--- /dev/null
+++ b/docs/rc/group__grp__bfs.html
@@ -0,0 +1,415 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Breadth-First Search</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__bfs.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Breadth-First Search<div class="ingroups"><a class="el" href="group__grp__graph.html">Graph</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li>
+<a href="#bfs">Breadth-First Search</a> </li>
+<li>
+<a href="#notes">Notes</a> </li>
+<li>
+<a href="#examples">Examples</a> </li>
+<li>
+<a href="#literature">Literature</a> </li>
+</ul>
+</div><p>Given a graph and a source vertex, the breadth-first search (BFS) algorithm finds all nodes reachable from the source vertex by searching / traversing the graph in a breadth-first manner.</p>
+<p><a class="anchor" id="bfs"></a></p><dl class="section user"><dt>BFS</dt><dd><pre class="syntax">
+graph_bfs( vertex_table,
+           vertex_id,
+           edge_table,
+           edge_args,
+           source_vertex,
+           out_table,
+           max_distance,
+           directed,
+           grouping_cols
+          )
+</pre></dd></dl>
+<p><b>Arguments</b> </p><dl class="arglist">
+<dt>vertex_table </dt>
+<dd><p class="startdd">TEXT. Name of the table containing the vertex data for the graph. Must contain the column specified in the 'vertex_id' parameter below.</p>
+<p class="enddd"></p>
+</dd>
+<dt>vertex_id </dt>
+<dd><p class="startdd">TEXT, default = 'id'. Name of the column in 'vertex_table' containing vertex ids. The vertex ids are of type INTEGER with no duplicates. They do not need to be contiguous.</p>
+<p class="enddd"></p>
+</dd>
+<dt>edge_table </dt>
+<dd><p class="startdd">TEXT. Name of the table containing the edge data. The edge table must contain columns for source vertex and destination vertex. Column naming convention is described below in the 'edge_args' parameter. In addition to vertex columns, if grouping is used then the columns specified in the 'grouping_cols' parameter must be present. </p>
+<p class="enddd"></p>
+</dd>
+<dt>edge_args </dt>
+<dd><p class="startdd">TEXT. A comma-delimited string containing multiple named arguments of the form "name=value". The following parameters are supported for this string argument:</p><ul>
+<li>src (INTEGER): Name of the column containing the source vertex ids in the edge table. Default column name is 'src'. (This is not to be confused with the 'source_vertex' argument passed to the BFS function.)</li>
+<li>dest (INTEGER): Name of the column containing the destination vertex ids in the edge table. Default column name is 'dest'.</li>
+</ul>
+<p class="enddd"></p>
+</dd>
+<dt>source_vertex </dt>
+<dd><p class="startdd">INTEGER. The source vertex id for the algorithm to start. This vertex id must exist in the 'vertex_id' column of 'vertex_table'.</p>
+<p class="enddd"></p>
+</dd>
+<dt>out_table </dt>
+<dd><p class="startdd">TEXT. Name of the table to store the result of BFS. It contains a row for every vertex that is reachable from the source_vertex. In the presence of grouping columns, only those edges are used for which there are no NULL values in any grouping column. The output table will have the following columns (in addition to the grouping columns):</p><ul>
+<li>vertex_id : The id for any node reachable from source_vertex in addition to the source_vertex. Will use the input parameter 'vertex_id' for column naming.</li>
+<li>dist : The distance in number of edges (or hops) from the source_vertex to where this vertex is located.</li>
+<li>parent : The parent of this vertex in BFS traversal of the graph from source_vertex. Will use 'parent' for column naming. For the case where vertex_id = source_vertex, the value for parent is NULL.</li>
+</ul>
+<p>A summary table named &lt;out_table&gt;_summary is also created. This is an internal table that keeps a record of the input parameters. </p>
+<p class="enddd"></p>
+</dd>
+<dt>max_distance (optional) </dt>
+<dd><p class="startdd">INT, default = NULL. Maximum distance to traverse from the source vertex. When this value is null, traverses until reaches leaf node. E.g., if set to 1 will return only adjacent vertices, if set to 7 will return vertices up to a maximum distance of 7 vertices away.</p>
+<p class="enddd"></p>
+</dd>
+<dt>directed (optional) </dt>
+<dd><p class="startdd">BOOLEAN, default = FALSE. If TRUE the graph will be treated as directed, else it will be treated as an undirected graph.</p>
+<p class="enddd"></p>
+</dd>
+<dt>grouping_cols (optional) </dt>
+<dd>TEXT, default = NULL. A comma-separated list of columns used to group the input into discrete subgraphs. These columns must exist in the edge table. When this value is NULL, no grouping is used and a single BFS result is generated. <dl class="section note"><dt>Note</dt><dd>Expressions are not currently supported for 'grouping_cols'.</dd></dl>
+</dd>
+</dl>
+<dl class="section note"><dt>Note</dt><dd>On a Greenplum cluster, the edge table should be distributed by the source vertex id column for better performance.</dd></dl>
+<p><a class="anchor" id="notes"></a></p><dl class="section user"><dt>Notes</dt><dd></dd></dl>
+<p>The graph_bfs function is a SQL implementation of the well-known breadth-first search algorithm [1] modified appropriately for a relational database. It will find any node in the graph reachable from the source_vertex only once. If a node is reachable by many different paths from the source_vertex (i.e. has more than one parent), then only one of those parents is present in the output table. The BFS result will, in general, be different for different choices of source_vertex.</p>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<ol type="1">
+<li>Create vertex and edge tables to represent the graph: <pre class="syntax">
+DROP TABLE IF EXISTS vertex, edge;
+CREATE TABLE vertex(
+        id INTEGER
+        );
+CREATE TABLE edge(
+        src INTEGER,
+        dest INTEGER
+        );
+INSERT INTO vertex VALUES
+(0),
+(1),
+(2),
+(3),
+(4),
+(5),
+(6),
+(7),
+(8),
+(9),
+(10),
+(11)
+;
+INSERT INTO edge VALUES
+(0, 5),
+(1, 0),
+(1, 3),
+(2, 6),
+(3, 4),
+(3, 5),
+(4, 2),
+(8, 9),
+(9, 10),
+(9, 11),
+(10, 8);
+</pre></li>
+<li>Traverse undirected graph from vertex 3: <pre class="syntax">
+DROP TABLE IF EXISTS out, out_summary;
+SELECT madlib.graph_bfs(
+                         'vertex',      -- Vertex table
+                         NULL,          -- Vertix id column (NULL means use default naming)
+                         'edge',        -- Edge table
+                         NULL,          -- Edge arguments (NULL means use default naming)
+                         3,             -- Source vertex for BFS
+                         'out');        -- Output table of nodes reachable from source_vertex
+                         -- Default values used for the other arguments
+SELECT * FROM out ORDER BY dist,id;
+</pre> <pre class="result">
+ id | dist | parent
+----+------+--------
+  3 |    0 |      3
+  1 |    1 |      3
+  4 |    1 |      3
+  5 |    1 |      3
+  0 |    2 |      1
+  2 |    2 |      4
+  6 |    3 |      2
+(7 rows)
+</pre> <pre class="syntax">
+SELECT * FROM out_summary;
+</pre> <pre class="result">
+ vertex_table | vertex_id | edge_table | edge_args | source_vertex | out_table | max_distance | directed | grouping_cols
+--------------+-----------+------------+-----------+---------------+-----------+--------------+----------+---------------
+ vertex       | NULL      | edge       | NULL      |             3 | out       |              |          | NULL
+(1 row)
+</pre></li>
+<li>In this example, we use max_distance to limit the search distance. <pre class="syntax">
+DROP TABLE IF EXISTS out_max, out_max_summary;
+SELECT madlib.graph_bfs(
+                         'vertex',      -- Vertex table
+                         NULL,          -- Vertix id column (NULL means use default naming)
+                         'edge',        -- Edge table
+                         NULL,          -- Edge arguments (NULL means use default naming)
+                         3,             -- Source vertex for BFS
+                         'out_max',     -- Output table of nodes reachable from source_vertex
+                         2);            -- Maximum distance to traverse from source_vertex
+                         -- Default values used for the other arguments
+SELECT * FROM out_max ORDER BY dist,id;
+</pre> <pre class="result">
+ id | dist | parent
+----+------+--------
+  3 |    0 |      3
+  1 |    1 |      3
+  4 |    1 |      3
+  5 |    1 |      3
+  0 |    2 |      1
+  2 |    2 |      4
+(6 rows)
+</pre></li>
+<li>Now let's do an example using different column names in the tables (i.e., not the defaults). Create the vertex and edge tables: <pre class="syntax">
+DROP TABLE IF EXISTS vertex_alt, edge_alt;
+CREATE TABLE vertex_alt AS SELECT id AS v_id FROM vertex;
+CREATE TABLE edge_alt AS SELECT src AS n1, dest AS n2 FROM edge;
+</pre></li>
+<li>Run BFS from vertex 8: <pre class="syntax">
+DROP TABLE IF EXISTS out_alt, out_alt_summary;
+SELECT madlib.graph_bfs(
+                         'vertex_alt',                  -- Vertex table
+                         'v_id',                        -- Vertex id column (NULL means use default naming)
+                         'edge_alt',                    -- Edge table
+                         'src=n1, dest=n2',             -- Edge arguments (NULL means use default naming)
+                         8,                             -- Source vertex for BFS
+                         'out_alt');                    -- Output table of nodes reachable from source_vertex
+SELECT * FROM out_alt ORDER BY v_id;
+</pre> <pre class="result">
+ v_id | dist | parent
+------+------+--------
+    8 |    0 |      8
+    9 |    1 |      8
+   10 |    1 |      8
+   11 |    2 |      9
+</pre></li>
+<li>Now we show an example where the graph is treated as a directed graph. <pre class="syntax">
+DROP TABLE IF EXISTS out_alt_dir, out_alt_dir_summary;
+SELECT madlib.graph_bfs(
+                         'vertex_alt',                  -- Vertex table
+                         'v_id',                        -- Vertex id column (NULL means use default naming)
+                         'edge_alt',                    -- Edge table
+                         'src=n1, dest=n2',             -- Edge arguments (NULL means use default naming)
+                         8,                             -- Source vertex for BFS
+                         'out_alt_dir',                 -- Output table of nodes reachable from source_vertex
+                         NULL,                          -- Maximum distance to traverse from source_vertex
+                         TRUE);                         -- Flag for specifying directed graph
+SELECT * FROM out_alt_dir ORDER BY v_id;
+</pre> <pre class="result">
+ v_id | dist | parent
+------+------+--------
+    8 |    0 |      8
+    9 |    1 |      8
+   10 |    2 |      9
+   11 |    2 |      9
+(4 rows)
+</pre> Notice that, with the graph being treated as directed, the parent of v_id=10 is now vertex 9 and not 8 as in the undirected case.</li>
+<li>Create a graph with 2 groups: <pre class="syntax">
+DROP TABLE IF EXISTS edge_gr;
+CREATE TABLE edge_gr(
+                  g1 INTEGER,
+                  g2 TEXT,
+                  src INTEGER,
+                  dest INTEGER
+                );
+INSERT INTO edge_gr VALUES
+(100, 'a', 0, 5),
+(100, 'a', 1, 0),
+(100, 'a', 1, 3),
+(100, 'a', 2, 6),
+(100, 'a', 3, 4),
+(100, 'a', 3, 5),
+(100, 'a', 4, 2),
+(100, 'a', 8, 9),
+(100, 'a', 9, 10),
+(100, 'a', 9, 11),
+(100, 'a', 10, 8),
+(202, 'c', 8, 9),
+(202, 'c', 9, 10),
+(202, 'c', 9, 11),
+(202, 'c', 10, 8)
+;
+</pre></li>
+<li>Run BFS for all groups from a given source_vertex. <pre class="syntax">
+DROP TABLE IF EXISTS out_gr, out_gr_summary;
+SELECT madlib.graph_bfs(
+                         'vertex',      -- Vertex table
+                         NULL,          -- Vertex id column (NULL means use default naming)
+                         'edge_gr',     -- Edge table
+                         NULL,          -- Edge arguments (NULL means use default naming)
+                         8,             -- Source vertex for BFS
+                         'out_gr',      -- Output table of nodes reachable from source_vertex
+                         NULL,          -- Maximum distance to traverse from source_vertex
+                         NULL,          -- Flag for specifying directed graph
+                         'g1,g2'        -- Grouping columns
+);
+SELECT * FROM out_gr ORDER BY g1,g2,dist,id;
+</pre> <pre class="result">
+ g1  | g2 | id | dist | parent
+-----+----+----+------+--------
+ 100 | a  |  8 |    0 |      8
+ 100 | a  |  9 |    1 |      8
+ 100 | a  | 10 |    1 |      8
+ 100 | a  | 11 |    2 |      9
+ 202 | c  |  8 |    0 |      8
+ 202 | c  |  9 |    1 |      8
+ 202 | c  | 10 |    1 |      8
+ 202 | c  | 11 |    2 |      9
+(8 rows)
+</pre> If source_vertex is not present in a group, then that group will not appear in the output table. <pre class="syntax">
+DROP TABLE IF EXISTS out_gr, out_gr_summary;
+SELECT madlib.graph_bfs(
+                         'vertex',      -- Vertex table
+                         NULL,          -- Vertex id column (NULL means use default naming)
+                         'edge_gr',     -- Edge table
+                         NULL,          -- Edge arguments (NULL means use default naming)
+                         3,             -- Source vertex for BFS
+                         'out_gr',      -- Output table of nodes reachable from source_vertex
+                         NULL,          -- Maximum distance to traverse from source_vertex
+                         NULL,          -- Flag for specifying directed graph
+                         'g1,g2'        -- Grouping columns
+);
+SELECT * FROM out_gr ORDER BY g1,g2,dist,id;
+</pre> <pre class="result">
+ g1  | g2 | id | dist | parent
+-----+----+----+------+--------
+ 100 | a  |  3 |    0 |      3
+ 100 | a  |  1 |    1 |      3
+ 100 | a  |  4 |    1 |      3
+ 100 | a  |  5 |    1 |      3
+ 100 | a  |  0 |    2 |      1
+ 100 | a  |  2 |    2 |      4
+ 100 | a  |  6 |    3 |      2
+(7 rows)
+</pre></li>
+</ol>
+<p><a class="anchor" id="literature"></a></p><dl class="section user"><dt>Literature</dt><dd></dd></dl>
+<p>[1] Breadth-first Search algorithm. <a href="https://en.wikipedia.org/wiki/Breadth-first_search">https://en.wikipedia.org/wiki/Breadth-first_search</a> </p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__cg.html b/docs/rc/group__grp__cg.html
new file mode 100644
index 0000000..55bc8b5
--- /dev/null
+++ b/docs/rc/group__grp__cg.html
@@ -0,0 +1,185 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Conjugate Gradient</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__cg.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Conjugate Gradient<div class="ingroups"><a class="el" href="group__grp__early__stage.html">Early Stage Development</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li>
+<a href="#syntax">Function Syntax</a> </li>
+<li>
+<a href="#examples">Examples</a> </li>
+<li>
+<a href="#related">Related Topics</a> </li>
+</ul>
+</div><dl class="section warning"><dt>Warning</dt><dd><em> This MADlib method is still in early stage development. Interface and implementation are subject to change. </em></dd></dl>
+<p>This function uses the iterative conjugate gradient method [1] to find a solution to the function: </p><p class="formulaDsp">
+\[ \boldsymbol Ax = \boldsymbol b \]
+</p>
+<p> where \( \boldsymbol A \) is a symmetric, positive definite matrix and \(x\) and \( \boldsymbol b \) are vectors.</p>
+<p><a class="anchor" id="syntax"></a></p><dl class="section user"><dt>Function Syntax</dt><dd>Conjugate gradient returns x as an array. It has the following syntax.</dd></dl>
+<pre class="syntax">
+conjugate_gradient( table_name,
+                    name_of_row_values_col,
+                    name_of_row_number_col,
+                    aray_of_b_values,
+                    desired_precision
+                  )
+</pre><p>Matrix \( \boldsymbol A \) is assumed to be stored in a table where each row consists of at least two columns: array containing values of a given row, row number: </p><pre>{TABLE|VIEW} <em>matrix_A</em> (
+    <em>row_number</em> FLOAT,
+    <em>row_values</em> FLOAT[],
+)</pre><p> The number of elements in each row should be the same.</p>
+<p>\( \boldsymbol b \) is passed as a FLOAT[] to the function.</p>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd><ol type="1">
+<li>Construct matrix A according to structure. <pre class="example">
+SELECT * FROM data;
+</pre> Result: <pre class="result">
+ row_num | row_val
+&#160;--------+---------
+       1 | {2,1}
+       2 | {1,4}
+(2 rows)
+</pre></li>
+<li>Call the conjugate gradient function. <pre class="example">
+SELECT conjugate_gradient( 'data',
+                           'row_val',
+                           'row_num',
+                           '{2,1}',
+                           1E-6,1
+                         );
+</pre> <pre class="result">
+INFO:  COMPUTE RESIDUAL ERROR 14.5655661859659
+INFO:  ERROR 0.144934004246004
+INFO:  ERROR 3.12963615962926e-31
+INFO:  TEST FINAL ERROR 2.90029642185163e-29
+    conjugate_gradient
+&#160;--------------------------
+ {1,-1.31838984174237e-15}
+(1 row)
+</pre></li>
+</ol>
+</dd></dl>
+<p><a class="anchor" id="literature"></a></p><dl class="section user"><dt>Literature</dt><dd>[1] "Conjugate gradient method" Wikipedia - <a href="http://en.wikipedia.org/wiki/Conjugate_gradient_method">http://en.wikipedia.org/wiki/Conjugate_gradient_method</a></dd></dl>
+<p><a class="anchor" id="related"></a></p><dl class="section user"><dt>Related Topics</dt><dd>File <a class="el" href="conjugate__gradient_8sql__in.html" title="SQL function computing Conjugate Gradient. ">conjugate_gradient.sql_in</a> documenting the SQL function. </dd></dl>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:59 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__clustered__errors.html b/docs/rc/group__grp__clustered__errors.html
new file mode 100644
index 0000000..911be6d
--- /dev/null
+++ b/docs/rc/group__grp__clustered__errors.html
@@ -0,0 +1,405 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Clustered Variance</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__clustered__errors.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Clustered Variance<div class="ingroups"><a class="el" href="group__grp__super.html">Supervised Learning</a> &raquo; <a class="el" href="group__grp__regml.html">Regression Models</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li>
+<a href="#train_linregr">Clustered Variance Linear Regression Training Function</a> </li>
+<li>
+<a href="#train_logregr">Clustered Variance Logistic Regression Training Function</a> </li>
+<li>
+<a href="#train_mlogregr">Clustered Variance Multinomial Logistic Regression Training Function</a> </li>
+<li>
+<a href="#train_cox">Clustered Variance for Cox Proportional Hazards model</a> </li>
+<li>
+<a href="#examples">Examples</a> </li>
+<li>
+<a href="#notes">Notes</a> </li>
+<li>
+<a href="#background">Technical Background</a> </li>
+<li>
+<a href="#related">Related Topics</a> </li>
+</ul>
+</div><p>The Clustered Variance module adjusts standard errors for clustering. For example, replicating a dataset 100 times should not increase the precision of parameter estimates, but performing this procedure with the IID assumption will actually do this. Another example is in economics of education research, it is reasonable to expect that the error terms for children in the same class are not independent. Clustering standard errors can correct for this.</p>
+<p>The MADlib Clustered Variance module includes functions to calculate linear, logistic, and multinomial logistic regression problems.</p>
+<p><a class="anchor" id="train_linregr"></a></p><dl class="section user"><dt>Clustered Variance Linear Regression Training Function</dt><dd></dd></dl>
+<p>The clustered variance linear regression training function has the following syntax. </p><pre class="syntax">
+clustered_variance_linregr ( source_table,
+                             out_table,
+                             dependent_varname,
+                             independent_varname,
+                             clustervar,
+                             grouping_cols
+                           )
+</pre><p> <b>Arguments</b> </p><dl class="arglist">
+<dt>source_table </dt>
+<dd><p class="startdd">TEXT. The name of the table containing the input data.</p>
+<p class="enddd"></p>
+</dd>
+<dt>out_table </dt>
+<dd><p class="startdd">VARCHAR. Name of the generated table containing the output model. The output table contains the following columns. </p><table class="output">
+<tr>
+<th>coef </th><td>DOUBLE PRECISION[]. Vector of the coefficients of the regression.  </td></tr>
+<tr>
+<th>std_err </th><td>DOUBLE PRECISION[]. Vector of the standard error of the coefficients.  </td></tr>
+<tr>
+<th>t_stats </th><td>DOUBLE PRECISION[]. Vector of the t-stats of the coefficients.  </td></tr>
+<tr>
+<th>p_values </th><td>DOUBLE PRECISION[]. Vector of the p-values of the coefficients.  </td></tr>
+</table>
+<p>A summary table named &lt;out_table&gt;_summary is also created, which is the same as the summary table created by linregr_train function. Please refer to the documentation for linear regression for details.</p>
+<p></p>
+<p class="enddd"></p>
+</dd>
+<dt>dependent_varname </dt>
+<dd>TEXT. An expression to evaluate for the dependent variable. </dd>
+<dt>independent_varname </dt>
+<dd>TEXT. An Expression to evalue for the independent variables. </dd>
+<dt>clustervar </dt>
+<dd>TEXT. A comma-separated list of the columns to use as cluster variables. </dd>
+<dt>grouping_cols (optional) </dt>
+<dd>TEXT, default: NULL. <em>Not currently implemented. Any non-NULL value is ignored.</em> An expression list used to group the input dataset into discrete groups, running one regression per group. Similar to the SQL GROUP BY clause. When this value is null, no grouping is used and a single result model is generated. </dd>
+</dl>
+<p><a class="anchor" id="train_logregr"></a></p><dl class="section user"><dt>Clustered Variance Logistic Regression Training Function</dt><dd></dd></dl>
+<p>The clustered variance logistic regression training function has the following syntax. </p><pre class="syntax">
+clustered_variance_logregr( source_table,
+                            out_table,
+                            dependent_varname,
+                            independent_varname,
+                            clustervar,
+                            grouping_cols,
+                            max_iter,
+                            optimizer,
+                            tolerance,
+                            verbose_mode
+                          )
+</pre><p> <b>Arguments</b> </p><dl class="arglist">
+<dt>source_table </dt>
+<dd>TEXT. The name of the table containing the input data. </dd>
+<dt>out_table </dt>
+<dd><p class="startdd">VARCHAR. Name of the generated table containing the output model. The output table has the following columns: </p><table class="output">
+<tr>
+<th>coef </th><td>Vector of the coefficients of the regression.  </td></tr>
+<tr>
+<th>std_err </th><td>Vector of the standard error of the coefficients.  </td></tr>
+<tr>
+<th>z_stats </th><td>Vector of the z-stats of the coefficients.  </td></tr>
+<tr>
+<th>p_values </th><td>Vector of the p-values of the coefficients.  </td></tr>
+</table>
+<p>A summary table named &lt;out_table&gt;_summary is also created, which is the same as the summary table created by logregr_train function. Please refer to the documentation for logistic regression for details.</p>
+<p class="enddd"></p>
+</dd>
+<dt>dependent_varname </dt>
+<dd>TEXT. An expression to evaluate for the dependent variable. </dd>
+<dt>independent_varname </dt>
+<dd>TEXT. An expression to evaluate for the independent variable. </dd>
+<dt>clustervar </dt>
+<dd>TEXT. A comma-separated list of columns to use as cluster variables. </dd>
+<dt>grouping_cols (optional) </dt>
+<dd>TEXT, default: NULL. <em>Not yet implemented. Any non-NULL values are ignored.</em> An expression list used to group the input dataset into discrete groups, running one regression per group. Similar to the SQL GROUP BY clause. When this value is NULL, no grouping is used and a single result model is generated. </dd>
+<dt>max_iter (optional) </dt>
+<dd>INTEGER, default: 20. The maximum number of iterations that are allowed. </dd>
+<dt>optimizer (optional) </dt>
+<dd>TEXT, default: 'irls'. The name of the optimizer to use: <ul>
+<li>
+'newton' or 'irls': Iteratively reweighted least squares </li>
+<li>
+'cg': conjugate gradient </li>
+<li>
+'igd': incremental gradient descent. </li>
+</ul>
+</dd>
+<dt>tolerance (optional) </dt>
+<dd>FLOAT8, default: 0.0001 The difference between log-likelihood values in successive iterations that should indicate convergence. A zero disables the convergence criterion, so that execution stops after <em>n</em> Iterations have completed. </dd>
+<dt>verbose_mode (optional) </dt>
+<dd>BOOLEAN, default FALSE. Provides verbose_mode output of the results of training. </dd>
+</dl>
+<p><a class="anchor" id="train_mlogregr"></a></p><dl class="section user"><dt>Clustered Variance Multinomial Logistic Regression Training Function</dt><dd></dd></dl>
+<pre class="syntax">
+clustered_variance_mlogregr( source_table,
+                             out_table,
+                             dependent_varname,
+                             independent_varname,
+                             cluster_varname,
+                             ref_category,
+                             grouping_cols,
+                             optimizer_params,
+                             verbose_mode
+                           )
+</pre><p> <b>Arguments</b> </p><dl class="arglist">
+<dt>source_table </dt>
+<dd>TEXT. The name of the table containing the input data. </dd>
+<dt>out_table </dt>
+<dd><p class="startdd">TEXT. The name of the table where the regression model will be stored. The output table has the following columns: </p><table class="output">
+<tr>
+<th>category </th><td>The category.  </td></tr>
+<tr>
+<th>ref_category </th><td>The refererence category used for modeling.  </td></tr>
+<tr>
+<th>coef </th><td>Vector of the coefficients of the regression.  </td></tr>
+<tr>
+<th>std_err </th><td>Vector of the standard error of the coefficients.  </td></tr>
+<tr>
+<th>z_stats </th><td>Vector of the z-stats of the coefficients.  </td></tr>
+<tr>
+<th>p_values </th><td>Vector of the p-values of the coefficients.  </td></tr>
+</table>
+<p class="enddd">A summary table named &lt;out_table&gt;_summary is also created, which is the same as the summary table created by mlogregr_train function. Please refer to the documentation for multinomial logistic regression for details.  </p>
+</dd>
+<dt>dependent_varname </dt>
+<dd>TEXT. An expression to evaluate for the dependent variable. </dd>
+<dt>independent_varname </dt>
+<dd>TEXT. An expression to evaluate for the independent variable. </dd>
+<dt>cluster_varname </dt>
+<dd>TEXT. A comma-separated list of columns to use as cluster variables. </dd>
+<dt>ref_category (optional) </dt>
+<dd>INTEGER. Reference category in the range [0, num_category). </dd>
+<dt>groupingvarng_cols (optional) </dt>
+<dd>TEXT, default: NULL. <em>Not yet implemented. Any non-NULL values are ignored.</em> A comma-separated list of columns to use as grouping variables. </dd>
+<dt>optimizer_params (optional) </dt>
+<dd>TEXT, default: NULL, which uses the default values of optimizer parameters: max_iter=20, optimizer='newton', tolerance=1e-4. It should be a string that contains pairs of 'key=value' separated by commas. </dd>
+<dt>verbose_mode (optional) </dt>
+<dd>BOOLEAN, default FALSE. If TRUE, detailed information is printed when computing logistic regression. </dd>
+</dl>
+<p><a class="anchor" id="train_cox"></a></p><dl class="section user"><dt>Clustered Variance for Cox Proportional Hazards model</dt><dd></dd></dl>
+<p>The clustered robust variance estimator function for the Cox Proportional Hazards model has the following syntax. </p><pre class="syntax">
+clustered_variance_coxph(model_table, output_table, clustervar)
+</pre><p><b>Arguments</b> </p><dl class="arglist">
+<dt>model_table </dt>
+<dd>TEXT. The name of the model table, which is exactaly the same as the 'output_table' parameter of <a class="el" href="cox__prop__hazards_8sql__in.html#a737450bbfe0f10204b0074a9d45b0cef" title="Compute cox-regression coefficients and diagnostic statistics. ">coxph_train()</a> function. </dd>
+<dt>output_table </dt>
+<dd>TEXT. The name of the table where the output is saved. It has the following columns: <table class="output">
+<tr>
+<th>coef </th><td>FLOAT8[]. Vector of the coefficients.  </td></tr>
+<tr>
+<th>loglikelihood </th><td>FLOAT8. Log-likelihood value of the MLE estimate.  </td></tr>
+<tr>
+<th>std_err </th><td>FLOAT8[]. Vector of the standard error of the coefficients.  </td></tr>
+<tr>
+<th>clustervar </th><td>TEXT. A comma-separated list of columns to use as cluster variables.  </td></tr>
+<tr>
+<th>clustered_se </th><td>FLOAT8[]. Vector of the robust standard errors of the coefficients.  </td></tr>
+<tr>
+<th>clustered_z </th><td>FLOAT8[]. Vector of the robust z-stats of the coefficients.  </td></tr>
+<tr>
+<th>clustered_p </th><td>FLOAT8[]. Vector of the robust p-values of the coefficients.  </td></tr>
+<tr>
+<th>hessian </th><td>FLOAT8[]. The Hessian matrix.  </td></tr>
+</table>
+</dd>
+<dt>clustervar </dt>
+<dd>TEXT. A comma-separated list of columns to use as cluster variables. </dd>
+</dl>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<ol type="1">
+<li>View online help for the clustered variance linear regression function. <pre class="example">
+SELECT madlib.clustered_variance_linregr();
+</pre></li>
+<li>Run the linear regression function and view the results. <pre class="example">
+DROP TABLE IF EXISTS out_table, out_table_summary;
+SELECT madlib.clustered_variance_linregr( 'abalone',
+                                          'out_table',
+                                          'rings',
+                                          'ARRAY[1, diameter, length, width]',
+                                          'sex',
+                                          NULL
+                                        );
+SELECT * FROM out_table;
+</pre></li>
+<li>View online help for the clustered variance logistic regression function. <pre class="example">
+SELECT madlib.clustered_variance_logregr();
+</pre></li>
+<li>Run the logistic regression function and view the results. <pre class="example">
+DROP TABLE IF EXISTS out_table, out_table_summary;
+SELECT madlib.clustered_variance_logregr( 'abalone',
+                                          'out_table',
+                                          'rings &lt; 10',
+                                          'ARRAY[1, diameter, length, width]',
+                                          'sex'
+                                        );
+SELECT * FROM out_table;
+</pre></li>
+<li>View online help for the clustered variance multinomial logistic regression function. <pre class="example">
+SELECT madlib.clustered_variance_mlogregr();
+</pre></li>
+<li>Run the multinomial logistic regression and view the results. <pre class="example">
+DROP TABLE IF EXISTS out_table, out_table_summary;
+SELECT madlib.clustered_variance_mlogregr( 'abalone',
+                                           'out_table',
+                                           'CASE WHEN rings &lt; 10 THEN 1 ELSE 0 END',
+                                           'ARRAY[1, diameter, length, width]',
+                                           'sex',
+                                           0
+                                         );
+SELECT * FROM out_table;
+</pre></li>
+<li>Run the Cox Proportional Hazards regression and compute the clustered robust estimator. <pre class="example">
+DROP TABLE IF EXISTS lung_cl_out;
+DROP TABLE IF EXISTS lung_out;
+DROP TABLE IF EXISTS lung_out_summary;
+SELECT madlib.coxph_train('lung',
+                          'lung_out',
+                          'time',
+                          'array[age, "ph.ecog"]',
+                          'TRUE',
+                          NULL,
+                          NULL);
+SELECT madlib.clustered_variance_coxph('lung_out',
+                                       'lung_cl_out',
+                                       '"ph.karno"');
+SELECT * FROM lung_cl_out;
+</pre></li>
+</ol>
+<p><a class="anchor" id="notes"></a></p><dl class="section user"><dt>Notes</dt><dd></dd></dl>
+<ul>
+<li>Note that we need to manually include an intercept term in the independent variable expression. The NULL value of <em>groupingvar</em> means that there is no grouping in the calculation.</li>
+</ul>
+<p><a class="anchor" id="background"></a></p><dl class="section user"><dt>Technical Background</dt><dd></dd></dl>
+<p>Assume that the data can be separated into \(m\) clusters. Usually this can be done by grouping the data table according to one or multiple columns.</p>
+<p>The estimator has a similar form to the usual sandwich estimator </p><p class="formulaDsp">
+\[ S(\vec{c}) = B(\vec{c}) M(\vec{c}) B(\vec{c}) \]
+</p>
+<p>The bread part is the same as Huber-White sandwich estimator </p><p class="formulaDsp">
+\begin{eqnarray} B(\vec{c}) &amp; = &amp; \left(-\sum_{i=1}^{n} H(y_i, \vec{x}_i, \vec{c})\right)^{-1}\\ &amp; = &amp; \left(-\sum_{i=1}^{n}\frac{\partial^2 l(y_i, \vec{x}_i, \vec{c})}{\partial c_\alpha \partial c_\beta}\right)^{-1} \end{eqnarray}
+</p>
+<p> where \(H\) is the hessian matrix, which is the second derivative of the target function </p><p class="formulaDsp">
+\[ L(\vec{c}) = \sum_{i=1}^n l(y_i, \vec{x}_i, \vec{c})\ . \]
+</p>
+<p>The meat part is different </p><p class="formulaDsp">
+\[ M(\vec{c}) = \bf{A}^T\bf{A} \]
+</p>
+<p> where the \(m\)-th row of \(\bf{A}\) is </p><p class="formulaDsp">
+\[ A_m = \sum_{i\in G_m}\frac{\partial l(y_i,\vec{x}_i,\vec{c})}{\partial \vec{c}} \]
+</p>
+<p> where \(G_m\) is the set of rows that belong to the same cluster.</p>
+<p>We can compute the quantities of \(B\) and \(A\) for each cluster during one scan through the data table in an aggregate function. Then sum over all clusters to the full \(B\) and \(A\) in the outside of the aggregate function. At last, the matrix mulplitications are done in a separate function on the master node.</p>
+<p>When multinomial logistic regression is computed before the multinomial clustered variance calculation, it uses a default reference category of zero and the regression coefficients are included in the output table. The regression coefficients in the output are in the same order as multinomial logistic regression function, which is described below. For a problem with \( K \) dependent variables \( (1, ..., K) \) and \( J \) categories \( (0, ..., J-1) \), let \( {m_{k,j}} \) denote the coefficient for dependent variable \( k \) and category \( j \). The output is \( {m_{k_1, j_0}, m_{k_1, j_1} \ldots m_{k_1, j_{J-1}}, m_{k_2, j_0}, m_{k_2, j_1} \ldots m_{k_K, j_{J-1}}} \). The order is NOT CONSISTENT with the multinomial regression marginal effect calculation with function <em>marginal_mlogregr</em>. This is deliberate because the interfaces of all multinomial regressions (robust, clustered, ...) will be moved to match that used in marginal.</p>
+<p><a class="anchor" id="literature"></a></p><dl class="section user"><dt>Literature</dt><dd></dd></dl>
+<p>[1] Standard, Robust, and Clustered Standard Errors Computed in R, <a href="http://diffuseprior.wordpress.com/2012/06/15/standard-robust-and-clustered-standard-errors-computed-in-r/">http://diffuseprior.wordpress.com/2012/06/15/standard-robust-and-clustered-standard-errors-computed-in-r/</a></p>
+<p><a class="anchor" id="related"></a></p><dl class="section user"><dt>Related Topics</dt><dd>File <a class="el" href="clustered__variance_8sql__in.html">clustered_variance.sql_in</a> documenting the clustered variance SQL functions.</dd></dl>
+<p>File <a class="el" href="clustered__variance__coxph_8sql__in.html" title="SQL functions for clustered robust cox proportional hazards regression. ">clustered_variance_coxph.sql_in</a> documenting the clustered variance for Cox proportional hazards SQL functions.</p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__clustering.html b/docs/rc/group__grp__clustering.html
new file mode 100644
index 0000000..dfb2e60
--- /dev/null
+++ b/docs/rc/group__grp__clustering.html
@@ -0,0 +1,139 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Clustering</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__clustering.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#groups">Modules</a>  </div>
+  <div class="headertitle">
+<div class="title">Clustering<div class="ingroups"><a class="el" href="group__grp__unsupervised.html">Unsupervised Learning</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Methods for clustering data. </p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group__grp__kmeans"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__kmeans.html">k-Means Clustering</a></td></tr>
+<tr class="memdesc:group__grp__kmeans"><td class="mdescLeft">&#160;</td><td class="mdescRight">Partitions a set of observations into clusters by finding centroids that minimize the sum of observations' distances from their closest centroid. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:59 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__clustering.js b/docs/rc/group__grp__clustering.js
new file mode 100644
index 0000000..61858da
--- /dev/null
+++ b/docs/rc/group__grp__clustering.js
@@ -0,0 +1,4 @@
+var group__grp__clustering =
+[
+    [ "k-Means Clustering", "group__grp__kmeans.html", null ]
+];
\ No newline at end of file
diff --git a/docs/rc/group__grp__cols2vec.html b/docs/rc/group__grp__cols2vec.html
new file mode 100644
index 0000000..0559a0a
--- /dev/null
+++ b/docs/rc/group__grp__cols2vec.html
@@ -0,0 +1,400 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Columns to Vector</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__cols2vec.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Columns to Vector<div class="ingroups"><a class="el" href="group__grp__other__functions.html">Utilities</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li class="level1">
+<a href="#cols2vec_syntax">Syntax</a> </li>
+<li class="level1">
+<a href="#cols2vec_usage">Usage</a> </li>
+<li class="level1">
+<a href="#cols2vec_example">Examples</a> </li>
+</ul>
+</div><dl class="section user"><dt>About</dt><dd>Convert feature columns in a table into an array in a single column.</dd></dl>
+<p>Given a table with a number of feature columns, this function will create an output table that contains the feature columns in an array. A summary table will also be created that contains the names of the features combined into array, so that this process can be reversed using the function vec2cols.</p>
+<p><a class="anchor" id="cols2vec_usage"></a></p><dl class="section user"><dt>Usage</dt><dd></dd></dl>
+<pre class="syntax">
+cols2vec(
+    source_table,
+    output_table,
+    list_of_features,
+    list_of_features_to_exclude,
+    cols_to_output
+)
+</pre><p><b>Arguments</b> </p><dl class="arglist">
+<dt>source_table </dt>
+<dd><p class="startdd">TEXT. Name of the table containing the source data.</p>
+<p class="enddd"></p>
+</dd>
+<dt>output_table </dt>
+<dd><p class="startdd">TEXT. Name of the generated table containing the output.</p>
+<p class="enddd"></p>
+</dd>
+<dt>list_of_features </dt>
+<dd><p class="startdd">TEXT. Comma-separated string of column names or expressions to put into feature array. Can also be '*' implying all columns are to be put into feature array (except for the ones included in the next argument that lists exclusions). Type casting will be done as per the regular type casting rules of the underlying database. Array columns in the source table are not supported in the 'list_of_features' parameter. Also, all of the features to be included must be of the same type and must not have null values.</p>
+<p class="enddd"></p>
+</dd>
+<dt>list_of_features_to_exclude (optional) </dt>
+<dd><p class="startdd">TEXT. Default NULL. Comma-separated string of column names to exclude from the feature array. Typically used when 'list_of_features' is set to '*'.</p>
+<p class="enddd"></p>
+</dd>
+<dt>cols_to_output (optional) </dt>
+<dd>TEXT. Default NULL. Comma-separated string of column names from the source table to keep in the output table, in addition to the feature array. To keep all columns from the source table, use '*' for this parameter.  </dd>
+</dl>
+<p><b>Output table</b> <br />
+ The output table produced by the cols2vec function contains the following columns: </p><table class="output">
+<tr>
+<th>&lt;...&gt; </th><td>Columns from source table, depending on which ones are kept (if any).   </td></tr>
+<tr>
+<th>feature_vector </th><td>Column that contains the feature array.  </td></tr>
+</table>
+<p><b>Output summary table</b> <br />
+ A summary table named <em>&lt;output_table&gt;_summary</em> is also created that contains: </p><table class="output">
+<tr>
+<th>source_table </th><td>Name of the table containing the source data.  </td></tr>
+<tr>
+<th>list_of_features </th><td>List of features to put in vector.  </td></tr>
+<tr>
+<th>list_of_features_to_exclude </th><td>Features specified by the user to exclude from 'list_of_features'.  </td></tr>
+<tr>
+<th>feature_names </th><td>Names of the features that were nested (converted to a vector) in the output table.  </td></tr>
+</table>
+<p><a class="anchor" id="cols2vec_example"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<ol type="1">
+<li>Load sample data: <pre class="example">
+DROP TABLE IF EXISTS golf CASCADE;
+CREATE TABLE golf (
+    id integer NOT NULL,
+    "OUTLOOK" text,
+    temperature double precision,
+    humidity double precision,
+    "Temp_Humidity" double precision[],
+    clouds_airquality text[],
+    windy boolean,
+    class text,
+    observation_weight double precision
+);
+INSERT INTO golf VALUES
+(1,'sunny', 85, 85, ARRAY[85, 85],ARRAY['none', 'unhealthy'], 'false','Don''t Play', 5.0),
+(2, 'sunny', 80, 90, ARRAY[80, 90], ARRAY['none', 'moderate'], 'true', 'Don''t Play', 5.0),
+(3, 'overcast', 83, 78, ARRAY[83, 78], ARRAY['low', 'moderate'], 'false', 'Play', 1.5),
+(4, 'rain', 70, 96, ARRAY[70, 96], ARRAY['low', 'moderate'], 'false', 'Play', 1.0),
+(5, 'rain', 68, 80, ARRAY[68, 80], ARRAY['medium', 'good'], 'false', 'Play', 1.0),
+(6, 'rain', 65, 70, ARRAY[65, 70], ARRAY['low', 'unhealthy'], 'true', 'Don''t Play', 1.0),
+(7, 'overcast', 64, 65, ARRAY[64, 65], ARRAY['medium', 'moderate'], 'true', 'Play', 1.5),
+(8, 'sunny', 72, 95, ARRAY[72, 95], ARRAY['high', 'unhealthy'], 'false', 'Don''t Play', 5.0),
+(9, 'sunny', 69, 70, ARRAY[69, 70], ARRAY['high', 'good'], 'false', 'Play', 5.0),
+(10, 'rain', 75, 80, ARRAY[75, 80], ARRAY['medium', 'good'], 'false', 'Play', 1.0),
+(11, 'sunny', 75, 70, ARRAY[75, 70], ARRAY['none', 'good'], 'true', 'Play', 5.0),
+(12, 'overcast', 72, 90, ARRAY[72, 90], ARRAY['medium', 'moderate'], 'true', 'Play', 1.5),
+(13, 'overcast', 81, 75, ARRAY[81, 75], ARRAY['medium', 'moderate'], 'false', 'Play', 1.5),
+(14, 'rain', 71, 80, ARRAY[71, 80], ARRAY['low', 'unhealthy'], 'true', 'Don''t Play', 1.0);
+</pre></li>
+<li>Run cols2vec to combine the temperature and humidity columns into a single array feature. <pre class="example">
+DROP TABLE IF EXISTS cols2vec_result, cols2vec_result_summary;
+SELECT madlib.cols2vec(
+    'golf',
+    'cols2vec_result',
+    'temperature, humidity'
+);
+SELECT * FROM cols2vec_result;
+</pre> <pre class="result">
+ feature_vector
+----------------+
+ {85,85}
+ {80,90}
+ {83,78}
+ {70,96}
+ {68,80}
+ {65,70}
+ {64,65}
+ {72,95}
+ {69,70}
+ {75,80}
+ {75,70}
+ {72,90}
+ {81,75}
+ {71,80}
+(14 rows)
+</pre> View the summary table: <pre class="example">
+\x on
+SELECT * FROM cols2vec_result_summary;
+\x off
+</pre> <pre class="result">
+-[ RECORD 1 ]---------------+----------------------------------------------------------------
+source_table                | golf
+list_of_features            | temperature, humidity
+list_of_features_to_exclude | None
+feature_names               | {temperature,humidity}
+</pre></li>
+<li>Combine the temperature and humidity columns and keep 2 other columns from source_table. <pre class="example">
+DROP TABLE IF EXISTS cols2vec_result, cols2vec_result_summary;
+SELECT madlib.cols2vec(
+    'golf',
+    'cols2vec_result',
+    'temperature, humidity',
+    NULL,
+    'id, "OUTLOOK"'
+);
+SELECT * FROM cols2vec_result ORDER BY id;
+</pre> <pre class="result">
+ id | OUTLOOK  | feature_vector
+----+----------+----------------
+  1 | sunny    | {85,85}
+  2 | sunny    | {80,90}
+  3 | overcast | {83,78}
+  4 | rain     | {70,96}
+  5 | rain     | {68,80}
+  6 | rain     | {65,70}
+  7 | overcast | {64,65}
+  8 | sunny    | {72,95}
+  9 | sunny    | {69,70}
+ 10 | rain     | {75,80}
+ 11 | sunny    | {75,70}
+ 12 | overcast | {72,90}
+ 13 | overcast | {81,75}
+ 14 | rain     | {71,80}
+(14 rows)
+</pre> View the summary table: <pre class="example">
+\x on
+SELECT * FROM cols2vec_result_summary;
+\x off
+</pre> <pre class="result">
+-[ RECORD 1 ]---------------+----------------------------------------------------------------
+source_table                | golf
+list_of_features            | temperature, humidity
+list_of_features_to_exclude | None
+feature_names               | {temperature,humidity}
+</pre></li>
+<li>Combine all columns, excluding all columns that are not of type double precision. <pre class="example">
+DROP TABLE IF EXISTS cols2vec_result, cols2vec_result_summary;
+SELECT madlib.cols2vec(
+    'golf',
+    'cols2vec_result',
+    '*',
+    '"OUTLOOK", "Temp_Humidity", clouds_airquality, windy, class, id',
+    'id, "OUTLOOK"'
+);
+SELECT * FROM cols2vec_result ORDER BY id;
+</pre> <pre class="result">
+ id | OUTLOOK  | feature_vector
+----+----------+----------------
+  1 | sunny    | {85,85,5}
+  2 | sunny    | {80,90,5}
+  3 | overcast | {83,78,1.5}
+  4 | rain     | {70,96,1}
+  5 | rain     | {68,80,1}
+  6 | rain     | {65,70,1}
+  7 | overcast | {64,65,1.5}
+  8 | sunny    | {72,95,5}
+  9 | sunny    | {69,70,5}
+ 10 | rain     | {75,80,1}
+ 11 | sunny    | {75,70,5}
+ 12 | overcast | {72,90,1.5}
+ 13 | overcast | {81,75,1.5}
+ 14 | rain     | {71,80,1}
+(14 rows)
+</pre> View summary table: <pre class="example">
+\x on
+SELECT * FROM cols2vec_result_summary;
+\x off
+</pre> <pre class="result">
+-[ RECORD 1 ]---------------+----------------------------------------------------------------
+source_table                | golf
+list_of_features            | *
+list_of_features_to_exclude | "OUTLOOK", "Temp_Humidity", clouds_airquality, windy, class, id
+feature_names               | {temperature,humidity,observation_weight}
+</pre></li>
+<li>Combine the temperature and humidity columns, exclude windy, and keep all of the columns from the source table. <pre class="example">
+DROP TABLE IF EXISTS cols2vec_result, cols2vec_result_summary;
+SELECT madlib.cols2vec(
+    'golf',
+    'cols2vec_result',
+    'windy, temperature, humidity',
+    'windy',
+    '*'
+);
+SELECT * FROM cols2vec_result ORDER BY id;
+</pre> <pre class="result">
+ id | OUTLOOK  | temperature | humidity | Temp_Humidity | clouds_airquality | windy |   class    | observation_weight | feature_vector
+----+----------+-------------+----------+---------------+-------------------+-------+------------+--------------------+----------------
+  1 | sunny    |          85 |       85 | {85,85}       | {none,unhealthy}  | f     | Don't Play |                  5 | {85,85}
+  2 | sunny    |          80 |       90 | {80,90}       | {none,moderate}   | t     | Don't Play |                  5 | {80,90}
+  3 | overcast |          83 |       78 | {83,78}       | {low,moderate}    | f     | Play       |                1.5 | {83,78}
+  4 | rain     |          70 |       96 | {70,96}       | {low,moderate}    | f     | Play       |                  1 | {70,96}
+  5 | rain     |          68 |       80 | {68,80}       | {medium,good}     | f     | Play       |                  1 | {68,80}
+  6 | rain     |          65 |       70 | {65,70}       | {low,unhealthy}   | t     | Don't Play |                  1 | {65,70}
+  7 | overcast |          64 |       65 | {64,65}       | {medium,moderate} | t     | Play       |                1.5 | {64,65}
+  8 | sunny    |          72 |       95 | {72,95}       | {high,unhealthy}  | f     | Don't Play |                  5 | {72,95}
+  9 | sunny    |          69 |       70 | {69,70}       | {high,good}       | f     | Play       |                  5 | {69,70}
+ 10 | rain     |          75 |       80 | {75,80}       | {medium,good}     | f     | Play       |                  1 | {75,80}
+ 11 | sunny    |          75 |       70 | {75,70}       | {none,good}       | t     | Play       |                  5 | {75,70}
+ 12 | overcast |          72 |       90 | {72,90}       | {medium,moderate} | t     | Play       |                1.5 | {72,90}
+ 13 | overcast |          81 |       75 | {81,75}       | {medium,moderate} | f     | Play       |                1.5 | {81,75}
+ 14 | rain     |          71 |       80 | {71,80}       | {low,unhealthy}   | t     | Don't Play |                  1 | {71,80}
+(14 rows)
+</pre> View the summary table: <pre class="example">
+\x on
+SELECT * FROM cols2vec_result_summary;
+\x off
+</pre> <pre class="result">
+-[ RECORD 1 ]---------------+-----------------------------
+source_table                | golf
+list_of_features            | windy, temperature, humidity
+list_of_features_to_exclude | windy
+feature_names               | {temperature,humidity}
+</pre> This also shows that you can exclude features in 'list_of_features_to_exclude' that are in the list of 'list_of_features'. This can be useful if the 'list_of_features' is generated from an expression or subquery.</li>
+<li>Type casting works as per regular rules of the underlying database. E.g, combining integer and double precisions columns will create a double precision feature vector. For Boolean, do an explicit cast to the target type: <pre class="example">
+DROP TABLE IF EXISTS cols2vec_result, cols2vec_result_summary;
+SELECT madlib.cols2vec(
+    'golf',
+    'cols2vec_result',
+    'windy::TEXT, class',
+    NULL,
+    'id'
+);
+SELECT * FROM cols2vec_result ORDER BY id;
+</pre> <pre class="result">
+ id |    feature_vector
+-&mdash;+-------------------&mdash;
+  1 | {false,"Don't Play"}
+  2 | {true,"Don't Play"}
+  3 | {false,Play}
+  4 | {false,Play}
+  5 | {false,Play}
+  6 | {true,"Don't Play"}
+  7 | {true,Play}
+  8 | {false,"Don't Play"}
+  9 | {false,Play}
+ 10 | {false,Play}
+ 11 | {true,Play}
+ 12 | {true,Play}
+ 13 | {false,Play}
+ 14 | {true,"Don't Play"}
+(14 rows)
+</pre> </li>
+</ol>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:59 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__correlation.html b/docs/rc/group__grp__correlation.html
new file mode 100644
index 0000000..5ea6f75
--- /dev/null
+++ b/docs/rc/group__grp__correlation.html
@@ -0,0 +1,391 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Covariance and Correlation</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__correlation.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Covariance and Correlation<div class="ingroups"><a class="el" href="group__grp__stats.html">Statistics</a> &raquo; <a class="el" href="group__grp__desc__stats.html">Descriptive Statistics</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li>
+<a href="#usage">Covariance and Correlation Functions</a> </li>
+<li>
+<a href="#examples">Examples</a> </li>
+<li>
+<a href="#literature">Literature</a> </li>
+<li>
+<a href="#related">Related Topics</a> </li>
+</ul>
+</div><p>A correlation function is the degree and direction of association of two variables&mdash;how well one random variable can be predicted from the other. It is a normalized version of covariance. The Pearson correlation coefficient is used here, which has a value between -1 and 1, where 1 implies total positive linear correlation, 0 means no linear correlation, and -1 means total negative linear correlation.</p>
+<p>This function generates an \(N\)x \(N\) cross correlation matrix for pairs of numeric columns in a <em>source_table</em>. It is square symmetrical with the \( (i,j) \)th element equal to the correlation coefficient between the \(i\)th and the \(j\)th variable. The diagonal elements (correlations of variables with themselves) are always equal to 1.0.</p>
+<p>We also provide a covariance function which is similar in nature to correlation, and is a measure of the joint variability of two random variables.</p>
+<p><a class="anchor" id="usage"></a></p><dl class="section user"><dt>Covariance and Correlation Functions</dt><dd></dd></dl>
+<p>The correlation function has the following syntax: </p><pre class="syntax">
+correlation( source_table,
+             output_table,
+             target_cols,
+             verbose,
+             grouping_cols,
+             n_groups_per_run
+           )
+</pre><p>The covariance function has a similar syntax: </p><pre class="syntax">
+covariance( source_table,
+            output_table,
+            target_cols,
+            verbose,
+            grouping_cols,
+            n_groups_per_run
+          )
+</pre><dl class="arglist">
+<dt>source_table </dt>
+<dd><p class="startdd">TEXT. Name of the table containing the input data.</p>
+<p class="enddd"></p>
+</dd>
+<dt>output_table </dt>
+<dd><p class="startdd">TEXT. Name of the table containing the cross correlation matrix. The output table has N rows, where N is the number of '<em>target_cols</em>' in the '<em>source_table'</em> for which correlation or covariance is being computed. It has the following columns: </p><table class="output">
+<tr>
+<th>column_position </th><td>An automatically generated sequential counter indicating the order of the variable in the '<em>output_table</em>'.  </td></tr>
+<tr>
+<th>variable </th><td>Contains the row header for the variables of interest.  </td></tr>
+<tr>
+<th>grouping_cols </th><td>Contains the grouping columns, if any.  </td></tr>
+<tr>
+<th>&lt;...&gt; </th><td>The remainder of the table is the NxN correlation matrix for the pairs of variables of interest.  </td></tr>
+</table>
+<p>The output table is arranged as a lower-triangular matrix with the upper triangle set to NULL and the diagonal elements set to 1.0. To obtain the result from the '<em>output_table</em>' order by '<em>column_position</em>': </p><pre class="example">
+SELECT * FROM output_table ORDER BY column_position;
+</pre><p>In addition to output table, a summary table named &lt;output_table&gt;_summary is also created, which has the following columns: </p><table class="output">
+<tr>
+<th>method</th><td>'Correlation' or 'Covariance' </td></tr>
+<tr>
+<th>source_table</th><td>VARCHAR. Data source table name. </td></tr>
+<tr>
+<th>output_table</th><td>VARCHAR. Output table name. </td></tr>
+<tr>
+<th>column_names</th><td>VARCHAR. Column names used for correlation computation, as a comma-separated string. </td></tr>
+<tr>
+<th>grouping_cols </th><td>Contains the grouping columns, if any. </td></tr>
+<tr>
+<th>mean_vector</th><td>FLOAT8[]. Mean value of column for variables of interest. </td></tr>
+<tr>
+<th>total_rows_processed </th><td>BIGINT. Total numbers of rows processed.  </td></tr>
+</table>
+<p class="enddd"></p>
+</dd>
+<dt>target_cols (optional) </dt>
+<dd><p class="startdd">TEXT, default: '*'. A comma-separated list of the columns to correlate. If NULL or <code>'*'</code>, results are produced for all numeric columns.</p>
+<p class="enddd"></p>
+</dd>
+<dt>verbose (optional) </dt>
+<dd><p class="startdd">BOOLEAN, default: FALSE. Print verbose information if TRUE.</p>
+<p class="enddd"></p>
+</dd>
+<dt>grouping_cols (optional) </dt>
+<dd><p class="startdd">TEXT, default: NULL. A comma-separated list of the columns to group by.</p>
+<p class="enddd"></p>
+</dd>
+<dt>n_groups_per_run (optional) </dt>
+<dd>INTEGER, default: 10. Number of groups to process at a time. This parameter is ignored if 'grouping_cols' is not specified. Generally the default value will work fine, but there may be cases (see below) where you will want to experiment with it to reduce execution time and memory usage.  <dl class="section note"><dt>Note</dt><dd>This is a lower level parameter that can potentially be used to improve performance, but should be used with caution. It is designed to handle the case where you have a large number of groups. In general, increasing 'n_groups_per_run' means we construct a larger 'UNION ALL' query which uses more memory and may slow down execution if it gets too big. If you have a large number of groups and a smaller data size, there may be benefits to increasing this value. Conversely, decreasing 'n_groups_per_run' means we issue more 'plpy.execute' commands. This increases overhead and can modestly affect the execution time. </dd></dl>
+</dd>
+</dl>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<ol type="1">
+<li>Create an input dataset. <pre class="example">
+DROP TABLE IF EXISTS example_data CASCADE;
+CREATE TABLE example_data(
+    id SERIAL,
+    outlook TEXT,
+    temperature FLOAT8,
+    humidity FLOAT8,
+    windy TEXT,
+    class TEXT,
+    day TEXT
+);
+INSERT INTO example_data VALUES
+(1, 'sunny', 85, 85, 'false', 'Dont Play', 'Mon'),
+(2, 'sunny', 80, 90, 'true', 'Dont Play', 'Mon'),
+(3, 'overcast', 83, 78, 'false', 'Play', 'Mon'),
+(4, 'rain', 70, 96, 'false', 'Play', 'Mon'),
+(5, 'rain', 68, 80, 'false', 'Play', 'Mon'),
+(6, 'rain', 65, 70, 'true', 'Dont Play', 'Mon'),
+(7, 'overcast', 64, 65, 'true', 'Play', 'Mon'),
+(8, 'sunny', 72, 95, 'false', 'Dont Play', 'Mon'),
+(9, 'sunny', 69, 70, 'false', 'Play', 'Mon'),
+(10, 'rain', 75, 80, 'false', 'Play', 'Mon'),
+(11, 'sunny', 75, 70, 'true', 'Play', 'Mon'),
+(12, 'overcast', 72, 90, 'true', 'Play', 'Mon'),
+(13, 'overcast', 81, 75, 'false', 'Play', 'Mon'),
+(14, 'rain', 71, 80, 'true', 'Dont Play', 'Mon'),
+(15, NULL, 100, 100, 'true', NULL, 'Mon'),
+(16, NULL, 110, 100, 'true', NULL, 'Mon'),
+(101, 'sunny', 85, 85, 'false', 'Dont Play', 'Tues'),
+(102, 'sunny', 80, 90, 'true', 'Dont Play', 'Tues'),
+(103, 'overcast', 83, 78, 'false', 'Play', 'Tues'),
+(104, 'rain', 70, 96, 'false', 'Play', 'Tues'),
+(105, 'rain', 68, 80, 'false', 'Play', 'Tues'),
+(106, 'rain', 65, 70, 'true', 'Dont Play', 'Tues'),
+(107, 'overcast', 64, 65, 'true', 'Play', 'Tues'),
+(108, 'sunny', 72, 95, 'false', 'Dont Play', 'Tues'),
+(109, 'sunny', 69, 70, 'false', 'Play', 'Tues'),
+(110, 'rain', 75, 80, 'false', 'Play', 'Tues'),
+(111, 'sunny', 75, 70, 'true', 'Play', 'Tues'),
+(112, 'overcast', 72, 90, 'true', 'Play', 'Tues'),
+(113, 'overcast', 81, 75, 'false', 'Play', 'Tues'),
+(114, 'rain', 71, 80, 'true', 'Dont Play', 'Tues'),
+(115, NULL, 100, 100, 'true', NULL, 'Tues'),
+(116, NULL, 110, 100, 'true', NULL, 'Tues'),
+(201, 'sunny', 85, 85, 'false', 'Dont Play', 'Wed'),
+(202, 'sunny', 80, 90, 'true', 'Dont Play', 'Wed'),
+(203, 'overcast', 83, 78, 'false', 'Play', 'Wed'),
+(204, 'rain', 70, 96, 'false', 'Play', 'Wed'),
+(205, 'rain', 68, 80, 'false', 'Play', 'Wed'),
+(206, 'rain', 65, 70, 'true', 'Dont Play', 'Wed'),
+(207, 'overcast', 64, 65, 'true', 'Play', 'Wed'),
+(208, 'sunny', 7, 95, 'false', 'Dont Play', 'Wed'),
+(209, 'sunny', 6, 70, 'false', 'Play', 'Wed'),
+(210, 'rain', 7, 80, 'false', 'Play', 'Wed'),
+(211, 'sunny', 75, 70, 'true', 'Play', 'Wed'),
+(212, 'overcast', 72, 90, 'true', 'Play', 'Wed'),
+(213, 'overcast', 81, 75, 'false', 'Play', 'Wed'),
+(214, 'rain', 71, 80, 'true', 'Dont Play', 'Wed'),
+(215, NULL, 10, 100, 'true', NULL, 'Wed'),
+(216, NULL, 10, 100, 'true', NULL, 'Wed'),
+(217, 'sunny', 85, 85, 'false', 'Dont Play', 'Wed'),
+(218, 'sunny', 80, 9, 'true', 'Dont Play', 'Wed'),
+(219, 'overcast', 83, 78, 'false', 'Play', 'Wed'),
+(220, 'rain', 70, 9, 'false', 'Play', 'Wed'),
+(221, 'rain', 68, 80, 'false', 'Play', 'Wed');
+</pre></li>
+<li>Get correlation between temperature and humidity: <pre class="example">
+DROP TABLE IF EXISTS example_data_output, example_data_output_summary;
+SELECT madlib.correlation( 'example_data',
+                           'example_data_output',
+                           'temperature, humidity'
+                         );
+</pre> View the correlation matrix: <pre class="example">
+SELECT * FROM example_data_output ORDER BY column_position;
+</pre> <pre class="result">
+ column_position |  variable   |     temperature     | humidity
+-----------------+-------------+---------------------+----------
+               1 | temperature |                   1 |
+               2 | humidity    | 0.00607993890408995 |        1
+(2 rows)
+</pre> View the summary table: <pre class="example">
+\x on
+SELECT * FROM example_data_output_summary;
+</pre> <pre class="result">
+-[ RECORD 1 ]--------+-----------------------------------
+method               | Correlation
+source               | example_data
+output_table         | example_data_output
+column_names         | {temperature,humidity}
+mean_vector          | {70.188679245283,79.8679245283019}
+total_rows_processed | 53
+</pre></li>
+<li>Correlation with grouping by day: <pre class="example">
+\x off
+DROP TABLE IF EXISTS example_data_output, example_data_output_summary;
+SELECT madlib.correlation( 'example_data',
+                           'example_data_output',
+                           'temperature, humidity',
+                           FALSE,
+                           'day'
+                         );
+</pre> View the correlation matrix by group: <pre class="example">
+SELECT * FROM example_data_output ORDER BY day, column_position;
+</pre> <pre class="result">
+ column_position |  variable   | day  |    temperature    | humidity
+-----------------+-------------+------+-------------------+----------
+               1 | temperature | Mon  |                 1 |
+               2 | humidity    | Mon  | 0.616876934548786 |        1
+               1 | temperature | Tues |                 1 |
+               2 | humidity    | Tues | 0.616876934548786 |        1
+               1 | temperature | Wed  |                 1 |
+               2 | humidity    | Wed  | -0.28969669368457 |        1
+(6 rows)
+</pre> View the summary table: <pre class="example">
+\x on
+SELECT * FROM example_data_output_summary ORDER BY day;
+</pre> <pre class="result">
+-[ RECORD 1 ]--------+------------------------------------
+method               | Correlation
+source               | example_data
+output_table         | example_data_output
+column_names         | {temperature,humidity}
+day                  | Mon
+mean_vector          | {77.5,82.75}
+total_rows_processed | 16
+-[ RECORD 2 ]--------+------------------------------------
+method               | Correlation
+source               | example_data
+output_table         | example_data_output
+column_names         | {temperature,humidity}
+day                  | Tues
+mean_vector          | {77.5,82.75}
+total_rows_processed | 16
+-[ RECORD 3 ]--------+------------------------------------
+method               | Correlation
+source               | example_data
+output_table         | example_data_output
+column_names         | {temperature,humidity}
+day                  | Wed
+mean_vector          | {59.0476190476191,75.4761904761905}
+total_rows_processed | 21
+</pre></li>
+<li>Get covariance between temperature and humidity: <pre class="example">
+\x off
+DROP TABLE IF EXISTS example_data_output, example_data_output_summary;
+SELECT madlib.covariance( 'example_data',
+                          'example_data_output',
+                          'temperature, humidity'
+                         );
+</pre> View the covariance matrix: <pre class="example">
+SELECT * FROM example_data_output ORDER BY column_position;
+</pre> <pre class="result">
+ column_position |  variable   |   temperature    |     humidity
+-----------------+-------------+------------------+------------------
+               1 | temperature | 507.926664293343 |
+               2 | humidity    | 2.40227839088644 | 307.359914560342
+(2 rows)
+</pre> View the summary table: <pre class="example">
+\x on
+SELECT * FROM example_data_output_summary;
+</pre> <pre class="result">
+-[ RECORD 1 ]--------+-----------------------------------
+method               | Covariance
+source               | example_data
+output_table         | example_data_output
+column_names         | {temperature,humidity}
+mean_vector          | {70.188679245283,79.8679245283019}
+total_rows_processed | 53
+</pre></li>
+</ol>
+<dl class="section user"><dt>Notes</dt><dd></dd></dl>
+<p>Null values will be replaced by the mean of their respective columns (mean imputation/substitution). Mean imputation is a method in which the missing value on a certain variable is replaced by the mean of the available cases. This method maintains the sample size and is easy to use, but the variability in the data is reduced, so the standard deviations and the variance estimates tend to be underestimated. Please refer to [1] and [2] for details.</p>
+<p>If the mean imputation method is not suitable for the target use case, it is advised to employ a view that handles the NULL values prior to calling the correlation/covariance functions.</p>
+<p><a class="anchor" id="literature"></a></p><dl class="section user"><dt>Literature</dt><dd></dd></dl>
+<p>[1] <a href="https://en.wikipedia.org/wiki/Imputation_(statistics)">https://en.wikipedia.org/wiki/Imputation_(statistics)</a></p>
+<p>[2] <a href="https://www.iriseekhout.com/missing-data/missing-data-methods/imputation-methods/">https://www.iriseekhout.com/missing-data/missing-data-methods/imputation-methods/</a></p>
+<p><a class="anchor" id="related"></a></p><dl class="section user"><dt>Related Topics</dt><dd></dd></dl>
+<p>File <a class="el" href="correlation_8sql__in.html" title="SQL functions for correlation computation. ">correlation.sql_in</a> documenting the SQL functions</p>
+<p><a class="el" href="group__grp__summary.html">Summary</a> for general descriptive statistics for a table </p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__countmin.html b/docs/rc/group__grp__countmin.html
new file mode 100644
index 0000000..30cfba8
--- /dev/null
+++ b/docs/rc/group__grp__countmin.html
@@ -0,0 +1,241 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: CountMin (Cormode-Muthukrishnan)</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__countmin.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">CountMin (Cormode-Muthukrishnan)<div class="ingroups"><a class="el" href="group__grp__stats.html">Statistics</a> &raquo; <a class="el" href="group__grp__desc__stats.html">Descriptive Statistics</a> &raquo; <a class="el" href="group__grp__sketches.html">Cardinality Estimators</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li>
+<a href="#syntax">Syntax</a> </li>
+<li>
+<a href="#examples">Examples</a> </li>
+<li>
+<a href="#literature">Literature</a> </li>
+<li>
+<a href="#related">Related Topics</a> </li>
+</ul>
+</div><p>This module implements Cormode-Muthukrishnan <em>CountMin</em> sketches on integer values, implemented as a user-defined aggregate. It also provides scalar functions over the sketches to produce approximate counts, order statistics, and histograms.</p>
+<p><a class="anchor" id="syntax"></a></p><dl class="section user"><dt>Syntax</dt><dd><ul>
+<li>Get a sketch of a selected column specified by <em>col_name</em>. <pre class="syntax">
+cmsketch( col_name )
+</pre></li>
+<li>Get the number of rows where <em>col_name = p</em>, computed from the sketch obtained from <code>cmsketch</code>. <pre class="syntax">
+cmsketch_count( cmsketch,
+                p )
+</pre></li>
+<li>Get the number of rows where <em>col_name</em> is between <em>m</em> and <em>n</em> inclusive. <pre class="syntax">
+cmsketch_rangecount( cmsketch,
+                     m,
+                     n )
+</pre></li>
+<li>Get the <em>k</em>th percentile of <em>col_name</em> where <em>count</em> specifies number of rows. <em>k</em> should be an integer between 1 to 99. <pre class="syntax">
+cmsketch_centile( cmsketch,
+                  k,
+                  count )
+</pre></li>
+<li>Get the median of col_name where <em>count</em> specifies number of rows. This is equivalent to <code><a class="el" href="sketch_8sql__in.html#a2f2ab2fe3244515f5f73d49690e73b39">cmsketch_centile</a>(<em>cmsketch</em>,50,<em>count</em>)</code>. <pre class="syntax">
+cmsketch_median( cmsketch,
+                 count )
+</pre></li>
+<li>Get an n-bucket histogram for values between min and max for the column where each bucket has approximately the same width. The output is a text string containing triples {lo, hi, count} representing the buckets; counts are approximate. <pre class="syntax">
+cmsketch_width_histogram( cmsketch,
+                          min,
+                          max,
+                          n )
+</pre></li>
+<li>Get an n-bucket histogram for the column where each bucket has approximately the same count. The output is a text string containing triples {lo, hi, count} representing the buckets; counts are approximate. Note that an equi-depth histogram is equivalent to a spanning set of equi-spaced centiles. <pre class="syntax">
+cmsketch_depth_histogram( cmsketch,
+                          n )
+</pre></li>
+</ul>
+</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This is a <a href="https://www.postgresql.org/docs/current/static/xaggr.html">User Defined Aggregate</a> which returns the results when used in a query. Use "CREATE TABLE AS ", with the UDA as subquery if the results are to be stored. This is unlike the usual MADlib stored procedure interface which places the results in a table instead of returning it.</dd></dl>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<ol type="1">
+<li>Generate some data. <pre class="example">
+CREATE TABLE data(class INT, a1 INT);
+INSERT INTO data SELECT 1,1 FROM generate_series(1,10000);
+INSERT INTO data SELECT 1,2 FROM generate_series(1,15000);
+INSERT INTO data SELECT 1,3 FROM generate_series(1,10000);
+INSERT INTO data SELECT 2,5 FROM generate_series(1,1000);
+INSERT INTO data SELECT 2,6 FROM generate_series(1,1000);
+</pre></li>
+<li>Count number of rows where a1 = 2 in each class. Store results in a table. <pre class="example">
+CREATE TABLE sketch_count AS
+SELECT class,
+       cmsketch_count( cmsketch( a1 ), 2 )
+FROM data GROUP BY data.class;
+SELECT * FROM sketch_count;
+</pre> Result: <pre class="result">
+ class | cmsketch_count
+&#160;------+----------------
+     2 |              0
+     1 |          15000
+(2 rows)
+</pre></li>
+<li>Count number of rows where a1 is between 3 and 6. <pre class="example">
+SELECT class,
+       cmsketch_rangecount( cmsketch(a1), 3, 6 )
+FROM data GROUP BY data.class;
+</pre> Result: <pre class="result">
+ class | cmsketch_rangecount
+&#160;------+---------------------
+     2 |                2000
+     1 |               10000
+(2 rows)
+</pre></li>
+<li>Compute the 90th percentile of all of a1. <pre class="example">
+SELECT cmsketch_centile( cmsketch( a1 ), 90, count(*) )
+FROM data;
+</pre> Result: <pre class="result">
+ cmsketch_centile
+&#160;-----------------
+                3
+(1 row)
+</pre></li>
+<li>Produce an equi-width histogram with 2 bins between 0 and 10. <pre class="example">
+SELECT cmsketch_width_histogram( cmsketch( a1 ), 0, 10, 2 )
+FROM data;
+</pre> Result: <pre class="result">
+      cmsketch_width_histogram
+&#160;-----------------------------------
+ [[0L, 4L, 35000], [5L, 10L, 2000]]
+(1 row)
+</pre></li>
+<li>Produce an equi-depth histogram of a1 with 2 bins of approximately equal depth. <pre class="example">
+SELECT cmsketch_depth_histogram( cmsketch( a1 ), 2 )
+FROM data;
+</pre> Result: <pre class="result">
+                       cmsketch_depth_histogram
+&#160;----------------------------------------------------------------------
+ [[-9223372036854775807L, 1, 10000], [2, 9223372036854775807L, 27000]]
+(1 row)
+</pre></li>
+</ol>
+<p><a class="anchor" id="literature"></a></p><dl class="section user"><dt>Literature</dt><dd></dd></dl>
+<p>[1] G. Cormode and S. Muthukrishnan. An improved data stream summary: The count-min sketch and its applications. LATIN 2004, J. Algorithm 55(1): 58-75 (2005) . <a href="http://dimacs.rutgers.edu/~graham/pubs/html/CormodeMuthukrishnan04CMLatin.html">http://dimacs.rutgers.edu/~graham/pubs/html/CormodeMuthukrishnan04CMLatin.html</a></p>
+<p>[2] G. Cormode. Encyclopedia entry on 'Count-Min Sketch'. In L. Liu and M. T. Ozsu, editors, Encyclopedia of Database Systems, pages 511-516. Springer, 2009. <a href="http://dimacs.rutgers.edu/~graham/pubs/html/Cormode09b.html">http://dimacs.rutgers.edu/~graham/pubs/html/Cormode09b.html</a></p>
+<p><a class="anchor" id="related"></a>File <a class="el" href="sketch_8sql__in.html" title="SQL functions for sketch-based approximations of descriptive statistics. ">sketch.sql_in</a> documenting the SQL functions.</p>
+<p>Module grp_quantile for a different implementation of quantile function. </p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__cox__prop__hazards.html b/docs/rc/group__grp__cox__prop__hazards.html
new file mode 100644
index 0000000..19cd2eb
--- /dev/null
+++ b/docs/rc/group__grp__cox__prop__hazards.html
@@ -0,0 +1,475 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Cox-Proportional Hazards Regression</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__cox__prop__hazards.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Cox-Proportional Hazards Regression<div class="ingroups"><a class="el" href="group__grp__super.html">Supervised Learning</a> &raquo; <a class="el" href="group__grp__regml.html">Regression Models</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li class="level1">
+<a href="#training">Training Function</a> </li>
+<li class="level1">
+<a href="#cox_zph">PHA Test Function</a> </li>
+<li class="level1">
+<a href="#predict">Prediction Function</a> </li>
+<li class="level1">
+<a href="#examples">Examples</a> </li>
+<li class="level1">
+<a href="#background">Technical Background</a> </li>
+<li class="level1">
+<a href="#related">Related Topics</a> </li>
+</ul>
+</div><p>Proportional-Hazard models enable the comparison of various survival models. These survival models are functions describing the probability of a one-item event (prototypically, this event is death) with respect to time. The interval of time before the occurrence of death can be called the survival time. Let T be a random variable representing the survival time, with a cumulative probability function P(t). Informally, P(t) is the probability that death has happened before time t.</p>
+<p><a class="anchor" id="training"></a></p><dl class="section user"><dt>Training Function</dt><dd></dd></dl>
+<p>Following is the syntax for the <a class="el" href="cox__prop__hazards_8sql__in.html#a737450bbfe0f10204b0074a9d45b0cef" title="Compute cox-regression coefficients and diagnostic statistics. ">coxph_train()</a> training function: </p><pre class="syntax">
+coxph_train( source_table,
+             output_table,
+             dependent_variable,
+             independent_variable,
+             right_censoring_status,
+             strata,
+             optimizer_params
+           )
+</pre><p> <b>Arguments</b> </p><dl class="arglist">
+<dt>source_table </dt>
+<dd>TEXT. The name of the table containing input data. </dd>
+<dt>output_table </dt>
+<dd><p class="startdd">TEXT. The name of the table where the output model is saved. The output is saved in the table named by the <em>output_table</em> argument. It has the following columns: </p><table class="output">
+<tr>
+<th>coef </th><td>FLOAT8[]. Vector of the coefficients.  </td></tr>
+<tr>
+<th>loglikelihood </th><td>FLOAT8. Log-likelihood value of the MLE estimate.  </td></tr>
+<tr>
+<th>std_err </th><td>FLOAT8[]. Vector of the standard error of the coefficients.  </td></tr>
+<tr>
+<th>stats </th><td>FLOAT8[]. Vector of the statistics of the coefficients.  </td></tr>
+<tr>
+<th>p_values </th><td>FLOAT8[]. Vector of the p-values of the coefficients.  </td></tr>
+<tr>
+<th>hessian </th><td>FLOAT8[]. The Hessian matrix computed using the final solution.  </td></tr>
+<tr>
+<th>num_iterations </th><td>INTEGER. The number of iterations performed by the optimizer.  </td></tr>
+</table>
+<p>Additionally, a summary output table is generated that contains a summary of the parameters used for building the Cox model. It is stored in a table named &lt;output_table&gt;_summary. It has the following columns: </p><table class="output">
+<tr>
+<th>source_table </th><td>The source table name.  </td></tr>
+<tr>
+<th>dependent_variable </th><td>The dependent variable name.  </td></tr>
+<tr>
+<th>independent_variable </th><td>The independent variable name.  </td></tr>
+<tr>
+<th>right_censoring_status </th><td>The right censoring status  </td></tr>
+<tr>
+<th>strata </th><td>The stratification columns  </td></tr>
+<tr>
+<th>num_processed </th><td>The number of rows that were actually used in the computation.  </td></tr>
+<tr>
+<th>num_missing_rows_skipped </th><td>The number of rows that were skipped in the computation due to NULL values in them.  </td></tr>
+</table>
+<p class="enddd"></p>
+</dd>
+<dt>dependent_variable </dt>
+<dd>TEXT. A string containing the name of a column that contains an array of numeric values, or a string expression in the format 'ARRAY[1, x1, x2, x3]', where <em>x1</em>, <em>x2</em> and <em>x3</em> are column names. Dependent variables refer to the time of death. There is no need to pre-sort the data. </dd>
+<dt>independent_variable </dt>
+<dd>TEXT. The name of the independent variable. </dd>
+<dt>right_censoring_status (optional) </dt>
+<dd>TEXT, default: TRUE for all observations. A string containing an expression that evaluates to the right-censoring status for the observation&mdash;TRUE if the observation is not censored and FALSE if the observation is censored. The string could contain the name of the column containing the right-censoring status, a fixed Boolean expression (i.e., 'true', 'false', '0', '1') that applies to all observations, or a Boolean expression such as 'column_name &lt; 10' that can be evaluated for each observation. </dd>
+<dt>strata (optional) </dt>
+<dd>VARCHAR, default: NULL, which does not do any stratifications. A string of comma-separated column names that are the strata ID variables used to do stratification. </dd>
+<dt>optimizer_params (optional) </dt>
+<dd><p class="startdd">VARCHAR, default: NULL, which uses the default values of optimizer parameters: max_iter=100, optimizer=newton, tolerance=1e-8, array_agg_size=10000000, sample_size=1000000. It should be a string that contains 'key=value' pairs separated by commas. The meanings of these parameters are:</p>
+<ul>
+<li>max_iter &mdash; The maximum number of iterations. The computation stops if the number of iterations exceeds this, which usually means that there is no convergence.</li>
+<li>optimizer &mdash; The optimization method. Right now, "newton" is the only one supported.</li>
+<li>tolerance &mdash; The stopping criteria. When the difference between the log-likelihoods of two consecutive iterations is smaller than this number, the computation has already converged and stops.</li>
+<li>array_agg_size &mdash; To speed up the computation, the original data table is cut into multiple pieces, and each pieces of the data is aggregated into one big row. In the process of computation, the whole big row is loaded into memory and thus speed up the computation. This parameter controls approximately how many numbers we want to put into one big row. Larger value of array_agg_size may speed up more, but the size of the big row cannot exceed 1GB due to the restriction of PostgreSQL databases.</li>
+<li>sample_size &mdash; To cut the data into approximate equal pieces, we first sample the data, and then find out the break points using this sampled data. A larger sample_size produces more accurate break points.  </li>
+</ul>
+</dd>
+</dl>
+<p><a class="anchor" id="cox_zph"></a></p><dl class="section user"><dt>Proportional Hazards Assumption Test Function</dt><dd></dd></dl>
+<p>The <a class="el" href="cox__prop__hazards_8sql__in.html#a682d95d5475ce33e47937067cadc2766" title="Test the proportional hazards assumption for a Cox regression model fit (coxph_train) ...">cox_zph()</a> function tests the proportional hazards assumption (PHA) of a Cox regression.</p>
+<p>Proportional-hazard models enable the comparison of various survival models. These PH models, however, assume that the hazard for a given individual is a fixed proportion of the hazard for any other individual, and the ratio of the hazards is constant across time. MADlib does not currently have support for performing any transformation of the time to compute the correlation.</p>
+<p>The <a class="el" href="cox__prop__hazards_8sql__in.html#a682d95d5475ce33e47937067cadc2766" title="Test the proportional hazards assumption for a Cox regression model fit (coxph_train) ...">cox_zph()</a> function is used to test this assumption by computing the correlation of the residual of the <a class="el" href="cox__prop__hazards_8sql__in.html#a737450bbfe0f10204b0074a9d45b0cef" title="Compute cox-regression coefficients and diagnostic statistics. ">coxph_train()</a> model with time.</p>
+<p>Following is the syntax for the <a class="el" href="cox__prop__hazards_8sql__in.html#a682d95d5475ce33e47937067cadc2766" title="Test the proportional hazards assumption for a Cox regression model fit (coxph_train) ...">cox_zph()</a> function: </p><pre class="syntax">
+cox_zph(cox_model_table, output_table)
+</pre><p> <b>Arguments</b> </p><dl class="arglist">
+<dt>cox_model_table </dt>
+<dd><p class="startdd">TEXT. The name of the table containing the Cox Proportional-Hazards model.</p>
+<p class="enddd"></p>
+</dd>
+<dt>output_table </dt>
+<dd>TEXT. The name of the table where the test statistics are saved. The output table is named by the <em>output_table</em> argument and has the following columns: <table class="output">
+<tr>
+<th>covariate </th><td>TEXT. The independent variables.  </td></tr>
+<tr>
+<th>rho </th><td>FLOAT8[]. Vector of the correlation coefficients between survival time and the scaled Schoenfeld residuals.  </td></tr>
+<tr>
+<th>chi_square </th><td>FLOAT8[]. Chi-square test statistic for the correlation analysis.  </td></tr>
+<tr>
+<th>p_value </th><td>FLOAT8[]. Two-side p-value for the chi-square statistic.  </td></tr>
+</table>
+</dd>
+</dl>
+<p>Additionally, the residual values are outputted to the table named <em>output_table</em>_residual. The table contains the following columns: </p><table class="output">
+<tr>
+<th>&lt;dep_column_name&gt; </th><td>FLOAT8. Time values (dependent variable) present in the original source table.   </td></tr>
+<tr>
+<th>residual </th><td>FLOAT8[]. Difference between the original covariate values and the expectation of the covariates obtained from the coxph_train model.  </td></tr>
+<tr>
+<th>scaled_residual </th><td>Residual values scaled by the variance of the coefficients.  </td></tr>
+</table>
+<p><a class="anchor" id="notes"></a></p><dl class="section user"><dt>Notes</dt><dd></dd></dl>
+<ul>
+<li>Table names can be optionally schema qualified (current_schemas() is used if a schema name is not provided) and table and column names should follow case-sensitivity and quoting rules per the database. For instance, 'mytable' and 'MyTable' both resolve to the same entity&mdash;'mytable'. If mixed-case or multi-byte characters are desired for entity names then the string should be double-quoted; in this case the input would be '"MyTable"'.</li>
+<li>The <a class="el" href="cox__prop__hazards_8sql__in.html#a3310cf98478b7c1e400e8fb1b3965d30">cox_prop_hazards_regr()</a> and <a class="el" href="cox__prop__hazards_8sql__in.html#ad778b289eb19ae0bb2b7e02a89bab3bc" title="Cox regression training function. ">cox_prop_hazards()</a> functions have been deprecated; <a class="el" href="cox__prop__hazards_8sql__in.html#a737450bbfe0f10204b0074a9d45b0cef" title="Compute cox-regression coefficients and diagnostic statistics. ">coxph_train()</a> should be used instead.</li>
+</ul>
+<p><a class="anchor" id="predict"></a></p><dl class="section user"><dt>Prediction Function</dt><dd>The prediction function is provided to calculate the linear predictionors, risk or the linear terms for the given prediction data. It has the following syntax: <pre class="syntax">
+coxph_predict(model_table,
+              source_table,
+              id_col_name,
+              output_table,
+              pred_type,
+              reference)
+</pre></dd></dl>
+<p><b>Arguments</b> </p><dl class="arglist">
+<dt>model_table </dt>
+<dd><p class="startdd">TEXT. Name of the table containing the cox model.</p>
+<p class="enddd"></p>
+</dd>
+<dt>source_table </dt>
+<dd><p class="startdd">TEXT. Name of the table containing the prediction data.</p>
+<p class="enddd"></p>
+</dd>
+<dt>id_col_name </dt>
+<dd><p class="startdd">TEXT. Name of the id column in the source table.</p>
+<p class="enddd"></p>
+</dd>
+<dt>output_table </dt>
+<dd><p class="startdd">TEXT. Name of the table to store the prediction results in. The output table is named by the <em>output_table</em> argument and has the following columns: </p><table class="output">
+<tr>
+<th>id </th><td>TEXT. The id column name from the source table.  </td></tr>
+<tr>
+<th>predicted_result </th><td>DOUBLE PRECISION. Result of prediction based of the value of the prediction type parameter.  </td></tr>
+</table>
+<p class="enddd"></p>
+</dd>
+<dt>pred_type </dt>
+<dd><p class="startdd">TEXT, OPTIONAL. Type of prediction. This can be one of 'linear_predictors', 'risk', or 'terms'. DEFAULT='linear_predictors'.</p><ul>
+<li>'linear_predictors' calculates the dot product of the independent variables and the coefficients.</li>
+<li>'risk' is the exponentiated value of the linear prediction.</li>
+<li>'terms' correspond to the linear terms obtained by multiplying the independent variables with their corresponding coefficients values (without further calculating the sum of these terms) </li>
+</ul>
+<p class="enddd"></p>
+</dd>
+<dt>reference </dt>
+<dd>TEXT, OPTIONAL. Reference level to use for centering predictions. Can be one of 'strata', 'overall'. DEFAULT='strata'. Note that R uses 'sample' instead of 'overall' when referring to the overall mean value of the covariates as being the reference level. </dd>
+</dl>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<ol type="1">
+<li>View online help for the proportional hazards training method. <pre class="example">
+SELECT madlib.coxph_train();
+</pre></li>
+<li>Create an input data set. <pre class="example">
+DROP TABLE IF EXISTS sample_data;
+CREATE TABLE sample_data (
+    id INTEGER NOT NULL,
+    grp DOUBLE PRECISION,
+    wbc DOUBLE PRECISION,
+    timedeath INTEGER,
+    status BOOLEAN
+);
+COPY sample_data FROM STDIN WITH DELIMITER '|';
+  0 |   0 | 1.45 |        35 | t
+  1 |   0 | 1.47 |        34 | t
+  3 |   0 |  2.2 |        32 | t
+  4 |   0 | 1.78 |        25 | t
+  5 |   0 | 2.57 |        23 | t
+  6 |   0 | 2.32 |        22 | t
+  7 |   0 | 2.01 |        20 | t
+  8 |   0 | 2.05 |        19 | t
+  9 |   0 | 2.16 |        17 | t
+ 10 |   0 |  3.6 |        16 | t
+ 11 |   1 |  2.3 |        15 | t
+ 12 |   0 | 2.88 |        13 | t
+ 13 |   1 |  1.5 |        12 | t
+ 14 |   0 |  2.6 |        11 | t
+ 15 |   0 |  2.7 |        10 | t
+ 16 |   0 |  2.8 |         9 | t
+ 17 |   1 | 2.32 |         8 | t
+ 18 |   0 | 4.43 |         7 | t
+ 19 |   0 | 2.31 |         6 | t
+ 20 |   1 | 3.49 |         5 | t
+ 21 |   1 | 2.42 |         4 | t
+ 22 |   1 | 4.01 |         3 | t
+ 23 |   1 | 4.91 |         2 | t
+ 24 |   1 |    5 |         1 | t
+\.
+</pre></li>
+<li>Run the Cox regression function. <pre class="example">
+SELECT madlib.coxph_train( 'sample_data',
+                           'sample_cox',
+                           'timedeath',
+                           'ARRAY[grp,wbc]',
+                           'status'
+                         );
+</pre></li>
+<li>View the results of the regression. <pre class="example">
+\x on
+SELECT * FROM sample_cox;
+</pre> Results: <pre class="result">
+-[ RECORD 1 ]--+----------------------------------------------------------------------------
+coef           | {2.54407073265254,1.67172094779487}
+loglikelihood  | -37.8532498733
+std_err        | {0.677180599294897,0.387195514577534}
+z_stats        | {3.7568570855419,4.31751114064138}
+p_values       | {0.000172060691513886,1.5779844638453e-05}
+hessian        | {{2.78043065745617,-2.25848560642414},{-2.25848560642414,8.50472838284472}}
+num_iterations | 5
+</pre></li>
+<li>Computing predictions using cox model. (This example uses the original data table to perform the prediction. Typically a different test dataset with the same features as the original training dataset would be used.) <pre class="example">
+\x off
+-- Display the linear predictors for the original dataset
+SELECT madlib.coxph_predict('sample_cox',
+                            'sample_data',
+                            'id',
+                            'sample_pred');
+</pre> <pre class="result">
+SELECT * FROM sample_pred;
+ id |  predicted_value
+----+--------------------
+  0 |  -2.97110918125034
+  4 |  -2.41944126847803
+  6 |   -1.5167119566688
+  8 |  -1.96807661257341
+ 10 |  0.623090856508638
+ 12 |  -0.58054822590367
+ 14 |  -1.04863009128623
+ 16 | -0.714285901727259
+ 18 |   2.01061924317838
+ 20 |   2.98327228490375
+ 22 |   3.85256717775708
+ 24 |     5.507570916074
+  1 |  -2.93767476229444
+  3 |  -1.71731847040418
+  5 |  -1.09878171972008
+  7 |  -2.03494545048521
+  9 |  -1.78418730831598
+ 15 | -0.881457996506747
+ 19 |  -1.53342916614675
+ 11 |  0.993924357027849
+ 13 | -0.343452401208048
+ 17 |   1.02735877598375
+ 21 |   1.19453087076323
+ 23 |   5.35711603077246
+(24 rows)
+</pre> <pre class="example">
+-- Display the relative risk for the original dataset
+SELECT madlib.coxph_predict('sample_cox',
+                            'sample_data',
+                            'id',
+                            'sample_pred',
+                            'risk');
+</pre> <pre class="result">
+ id |  predicted_value
+ ----+--------------------
+  1 | 0.0529887971503509
+  3 |  0.179546963459175
+  5 |   0.33327686110022
+  7 |  0.130687611255372
+  9 |  0.167933483703554
+ 15 |  0.414178600294289
+ 19 |  0.215794402223054
+ 11 |   2.70181658768287
+ 13 |  0.709317242984782
+ 17 |   2.79367735395696
+ 21 |   3.30200833843654
+ 23 |   212.112338046551
+  0 | 0.0512464372091503
+  4 | 0.0889713146524469
+  6 |  0.219432204682557
+  8 |  0.139725343898993
+ 10 |   1.86468261037506
+ 12 |  0.559591499901241
+ 14 |  0.350417460388247
+ 16 |  0.489541567796517
+ 18 |   7.46794038691975
+ 20 |   19.7523463121038
+ 22 |   47.1138577624204
+ 24 |   246.551504798816
+(24 rows)
+</pre></li>
+<li>Run the test for Proportional Hazards assumption to obtain correlation between residuals and time. <pre class="example">
+SELECT madlib.cox_zph( 'sample_cox',
+                       'sample_zph_output'
+                     );
+</pre></li>
+<li>View results of the PHA test. <pre class="example">
+SELECT * FROM sample_zph_output;
+</pre> Results: <pre class="result">
+-[ RECORD 1 ]-----------------------------------------
+covariate  | ARRAY[grp,wbc]
+rho        | {0.00237308357328641,0.0375600568840431}
+chi_square | {0.000100675718191977,0.0232317400546175}
+p_value    | {0.991994376850758,0.878855984657948}
+</pre></li>
+</ol>
+<p><a class="anchor" id="background"></a></p><dl class="section user"><dt>Technical Background</dt><dd></dd></dl>
+<p>Generally, proportional-hazard models start with a list of \( \boldsymbol n \) observations, each with \( \boldsymbol m \) covariates and a time of death. From this \( \boldsymbol n \times m \) matrix, we would like to derive the correlation between the covariates and the hazard function. This amounts to finding the parameters \( \boldsymbol \beta \) that best fit the model described below.</p>
+<p>Let us define:</p><ul>
+<li>\( \boldsymbol t \in \mathbf R^{m} \) denote the vector of observed dependent variables, with \( n \) rows.</li>
+<li>\( X \in \mathbf R^{m} \) denote the design matrix with \( m \) columns and \( n \) rows, containing all observed vectors of independent variables \( \boldsymbol x_i \) as rows.</li>
+<li>\( R(t_i) \) denote the set of observations still alive at time \( t_i \)</li>
+</ul>
+<p>Note that this model <b>does not</b> include a <b>constant term</b>, and the data cannot contain a column of 1s.</p>
+<p>By definition, </p><p class="formulaDsp">
+\[ P[T_k = t_i | \boldsymbol R(t_i)] = \frac{e^{\beta^T x_k} }{ \sum_{j \in R(t_i)} e^{\beta^T x_j}}. \,. \]
+</p>
+<p>The <b>partial likelihood </b>function can now be generated as the product of conditional probabilities: </p><p class="formulaDsp">
+\[ \mathcal L = \prod_{i = 1}^n \left( \frac{e^{\beta^T x_i}}{ \sum_{j \in R(t_i)} e^{\beta^T x_j}} \right). \]
+</p>
+<p>The log-likelihood form of this equation is </p><p class="formulaDsp">
+\[ L = \sum_{i = 1}^n \left[ \beta^T x_i - \log\left(\sum_{j \in R(t_i)} e^{\beta^T x_j }\right) \right]. \]
+</p>
+<p>Using this score function and Hessian matrix, the partial likelihood can be maximized using the <b> Newton-Raphson algorithm</b>. <b>Breslow's method</b> is used to resolved tied times of deaths. The time of death for two records are considered "equal" if they differ by less than 1.0e-6</p>
+<p>The inverse of the Hessian matrix, evaluated at the estimate of \( \boldsymbol \beta \), can be used as an <b>approximate variance-covariance matrix </b> for the estimate, and used to produce approximate <b>standard errors</b> for the regression coefficients.</p>
+<p class="formulaDsp">
+\[ \mathit{se}(c_i) = \left( (H)^{-1} \right)_{ii} \,. \]
+</p>
+<p> The Wald z-statistic is </p><p class="formulaDsp">
+\[ z_i = \frac{c_i}{\mathit{se}(c_i)} \,. \]
+</p>
+<p>The Wald \( p \)-value for coefficient \( i \) gives the probability (under the assumptions inherent in the Wald test) of seeing a value at least as extreme as the one observed, provided that the null hypothesis ( \( c_i = 0 \)) is true. Letting \( F \) denote the cumulative density function of a standard normal distribution, the Wald \( p \)-value for coefficient \( i \) is therefore </p><p class="formulaDsp">
+\[ p_i = \Pr(|Z| \geq |z_i|) = 2 \cdot (1 - F( |z_i| )) \]
+</p>
+<p> where \( Z \) is a standard normally distributed random variable.</p>
+<p>The condition number is computed as \( \kappa(H) \) during the iteration immediately <em>preceding</em> convergence (i.e., \( A \) is computed using the coefficients of the previous iteration). A large condition number (say, more than 1000) indicates the presence of significant multicollinearity.</p>
+<p><a class="anchor" id="Literature"></a></p><dl class="section user"><dt>Literature</dt><dd></dd></dl>
+<p>A somewhat random selection of nice write-ups, with valuable pointers into further literature:</p>
+<p>[1] John Fox: Cox Proportional-Hazards Regression for Survival Data, Appendix to An R and S-PLUS companion to Applied Regression Feb 2012, <a href="http://cran.r-project.org/doc/contrib/Fox-Companion/appendix-cox-regression.pdf">http://cran.r-project.org/doc/contrib/Fox-Companion/appendix-cox-regression.pdf</a></p>
+<p>[2] Stephen J Walters: What is a Cox model? <a href="http://www.medicine.ox.ac.uk/bandolier/painres/download/whatis/cox_model.pdf">http://www.medicine.ox.ac.uk/bandolier/painres/download/whatis/cox_model.pdf</a></p>
+<p><a class="anchor" id="notes"></a></p><dl class="section user"><dt>Notes</dt><dd></dd></dl>
+<p>If number of ties in the source table is very large, a memory allocation error may be raised. The limitation is about \((10^8 / m)\), where \(m\) is number of featrues. For instance, if there are 100 featrues, the number of ties should be fewer than 1 million.</p>
+<p><a class="anchor" id="related"></a></p><dl class="section user"><dt>Related Topics</dt><dd></dd></dl>
+<p>File <a class="el" href="cox__prop__hazards_8sql__in.html" title="SQL functions for cox proportional hazards. ">cox_prop_hazards.sql_in</a> documenting the functions</p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__crf.html b/docs/rc/group__grp__crf.html
new file mode 100644
index 0000000..abe38f1
--- /dev/null
+++ b/docs/rc/group__grp__crf.html
@@ -0,0 +1,625 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Conditional Random Field</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__crf.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Conditional Random Field<div class="ingroups"><a class="el" href="group__grp__super.html">Supervised Learning</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li>
+<a href="#train_feature">Training Feature Generation</a> </li>
+<li>
+<a href="#train">CRF Training Function</a> </li>
+<li>
+<a href="#test_feature">Testing Feature Generation</a> </li>
+<li>
+<a href="#inference">Inference using Viterbi</a> </li>
+<li>
+<a href="#usage">Using CRF</a> </li>
+<li>
+<a href="#examples">Examples</a> </li>
+<li>
+<a href="#background">Technical Background</a> </li>
+<li>
+<a href="#literature">Literature</a> </li>
+<li>
+<a href="#related">Related Topics</a> </li>
+</ul>
+</div><p>A conditional random field (CRF) is a type of discriminative, undirected probabilistic graphical model. A linear-chain CRF is a special type of CRF that assumes the current state depends only on the previous state.</p>
+<p>Feature extraction modules are provided for text-analysis tasks such as part-of-speech (POS) tagging and named-entity resolution (NER). Currently, six feature types are implemented:</p>
+<ul>
+<li>Edge Feature: transition feature that encodes the transition feature weight from current label to next label.</li>
+<li>Start Feature: fired when the current token is the first token in a sequence.</li>
+<li>End Feature: fired when the current token is the last token in a sequence.</li>
+<li>Word Feature: fired when the current token is observed in the trained dictionary.</li>
+<li>Unknown Feature: fired when the current token is not observed in the trained dictionary for at least a certain number of times (default 1).</li>
+<li>Regex Feature: fired when the current token can be matched by a regular expression.</li>
+</ul>
+<p>A Viterbi implementation is also provided to get the best label sequence and the conditional probability \( \Pr( \text{best label sequence} \mid \text{sequence}) \).</p>
+<p>Following steps are required for CRF Learning and Inference:</p><ol type="1">
+<li><a href="#train_feature">Training Feature Generation</a></li>
+<li><a href="#train">CRF Training</a></li>
+<li><a href="#test_feature">Testing Feature Generation</a></li>
+<li><a href="#inference">Inference using Viterbi</a></li>
+</ol>
+<p><a class="anchor" id="train_feature"></a></p><dl class="section user"><dt>Training Feature Generation</dt><dd>The function takes <code>train_segment_tbl</code> and <code>regex_tbl</code> as input and does feature generation generating three tables <code>dictionary_tbl</code>, <code>train_feature_tbl</code> and <code>train_featureset_tbl</code>, that are required as an input for CRF training. <pre class="syntax">
+crf_train_fgen(train_segment_tbl,
+               regex_tbl,
+               label_tbl,
+               dictionary_tbl,
+               train_feature_tbl,
+               train_featureset_tbl)
+</pre> <b>Arguments</b> <dl class="arglist">
+<dt>train_segment_tbl </dt>
+<dd>TEXT. Name of the training segment table. The table is expected to have the following columns: <table class="output">
+<tr>
+<th>doc_id </th><td>INTEGER. Document id column  </td></tr>
+<tr>
+<th>start_pos </th><td>INTEGER. Index of a particular term in the respective document  </td></tr>
+<tr>
+<th>seg_text </th><td>TEXT. Term at the respective <code>start_pos</code> in the document  </td></tr>
+<tr>
+<th>label </th><td>INTEGER. Label id for the term corresponding to the actual label from <code>label_tbl</code>   </td></tr>
+</table>
+</dd>
+<dt>regex_tbl </dt>
+<dd>TEXT. Name of the regular expression table. The table is expected to have the following columns: <table class="output">
+<tr>
+<th>pattern </th><td>TEXT. Regular Expression  </td></tr>
+<tr>
+<th>name </th><td>TEXT. Regular Expression name  </td></tr>
+</table>
+</dd>
+<dt>label_tbl </dt>
+<dd>TEXT. Name of the table containing unique labels and their id's. The table is expected to have the following columns: <table class="output">
+<tr>
+<th>id </th><td>INTEGER. Unique label id. NOTE: Must range from 0 to total number of labels in the table - 1.   </td></tr>
+<tr>
+<th>label </th><td>TEXT. Label name  </td></tr>
+</table>
+</dd>
+<dt>dictionary_tbl </dt>
+<dd>TEXT. Name of the dictionary table to be created containing unique terms along with their counts. The table will have the following columns: <table class="output">
+<tr>
+<th>token </th><td>TEXT. Contains all the unique terms found in <code>train_segment_tbl</code>   </td></tr>
+<tr>
+<th>total </th><td>INTEGER. Respective counts for the terms  </td></tr>
+</table>
+</dd>
+<dt>train_feature_tbl</dt>
+<dd></dd>
+<dt></dt>
+<dd><p class="startdd">TEXT. Name of the training feature table to be created. The table will have the following columns: </p><table class="output">
+<tr>
+<th>doc_id </th><td>INTEGER. Document id  </td></tr>
+<tr>
+<th>f_size </th><td>INTEGER. Feature set size. This value will be same for all the tuples in the table  </td></tr>
+<tr>
+<th>sparse_r </th><td>DOUBLE PRECISION[]. Array union of individual single state features (previous label, label, feature index, start position, training existance indicator), ordered by their start position.  </td></tr>
+<tr>
+<th>dense_m </th><td>DOUBLE PRECISION[]. Array union of (previous label, label, feature index, start position, training existance indicator) of edge features ordered by start position.  </td></tr>
+<tr>
+<th>sparse_m </th><td>DOUBLE PRECISION[]. Array union of (feature index, previous label, label) of edge features ordered by feature index.  </td></tr>
+</table>
+<p class="enddd"></p>
+</dd>
+<dt>train_featureset_tbl </dt>
+<dd>TEXT. Name of the table to be created containing distinct featuresets generated from training feature extraction. The table will have the following columns: <table class="output">
+<tr>
+<th>f_index </th><td>INTEGER. Column containing distinct featureset ids  </td></tr>
+<tr>
+<th>f_name </th><td>TEXT. Feature name   </td></tr>
+<tr>
+<th>feature </th><td>ARRAY. Feature value. The value is of the form [L1, L2] <br />
+ - If L1 = -1: represents single state feature with L2 being the current label id. <br />
+ - If L1 != -1: represents transition feature with L1 be the previous label and L2 be the current label.    </td></tr>
+</table>
+</dd>
+</dl>
+</dd></dl>
+<p><a class="anchor" id="train"></a></p><dl class="section user"><dt>Linear Chain CRF Training Function</dt><dd>The function takes <code>train_feature_tbl</code> and <code>train_featureset_tbl</code> tables generated in the training feature generation steps as input along with other required parameters and produces two output tables <code>crf_stats_tbl</code> and <code>crf_weights_tbl</code>.</dd></dl>
+<pre class="syntax">
+lincrf_train(train_feature_tbl,
+             train_featureset_tbl,
+             label_tbl,
+             crf_stats_tbl,
+             crf_weights_tbl
+             max_iterations
+            )
+</pre><p> <b>Arguments</b> </p><dl class="arglist">
+<dt>train_feature_tbl </dt>
+<dd><p class="startdd">TEXT. Name of the feature table generated during training feature generation</p>
+<p class="enddd"></p>
+</dd>
+<dt>train_featureset_tbl </dt>
+<dd><p class="startdd">TEXT. Name of the featureset table generated during training feature generation</p>
+<p class="enddd"></p>
+</dd>
+<dt>label_tbl </dt>
+<dd><p class="startdd">TEXT. Name of the label table used</p>
+<p class="enddd"></p>
+</dd>
+<dt>crf_stats_table </dt>
+<dd>TEXT. Name of the table to be created containing statistics for CRF training. The table has the following columns: <table class="output">
+<tr>
+<th>coef </th><td>DOUBLE PRECISION[]. Array of coefficients  </td></tr>
+<tr>
+<th>log_likelihood </th><td>DOUBLE. Log-likelihood  </td></tr>
+<tr>
+<th>num_iterations </th><td>INTEGER. The number of iterations at which the algorithm terminated  </td></tr>
+</table>
+</dd>
+<dt>crf_weights_table </dt>
+<dd><p class="startdd">TEXT. Name of the table to be created creating learned feature weights. The table has the following columns: </p><table class="output">
+<tr>
+<th>id </th><td>INTEGER. Feature set id  </td></tr>
+<tr>
+<th>name </th><td>TEXT. Feature name  </td></tr>
+<tr>
+<th>prev_label_id </th><td>INTEGER. Label for the previous token encountered  </td></tr>
+<tr>
+<th>label_id </th><td>INTEGER. Label of the token with the respective feature  </td></tr>
+<tr>
+<th>weight </th><td>DOUBLE PRECISION. Weight for the respective feature set  </td></tr>
+</table>
+<p class="enddd"></p>
+</dd>
+<dt>max_iterations </dt>
+<dd>INTEGER. The maximum number of iterations </dd>
+</dl>
+<p><a class="anchor" id="test_feature"></a></p><dl class="section user"><dt>Testing Feature Generation</dt><dd></dd></dl>
+<pre class="syntax">
+crf_test_fgen(test_segment_tbl,
+              dictionary_tbl,
+              label_tbl,
+              regex_tbl,
+              crf_weights_tbl,
+              viterbi_mtbl,
+              viterbi_rtbl
+             )
+</pre><p> <b>Arguments</b> </p><dl class="arglist">
+<dt>test_segment_tbl </dt>
+<dd><p class="startdd">TEXT. Name of the testing segment table. The table is expected to have the following columns: </p><table class="output">
+<tr>
+<th>doc_id </th><td>INTEGER. Document id column  </td></tr>
+<tr>
+<th>start_pos </th><td>INTEGER. Index of a particular term in the respective document  </td></tr>
+<tr>
+<th>seg_text </th><td>TEXT. Term at the respective <code>start_pos</code> in the document  </td></tr>
+</table>
+<p class="enddd"></p>
+</dd>
+<dt>dictionary_tbl </dt>
+<dd><p class="startdd">TEXT. Name of the dictionary table created during training feature generation (<code>crf_train_fgen</code>)</p>
+<p class="enddd"></p>
+</dd>
+<dt>label_tbl </dt>
+<dd><p class="startdd">TEXT. Name of the label table</p>
+<p class="enddd"></p>
+</dd>
+<dt>regex_tbl </dt>
+<dd><p class="startdd">TEXT. Name of the regular expression table</p>
+<p class="enddd"></p>
+</dd>
+<dt>crf_weights_tbl </dt>
+<dd><p class="startdd">TEXT. Name of the weights table generated during CRF training (<code>lincrf_train</code>)</p>
+<p class="enddd"></p>
+</dd>
+<dt>viterbi_mtbl </dt>
+<dd><p class="startdd">TEXT. Name of the Viterbi M table to be created</p>
+<p class="enddd"></p>
+</dd>
+<dt>viterbi_rtbl </dt>
+<dd>TEXT. Name of the Viterbi R table to be created </dd>
+</dl>
+<p><a class="anchor" id="inference"></a></p><dl class="section user"><dt>Inference using Viterbi</dt><dd><pre class="syntax">
+vcrf_label(test_segment_tbl,
+           viterbi_mtbl,
+           viterbi_rtbl,
+           label_tbl,
+           result_tbl)
+</pre> <b>Arguments</b> <dl class="arglist">
+<dt>test_segment_tbl </dt>
+<dd>TEXT. Name of the testing segment table. For required table schema, please refer to arguments in previous section </dd>
+<dt>viterbi_mtbl </dt>
+<dd>TEXT. Name of the table <code>viterbi_mtbl</code> generated from testing feature generation <code>crf_test_fgen</code>. </dd>
+<dt>viterbi_rtbl </dt>
+<dd>TEXT. Name of the table <code>viterbi_rtbl</code> generated from testing feature generation <code>crf_test_fgen</code>. </dd>
+<dt>label_tbl </dt>
+<dd>TEXT. Name of the label table. </dd>
+<dt>result_tbl </dt>
+<dd>TEXT. Name of the result table to be created containing extracted best label sequences. </dd>
+</dl>
+</dd></dl>
+<p><a class="anchor" id="usage"></a></p><dl class="section user"><dt>Using CRF</dt><dd></dd></dl>
+<p>Generate text features, calculate their weights, and output the best label sequence for test data:<br />
+</p><ol type="1">
+<li>Perform feature generation on training data i.e. <code>train_segment_tbl</code> generating <code>train_feature_tbl</code> and <code>train_featureset_tbl</code>. <pre>SELECT madlib.crf_train_fgen(
+         '<em>train_segment_tbl</em>',
+         '<em>regex_tbl</em>',
+         '<em>label_tbl</em>',
+         '<em>dictionary_tbl</em>',
+         '<em>train_feature_tbl</em>',
+         '<em>train_featureset_tbl</em>');</pre></li>
+<li>Use linear-chain CRF for training providing <code>train_feature_tbl</code> and <code>train_featureset_tbl</code> generated from previous step as an input. <pre>SELECT madlib.lincrf_train(
+         '<em>train_feature_tbl</em>',
+         '<em>train_featureset_tbl</em>',
+         '<em>label_tbl</em>',
+         '<em>crf_stats_tbl</em>',
+         '<em>crf_weights_tbl</em>',
+         <em>max_iterations</em>);</pre></li>
+<li>Perform feature generation on testing data <code>test_segment_tbl</code> generating <code>viterbi_mtbl</code> and <code>viterbi_rtbl</code> required for inferencing. <pre>SELECT madlib.crf_test_fgen(
+         '<em>test_segment_tbl</em>',
+         '<em>dictionary_tbl</em>',
+         '<em>label_tbl</em>',
+         '<em>regex_tbl</em>',
+         '<em>crf_weights_tbl</em>',
+         '<em>viterbi_mtbl</em>',
+         '<em>viterbi_rtbl</em>');</pre></li>
+<li>Run the Viterbi function to get the best label sequence and the conditional probability \( \Pr( \text{best label sequence} \mid \text{sequence}) \). <pre>SELECT madlib.vcrf_label(
+         '<em>test_segment_tbl</em>',
+         '<em>viterbi_mtbl</em>',
+         '<em>viterbi_rtbl</em>',
+         '<em>label_tbl</em>',
+         '<em>result_tbl</em>');</pre></li>
+</ol>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd>This example uses a trivial training and test data set.</dd></dl>
+<ol type="1">
+<li>Load the label table, the regular expressions table, and the training segment table: <pre class="example">
+SELECT * FROM crf_label ORDER BY id;
+</pre> Result: <pre class="result">
+ id | label
+&#160;---+-------
+  0 | #
+  1 | $
+  2 | ''
+...
+  8 | CC
+  9 | CD
+ 10 | DT
+ 11 | EX
+ 12 | FW
+ 13 | IN
+ 14 | JJ
+...
+</pre> The regular expressions table: <pre class="example">
+SELECT * from crf_regex;
+</pre> <pre class="result">
+    pattern    |         name
+&#160;--------------+----------------------
+ ^.+ing$       | endsWithIng
+ ^[A-Z][a-z]+$ | InitCapital
+ ^[A-Z]+$      | isAllCapital
+ ^.*[0-9]+.*$  | containsDigit
+...
+</pre> The training segment table: <pre class="example">
+SELECT * from train_segmenttbl ORDER BY doc_id, start_pos;
+</pre> <pre class="result">
+ doc_id | start_pos |  seg_text  | label
+&#160;-------+-----------+------------+-------
+      0 |         0 | Confidence |    18
+      0 |         1 | in         |    13
+      0 |         2 | the        |    10
+      0 |         3 | pound      |    18
+      0 |         4 | is         |    38
+      0 |         5 | widely     |    26
+...
+      1 |         0 | Chancellor |    19
+      1 |         1 | of         |    13
+      1 |         2 | the        |    10
+      1 |         3 | Exchequer  |    19
+      1 |         4 | Nigel      |    19
+...
+</pre></li>
+<li>Generate the training features: <pre class="example">
+SELECT crf_train_fgen( 'train_segmenttbl',
+                       'crf_regex',
+                       'crf_label',
+                       'crf_dictionary',
+                       'train_featuretbl',
+                       'train_featureset'
+                     );
+SELECT * from crf_dictionary;
+</pre> Result: <pre class="result">
+     token       | total
+&#160;----------------+-------
+ Hawthorne       |     1
+ Mercedes-Benzes |     1
+ Wolf            |     3
+ best-known      |     1
+ hairline        |     1
+ accepting       |     2
+ purchases       |    14
+ trash           |     5
+ co-venture      |     1
+ restaurants     |     7
+...
+</pre> <pre class="example">
+SELECT * from train_featuretbl;
+</pre> Result: <pre class="result">
+ doc_id | f_size |            sparse_r           |             dense_m             |       sparse_m
+&#160;-------+--------+-------------------------------+---------------------------------+-----------------------
+      2 |     87 | {-1,13,12,0,1,-1,13,9,0,1,..} | {13,31,79,1,1,31,29,70,2,1,...} | {51,26,2,69,29,17,...}
+      1 |     87 | {-1,13,0,0,1,-1,13,9,0,1,...} | {13,0,62,1,1,0,13,54,2,1,13,..} | {51,26,2,69,29,17,...}
+</pre> <pre class="example">
+SELECT * from train_featureset;
+</pre> <pre class="result">
+ f_index |    f_name     | feature
+&#160;--------+---------------+---------
+       1 | R_endsWithED  | {-1,29}
+      13 | W_outweigh    | {-1,26}
+      29 | U             | {-1,5}
+      31 | U             | {-1,29}
+      33 | U             | {-1,12}
+      35 | W_a           | {-1,2}
+      37 | W_possible    | {-1,6}
+      15 | W_signaled    | {-1,29}
+      17 | End.          | {-1,43}
+      49 | W_'s          | {-1,16}
+      63 | W_acquire     | {-1,26}
+      51 | E.            | {26,2}
+      69 | E.            | {29,17}
+      71 | E.            | {2,11}
+      83 | W_the         | {-1,2}
+      85 | E.            | {16,11}
+       4 | W_return      | {-1,11}
+...
+</pre></li>
+<li>Train using linear CRF: <pre class="example">
+SELECT lincrf_train( 'train_featuretbl',
+                     'train_featureset',
+                     'crf_label',
+                     'crf_stats_tbl',
+                     'crf_weights_tbl',
+                     20
+             );
+</pre> <pre class="result">
+                                lincrf_train
+&#160;-----------------------------------------------------------------------------------
+ CRF Train successful. Results stored in the specified CRF stats and weights table
+ lincrf
+</pre> View the feature weight table. <pre class="example">
+SELECT * from crf_weights_tbl;
+</pre> Result: <pre class="result">
+ id |     name      | prev_label_id | label_id |      weight
+&#160;---+---------------+---------------+----------+-------------------
+  1 | R_endsWithED  |            -1 |       29 |  1.54128249293937
+ 13 | W_outweigh    |            -1 |       26 |  1.70691232223653
+ 29 | U             |            -1 |        5 |  1.40708515869008
+ 31 | U             |            -1 |       29 | 0.830356200936407
+ 33 | U             |            -1 |       12 | 0.769587378281239
+ 35 | W_a           |            -1 |        2 |  2.68470625883726
+ 37 | W_possible    |            -1 |        6 |  3.41773107604468
+ 15 | W_signaled    |            -1 |       29 |  1.68187039165771
+ 17 | End.          |            -1 |       43 |  3.07687845517082
+ 49 | W_'s          |            -1 |       16 |  2.61430312229883
+ 63 | W_acquire     |            -1 |       26 |  1.67247047385797
+ 51 | E.            |            26 |        2 |   3.0114240119435
+ 69 | E.            |            29 |       17 |  2.82385531733866
+ 71 | E.            |             2 |       11 |  3.00970493772732
+ 83 | W_the         |            -1 |        2 |  2.58742315259326
+...
+</pre></li>
+<li>To find the best labels for a test set using the trained linear CRF model, repeat steps #1-2 and generate the test features, except instead of creating a new dictionary, use the dictionary generated from the training set. <pre class="example">
+SELECT * from test_segmenttbl ORDER BY doc_id, start_pos;
+</pre> Result: <pre class="result">
+ doc_id | start_pos |   seg_text
+&#160;-------+-----------+---------------
+      0 |         0 | Rockwell
+      0 |         1 | International
+      0 |         2 | Corp.
+      0 |         3 | 's
+      0 |         4 | Tulsa
+      0 |         5 | unit
+      0 |         6 | said
+...
+      1 |         0 | Rockwell
+      1 |         1 | said
+      1 |         2 | the
+      1 |         3 | agreement
+      1 |         4 | calls
+...
+</pre> <pre class="example">
+SELECT crf_test_fgen( 'test_segmenttbl',
+                      'crf_dictionary',
+                      'crf_label',
+                      'crf_regex',
+                      'crf_weights_tbl',
+                      'viterbi_mtbl',
+                      'viterbi_rtbl'
+                    );
+</pre></li>
+<li>Calculate the best label sequence and save in the table <code>extracted_best_labels</code>. <pre class="example">
+SELECT vcrf_label( 'test_segmenttbl',
+                   'viterbi_mtbl',
+                   'viterbi_rtbl',
+                   'crf_label',
+                   'extracted_best_labels'
+                 );
+</pre> View the best labels. <pre class="example">
+SELECT * FROM extracted_best_labels;
+</pre> Result: <pre class="result">
+ doc_id | start_pos |   seg_text    | label | id | max_pos |   prob
+&#160;-------+-----------+---------------+-------+----+---------+----------
+      0 |         0 | Rockwell      | NNP   | 19 |      27 | 0.000269
+      0 |         1 | International | NNP   | 19 |      27 | 0.000269
+      0 |         2 | Corp.         | NNP   | 19 |      27 | 0.000269
+      0 |         3 | 's            | NNP   | 19 |      27 | 0.000269
+...
+      1 |         0 | Rockwell      | NNP   | 19 |      16 | 0.000168
+      1 |         1 | said          | NNP   | 19 |      16 | 0.000168
+      1 |         2 | the           | DT    | 10 |      16 | 0.000168
+      1 |         3 | agreement     | JJ    | 14 |      16 | 0.000168
+      1 |         4 | calls         | NNS   | 21 |      16 | 0.000168
+...
+</pre></li>
+</ol>
+<p><a class="anchor" id="background"></a></p><dl class="section user"><dt>Technical Background</dt><dd></dd></dl>
+<p>Specifically, a linear-chain CRF is a distribution defined by </p><p class="formulaDsp">
+\[ p_\lambda(\boldsymbol y | \boldsymbol x) = \frac{\exp{\sum_{m=1}^M \lambda_m F_m(\boldsymbol x, \boldsymbol y)}}{Z_\lambda(\boldsymbol x)} \,. \]
+</p>
+<p>where</p><ul>
+<li>\( F_m(\boldsymbol x, \boldsymbol y) = \sum_{i=1}^n f_m(y_i,y_{i-1},x_i) \) is a global feature function that is a sum along a sequence \( \boldsymbol x \) of length \( n \)</li>
+<li>\( f_m(y_i,y_{i-1},x_i) \) is a local feature function dependent on the current token label \( y_i \), the previous token label \( y_{i-1} \), and the observation \( x_i \)</li>
+<li>\( \lambda_m \) is the corresponding feature weight</li>
+<li>\( Z_\lambda(\boldsymbol x) \) is an instance-specific normalizer <p class="formulaDsp">
+\[ Z_\lambda(\boldsymbol x) = \sum_{\boldsymbol y&#39;} \exp{\sum_{m=1}^M \lambda_m F_m(\boldsymbol x, \boldsymbol y&#39;)} \]
+</p>
+</li>
+</ul>
+<p>A linear-chain CRF estimates the weights \( \lambda_m \) by maximizing the log-likelihood of a given training set \( T=\{(x_k,y_k)\}_{k=1}^N \).</p>
+<p>The log-likelihood is defined as </p><p class="formulaDsp">
+\[ \ell_{\lambda}=\sum_k \log p_\lambda(y_k|x_k) =\sum_k[\sum_{m=1}^M \lambda_m F_m(x_k,y_k) - \log Z_\lambda(x_k)] \]
+</p>
+<p>and the zero of its gradient </p><p class="formulaDsp">
+\[ \nabla \ell_{\lambda}=\sum_k[F(x_k,y_k)-E_{p_\lambda(Y|x_k)}[F(x_k,Y)]] \]
+</p>
+<p>is found since the maximum likelihood is reached when the empirical average of the global feature vector equals its model expectation. The MADlib implementation uses limited-memory BFGS (L-BFGS), a limited-memory variation of the Broyden–Fletcher–Goldfarb–Shanno (BFGS) update, a quasi-Newton method for unconstrained optimization.</p>
+<p>\(E_{p_\lambda(Y|x)}[F(x,Y)]\) is found by using a variant of the forward-backward algorithm: </p><p class="formulaDsp">
+\[ E_{p_\lambda(Y|x)}[F(x,Y)] = \sum_y p_\lambda(y|x)F(x,y) = \sum_i\frac{\alpha_{i-1}(f_i*M_i)\beta_i^T}{Z_\lambda(x)} \]
+</p>
+ <p class="formulaDsp">
+\[ Z_\lambda(x) = \alpha_n.1^T \]
+</p>
+<p> where \(\alpha_i\) and \( \beta_i\) are the forward and backward state cost vectors defined by </p><p class="formulaDsp">
+\[ \alpha_i = \begin{cases} \alpha_{i-1}M_i, &amp; 0&lt;i&lt;=n\\ 1, &amp; i=0 \end{cases}\\ \]
+</p>
+ <p class="formulaDsp">
+\[ \beta_i^T = \begin{cases} M_{i+1}\beta_{i+1}^T, &amp; 1&lt;=i&lt;n\\ 1, &amp; i=n \end{cases} \]
+</p>
+<p>To avoid overfitting, we penalize the likelihood with a spherical Gaussian weight prior: </p><p class="formulaDsp">
+\[ \ell_{\lambda}^\prime=\sum_k[\sum_{m=1}^M \lambda_m F_m(x_k,y_k) - \log Z_\lambda(x_k)] - \frac{\lVert \lambda \rVert^2}{2\sigma ^2} \]
+</p>
+<p class="formulaDsp">
+\[ \nabla \ell_{\lambda}^\prime=\sum_k[F(x_k,y_k) - E_{p_\lambda(Y|x_k)}[F(x_k,Y)]] - \frac{\lambda}{\sigma ^2} \]
+</p>
+<dl class="section user"><dt>Literature</dt><dd>[1] F. Sha, F. Pereira. Shallow Parsing with Conditional Random Fields, <a href="http://www-bcf.usc.edu/~feisha/pubs/shallow03.pdf">http://www-bcf.usc.edu/~feisha/pubs/shallow03.pdf</a></dd></dl>
+<p>[2] Wikipedia, Conditional Random Field, <a href="http://en.wikipedia.org/wiki/Conditional_random_field">http://en.wikipedia.org/wiki/Conditional_random_field</a></p>
+<p>[3] A. Jaiswal, S.Tawari, I. Mansuri, K. Mittal, C. Tiwari (2012), CRF, <a href="http://crf.sourceforge.net/">http://crf.sourceforge.net/</a></p>
+<p>[4] D. Wang, ViterbiCRF, <a href="http://www.cs.berkeley.edu/~daisyw/ViterbiCRF.html">http://www.cs.berkeley.edu/~daisyw/ViterbiCRF.html</a></p>
+<p>[5] Wikipedia, Viterbi Algorithm, <a href="http://en.wikipedia.org/wiki/Viterbi_algorithm">http://en.wikipedia.org/wiki/Viterbi_algorithm</a></p>
+<p>[6] J. Nocedal. Updating Quasi-Newton Matrices with Limited Storage (1980), Mathematics of Computation 35, pp. 773-782</p>
+<p>[7] J. Nocedal, Software for Large-scale Unconstrained Optimization, <a href="http://users.eecs.northwestern.edu/~nocedal/lbfgs.html">http://users.eecs.northwestern.edu/~nocedal/lbfgs.html</a></p>
+<p><a class="anchor" id="related"></a></p><dl class="section user"><dt>Related Topics</dt><dd></dd></dl>
+<p>File <a class="el" href="crf_8sql__in.html" title="SQL functions for conditional random field. ">crf.sql_in</a> <a class="el" href="crf__feature__gen_8sql__in.html" title="SQL function for POS/NER feature extraction. ">crf_feature_gen.sql_in</a> <a class="el" href="viterbi_8sql__in.html" title="concatenate a set of input values into arrays to feed into viterbi c function and create a human read...">viterbi.sql_in</a> (documenting the SQL functions) </p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__datatrans.html b/docs/rc/group__grp__datatrans.html
new file mode 100644
index 0000000..a6ebef2
--- /dev/null
+++ b/docs/rc/group__grp__datatrans.html
@@ -0,0 +1,154 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Data Types and Transformations</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__datatrans.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#groups">Modules</a>  </div>
+  <div class="headertitle">
+<div class="title">Data Types and Transformations</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Data types and operations that transform and shape data. </p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group__grp__arraysmatrix"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__arraysmatrix.html">Arrays and Matrices</a></td></tr>
+<tr class="memdesc:group__grp__arraysmatrix"><td class="mdescLeft">&#160;</td><td class="mdescRight">Mathematical operations for arrays and matrices. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__encode__categorical"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__encode__categorical.html">Encoding Categorical Variables</a></td></tr>
+<tr class="memdesc:group__grp__encode__categorical"><td class="mdescLeft">&#160;</td><td class="mdescRight">Functions to encode categorical variables to prepare data for input into predictive algorithms. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__path"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__path.html">Path</a></td></tr>
+<tr class="memdesc:group__grp__path"><td class="mdescLeft">&#160;</td><td class="mdescRight">A function to perform complex pattern matching across rows and extract useful information about the matches. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__pivot"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__pivot.html">Pivot</a></td></tr>
+<tr class="memdesc:group__grp__pivot"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pivoting and data summarization tools for preparing data for modeling operations. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__sessionize"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__sessionize.html">Sessionize</a></td></tr>
+<tr class="memdesc:group__grp__sessionize"><td class="mdescLeft">&#160;</td><td class="mdescRight">Session reconstruction of data consisting of a time stampled sequence of events. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__stemmer"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__stemmer.html">Stemming</a></td></tr>
+<tr class="memdesc:group__grp__stemmer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provides porter stemmer operations supporting other MADlib modules. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__datatrans.js b/docs/rc/group__grp__datatrans.js
new file mode 100644
index 0000000..4900455
--- /dev/null
+++ b/docs/rc/group__grp__datatrans.js
@@ -0,0 +1,9 @@
+var group__grp__datatrans =
+[
+    [ "Arrays and Matrices", "group__grp__arraysmatrix.html", "group__grp__arraysmatrix" ],
+    [ "Encoding Categorical Variables", "group__grp__encode__categorical.html", null ],
+    [ "Path", "group__grp__path.html", null ],
+    [ "Pivot", "group__grp__pivot.html", null ],
+    [ "Sessionize", "group__grp__sessionize.html", null ],
+    [ "Stemming", "group__grp__stemmer.html", null ]
+];
\ No newline at end of file
diff --git a/docs/rc/group__grp__decision__tree.html b/docs/rc/group__grp__decision__tree.html
new file mode 100644
index 0000000..57517e8
--- /dev/null
+++ b/docs/rc/group__grp__decision__tree.html
@@ -0,0 +1,1169 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Decision Tree</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__decision__tree.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Decision Tree<div class="ingroups"><a class="el" href="group__grp__super.html">Supervised Learning</a> &raquo; <a class="el" href="group__grp__tree.html">Tree Methods</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b><ul>
+<li class="level1">
+<a href="#train">Training Function</a> </li>
+<li class="level1">
+<a href="#runtime">Run-time and Memory Usage</a> </li>
+<li class="level1">
+<a href="#predict">Prediction Function</a> </li>
+<li class="level1">
+<a href="#display">Tree Display</a> </li>
+<li class="level1">
+<a href="#display_importance">Importance Display</a> </li>
+<li class="level1">
+<a href="#examples">Examples</a> </li>
+<li class="level1">
+<a href="#literature">Literature</a> </li>
+<li class="level1">
+<a href="#related">Related Topics</a> </li>
+</ul>
+</div><p>A decision tree is a supervised learning method that can be used for classification and regression. It consists of a structure in which internal nodes represent tests on attributes, and the branches from nodes represent the result of those tests. Each leaf node is a class label and the paths from root to leaf nodes define the set of classification or regression rules.</p>
+<p><a class="anchor" id="train"></a></p><dl class="section user"><dt>Training Function</dt><dd>We implement the decision tree using the CART algorithm introduced by Breiman et al. [1]. The training function has the following syntax: <pre class="syntax">
+tree_train(
+    training_table_name,
+    output_table_name,
+    id_col_name,
+    dependent_variable,
+    list_of_features,
+    list_of_features_to_exclude,
+    split_criterion,
+    grouping_cols,
+    weights,
+    max_depth,
+    min_split,
+    min_bucket,
+    num_splits,
+    pruning_params,
+    null_handling_params,
+    verbosity
+    )
+</pre> <b>Arguments</b> <dl class="arglist">
+<dt>training_table_name </dt>
+<dd><p class="startdd">TEXT. Name of the table containing the training data.</p>
+<p class="enddd"></p>
+</dd>
+<dt>output_table_name </dt>
+<dd><p class="startdd">TEXT. Name of the generated table containing the model. If a table with the same name already exists, an error will be returned. A summary table named <em>&lt;output_table_name&gt;_summary</em> is also created. A cross-validation table <em>&lt;output_table_name&gt;_cv</em> may also be created. These are described later on this page. </p>
+<p class="enddd"></p>
+</dd>
+<dt>id_col_name </dt>
+<dd><p class="startdd">TEXT. Name of the column containing id information in the training data. This is a mandatory argument and is used for prediction and cross-validation. The values are expected to be unique for each row. </p>
+<p class="enddd"></p>
+</dd>
+<dt>dependent_variable </dt>
+<dd><p class="startdd">TEXT. Name of the column that contains the output (response) for training. Boolean, integer and text types are considered to be classification outputs, while double precision values are considered to be regression outputs. The response variable for a classification tree can be multinomial, but the time and space complexity of the training function increases linearly as the number of response classes increases.</p>
+<p class="enddd"></p>
+</dd>
+<dt>list_of_features </dt>
+<dd><p class="startdd">TEXT. Comma-separated string of column names or expressions to use as predictors. Can also be a '*' implying all columns are to be used as predictors (except for the ones included in the next argument that lists exclusions). The types of the features can be mixed: boolean, integer, and text columns are considered categorical and double precision columns are considered continuous. Categorical variables are not encoded and used as is in the training.</p>
+<p>Array columns can also be included in the list, where the array is expanded to treat each element of the array as a feature.</p>
+<p>Note that not every combination of the levels of a categorical variable is checked when evaluating a split. The levels of the non-integer categorical variable are ordered by the entropy of the variable in predicting the response. The split at each node is evaluated between these ordered levels. Integer categorical variables, however, are simply ordered by their value. </p>
+<p class="enddd"></p>
+</dd>
+<dt>list_of_features_to_exclude (optional) </dt>
+<dd><p class="startdd">TEXT. Comma-separated string of column names to exclude from the predictors list. If the <em>dependent_variable</em> is an expression (including cast of a column name), then this list should include the columns present in the <em>dependent_variable</em> expression, otherwise those columns will be included in the features. The names in this parameter should be identical to the names used in the table and quoted appropriately. </p>
+<p class="enddd"></p>
+</dd>
+<dt>split_criterion (optional) </dt>
+<dd><p class="startdd">TEXT, default = 'gini' for classification, 'mse' for regression. Impurity function to compute the feature to use to split a node. Supported criteria are 'gini', 'entropy', 'misclassification' for classification trees. For regression trees, split_criterion of 'mse' (mean-squared error) is always used, irrespective of the input for this argument. Refer to reference [1] for more information on impurity measures.</p>
+<p class="enddd"></p>
+</dd>
+<dt>grouping_cols (optional) </dt>
+<dd><p class="startdd">TEXT, default: NULL. Comma-separated list of column names to group the data by. This will produce multiple decision trees, one for each group. </p>
+<p class="enddd"></p>
+</dd>
+<dt>weights (optional) </dt>
+<dd><p class="startdd">TEXT. Column name containing numerical weights for each observation. Can be any value greater than 0 (does not need to be an integer). This can be used to handle the case of unbalanced data sets. The weights are used to compute a weighted average in the output leaf node. For classification, the contribution of a row towards the vote of its corresponding level is multiplied by the weight (weighted mode). For regression, the output value of the row is multiplied by the weight (weighted mean).</p>
+<p class="enddd"></p>
+</dd>
+<dt>max_depth (optional) </dt>
+<dd><p class="startdd">INTEGER, default: 7. Maximum depth of any node of the final tree, with the root node counted as depth 0. A deeper tree can lead to better prediction but will also result in longer processing time and higher memory usage. Current allowed maximum is 100.</p>
+<p class="enddd"></p>
+</dd>
+<dt>min_split (optional) </dt>
+<dd><p class="startdd">INTEGER, default: 20. Minimum number of observations that must exist in a node for a split to be attempted. The best value for this parameter depends on the number of tuples in the dataset.</p>
+<p class="enddd"></p>
+</dd>
+<dt>min_bucket (optional) </dt>
+<dd><p class="startdd">INTEGER, default: min_split/3. Minimum number of observations in any terminal node. If only one of min_bucket or min_split is specified, min_split is set to min_bucket*3 or min_bucket to min_split/3, as appropriate.</p>
+<p class="enddd"></p>
+</dd>
+<dt>num_splits (optional) </dt>
+<dd><p class="startdd">INTEGER, default: 20. Continuous-valued features are binned into discrete quantiles to compute split boundaries. Uniform binning is used. This global parameter is used to compute the resolution of splits for continuous features. Higher number of bins will lead to better prediction, but will also result in longer processing time and higher memory usage.</p>
+<p class="enddd"></p>
+</dd>
+<dt>pruning_params (optional) </dt>
+<dd><p class="startdd">TEXT. Comma-separated string of key-value pairs giving the parameters for pruning the tree. </p><table class="output">
+<tr>
+<th>cp </th><td><p class="starttd">Default: 0. Complexity parameter. A split on a node is attempted only if it decreases the overall lack of fit by a factor of 'cp', otherwise the split is pruned away. This value is used to create an initial tree before running cross-validation (see below).</p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>n_folds </th><td><p class="starttd">Default: 0 (i.e. no cross-validation). Number of cross-validation folds to use to compute the best value of <em>cp</em>. To perform cross-validation, a positive value of <em>n_folds</em> (2 or more) should be specified. An additional output table <em>&lt;model_table&gt;_cv</em> is created containing the values of evaluated <em>cp</em> and the cross-validation error statistics. The tree returned in the output table corresponds to the <em>cp</em> with the lowest cross-validation error (we pick the maximum <em>cp</em> if multiple values have same error).</p>
+<p>The list of <em>cp</em> values is automatically computed by parsing through the tree initially trained on the complete dataset. The tree output is a subset of this initial tree corresponding to the best computed <em>cp</em>.</p>
+<p class="endtd"></p>
+</td></tr>
+</table>
+<p class="enddd"></p>
+</dd>
+<dt>null_handling_params (optional) </dt>
+<dd><p class="startdd">TEXT. Comma-separated string of key-value pairs controlling the behavior of various features handling missing values. One of the following can be used if desired (not both): </p><table class="output">
+<tr>
+<th>max_surrogates </th><td>Default: 0. Number of surrogates to store for each node. One approach to handling NULLs is to use surrogate splits for each node. A surrogate variable enables you to make better use of the data by using another predictor variable that is associated (correlated) with the primary split variable. The surrogate variable comes into use when the primary predictior value is NULL. Surrogate rules implemented here are based on reference [1].  </td></tr>
+<tr>
+<th>null_as_category </th><td><p class="starttd">Default: FALSE. Whether to treat NULL as a valid level for categorical features. FALSE means that NULL is not a valid level, which is probably the most common sitation.</p>
+<p>If set to TRUE, NULL values are considered a categorical value and placed at the end of the ordering of categorical levels. Placing at the end ensures that NULL is never used as a value to split a node on. One reason to make NULL a category is that it allows you to predict on categorical levels that were not in the training data by lumping them into an "other bucket."</p>
+<p class="endtd">This parameter is ignored for continuous-valued features.   </p>
+</td></tr>
+</table>
+<p class="enddd"></p>
+</dd>
+<dt>verbosity (optional) </dt>
+<dd>BOOLEAN, default: FALSE. Provides verbose output of the training result. </dd>
+</dl>
+</dd></dl>
+<p><b>Output</b> </p><dl class="arglist">
+</dl>
+<p>The model table produced by the training function contains the following columns:</p>
+<table class="output">
+<tr>
+<th>&lt;...&gt; </th><td>Grouping columns, if provided as input, in the same types as the training table. This could be multiple columns depending on the <code>grouping_cols</code> input.  </td></tr>
+<tr>
+<th>tree </th><td>BYTEA8. Trained decision tree model stored in binary format (not human readable).  </td></tr>
+<tr>
+<th>cat_levels_in_text </th><td>TEXT[]. Ordered levels (values) of categorical variables corresponding to the categorical features in the 'list_of_features' argument above. Used to help interpret the trained decision tree. For example, if the categorical features specified are <em>weather_outlook</em> and <em>windy</em> in that order, then 'cat_levels_in_text' might be <em>[overcast, rain, sunny, False, True]</em>.  </td></tr>
+<tr>
+<th>cat_n_levels </th><td>INTEGER[]. Number of levels for each categorical variable. Used to help interpret the trained decision tree. In the example from above, 'cat_n_levels' would be <em>[3, 2]</em> since there are 3 levels for <em>weather_outlook</em> and 2 levels <em>windy</em>.  </td></tr>
+<tr>
+<th>impurity_var_importance </th><td><p class="starttd">DOUBLE PRECISION[]. Impurity importance of each variable. The order of the variables is the same as that of the 'independent_varnames' column in the summary table (see below).</p>
+<p>The impurity importance of any feature is the decrease in impurity by a node containing the feature as a primary split, summed over the whole tree. If surrogates are used, then the importance value includes the impurity decrease scaled by the adjusted surrogate agreement. Importance values are displayed as raw values as per the 'split_criterion' parameter. To see importance values normalized to sum to 100 across all variables, use the importance display helper function described later on this page. Please refer to [1] for more information on variable importance.  </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>tree_depth </th><td><p class="starttd">INTEGER. The maximum depth the tree obtained after training (root has depth 0). </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>pruning_cp </th><td><p class="starttd">DOUBLE PRECISION. The cost complexity parameter used for pruning the trained tree(s). This could be different than the cp value input using the <em>pruning_params</em> if cross-validation is used.  </p>
+<p class="endtd"></p>
+</td></tr>
+</table>
+<p>A summary table named <em>&lt;output_table_name&gt;_summary</em> is also created at the same time, which has the following columns: </p><table class="output">
+<tr>
+<th>method </th><td><p class="starttd">TEXT. 'tree_train' </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>is_classification </th><td><p class="starttd">BOOLEAN. TRUE if the decision trees are for classification, FALSE if for regression. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>source_table </th><td><p class="starttd">TEXT. The data source table name. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>model_table </th><td><p class="starttd">TEXT. The model table name. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>id_col_name </th><td><p class="starttd">TEXT. The ID column name. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>list_of_features </th><td><p class="starttd">TEXT. The list_of_features inputed to the 'tree_train' procedure. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>list_of_features_to_exclude </th><td><p class="starttd">TEXT. The list_of_features_to_exclude inputed to the 'tree_train' procedure. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>dependent_varname </th><td><p class="starttd">TEXT. The dependent variable. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>independent_varnames </th><td><p class="starttd">TEXT. The independent variables. These are the features used in the training of the decision tree. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>cat_features </th><td><p class="starttd">TEXT. The list of categorical feature names as a comma-separated string. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>con_features </th><td><p class="starttd">TEXT. The list of continuous feature names as a comma-separated string. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>grouping_cols </th><td><p class="starttd">TEXT. Names of grouping columns. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>num_all_groups </th><td><p class="starttd">INTEGER. Number of groups in decision tree training. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>num_failed_groups </th><td><p class="starttd">INTEGER. Number of failed groups in decision tree training. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>total_rows_processed </th><td><p class="starttd">BIGINT. Total numbers of rows processed in all groups. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>total_rows_skipped </th><td><p class="starttd">BIGINT. Total numbers of rows skipped in all groups due to missing values or failures. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>dependent_var_levels </th><td><p class="starttd">TEXT. For classification, the distinct levels of the dependent variable. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>dependent_var_type </th><td><p class="starttd">TEXT. The type of dependent variable. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>input_cp </th><td><p class="starttd">DOUBLE PRECISION. The complexity parameter (cp) used for pruning the trained tree(s) before cross-validation is run. This is same as the cp value input using the <em>pruning_params</em>. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>independent_var_types </th><td><p class="starttd">TEXT. A comma separated string for the types of independent variables. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>n_folds </th><td><p class="starttd">BIGINT. Number of cross-validation folds used. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>null_proxy </th><td>TEXT. Describes how NULLs are handled. If NULL is not treated as a separate categorical variable, this will be NULL. If NULL is treated as a separate categorical value, this will be set to "__NULL__"  </td></tr>
+</table>
+<p>A cross-validation table called <em>&lt;output_table_name&gt;_cv</em> is created if 'n_folds' is set in the 'pruning_params'. It has the following columns: </p><table class="output">
+<tr>
+<th>cp </th><td><p class="starttd">DOUBLE PRECISION. Complexity parameter. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>cv_error_avg </th><td><p class="starttd">DOUBLE PRECISION. Average error resulting from cp value. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>cv_error_stdev </th><td>DOUBLE PRECISION. Standard deviation resulting from cp value.  </td></tr>
+</table>
+<dl class="section note"><dt>Note</dt><dd><ul>
+<li>Many of the parameters are designed to be similar to the popular R package 'rpart'. An important distinction between rpart and the MADlib function is that for both response and feature variables, MADlib considers integer values as categorical values, while rpart considers them as continuous. To use integers as continuous, cast them to double precision.</li>
+<li>Integer values are ordered by value for computing the split boundaries. Cast to TEXT if the entropy-based ordering method is desired.</li>
+<li>When cross-validation is not used (<em>n_folds</em>=0), each tree output is pruned by the input cost complexity (<em>cp</em>). With cross-validation, the input <em>cp</em> is the minimum value of all the explored values of 'cp'. During cross-validation, we train an initial tree using the provided <em>cp</em> and explore all possible sub-trees (up to a single-node tree) to compute the optimal sub-tree. The optimal sub-tree and the 'cp' corresponding to this optimal sub-tree is placed in the <em>output_table</em>, with the columns named as <em>tree</em> and <em>pruning_cp</em> respectively.</li>
+</ul>
+</dd></dl>
+<p><a class="anchor" id="runtime"></a></p><dl class="section user"><dt>Run-time and Memory Usage</dt><dd></dd></dl>
+<p>The number of features and the number of class values per categorical feature have a direct impact on run-time and memory. In addition, here is a summary of the main parameters in the training function that affect run-time and memory:</p>
+<table class="doxtable">
+<tr>
+<th align="left">Parameter </th><th align="left">Run-time </th><th align="left">Memory </th><th align="left">Notes  </th></tr>
+<tr>
+<td align="left">'max_depth' </td><td align="left">High </td><td align="left">High </td><td align="left">Deeper trees can take longer to run and use more memory. </td></tr>
+<tr>
+<td align="left">'min_split' </td><td align="left">No or little effect, unless very small. </td><td align="left">No or little effect, unless very small. </td><td align="left">If too small, can impact run-time by building trees that are very thick. </td></tr>
+<tr>
+<td align="left">'min_bucket' </td><td align="left">No or little effect, unless very small. </td><td align="left">No or little effect, unless very small. </td><td align="left">If too small, can impact run-time by building trees that are very thick. </td></tr>
+<tr>
+<td align="left">'num_splits' </td><td align="left">High </td><td align="left">High </td><td align="left">Depends on number of continuous variables. Effectively adds more features as the binning becomes more granular. </td></tr>
+</table>
+<p>If you experience long run-times or are hitting memory limits, consider reducing one or more of these parameters. One approach when building a decision tree model is to start with a low maximum depth value and use suggested defaults for other parameters. This will give you a sense of run-time and test set accuracy. Then you can change maximum depth in a systematic way as required to improve accuracy.</p>
+<p><a class="anchor" id="predict"></a></p><dl class="section user"><dt>Prediction Function</dt><dd>The prediction function estimates the conditional mean given a new predictor. It has the following syntax: <pre class="syntax">
+tree_predict(tree_model,
+             new_data_table,
+             output_table,
+             type)
+</pre></dd></dl>
+<p><b>Arguments</b> </p><dl class="arglist">
+<dt>tree_model </dt>
+<dd><p class="startdd">TEXT. Name of the table containing the decision tree model. This should be the output table returned from <em>tree_train.</em></p>
+<p class="enddd"></p>
+</dd>
+<dt>new_data_table </dt>
+<dd><p class="startdd">TEXT. Name of the table containing prediction data. This table is expected to contain the same features that were used during training. The table should also contain <em>id_col_name</em> used for identifying each row.</p>
+<p class="enddd"></p>
+</dd>
+<dt>output_table </dt>
+<dd><p class="startdd">TEXT. Name of the table to output prediction results. If this table already exists, an error is returned. The table contains the <em>id_col_name</em> column giving the 'id' for each prediction and the prediction columns for the dependent variable.</p>
+<p>If <em>type</em> = 'response', then the table has a single additional column with the prediction value of the response. The type of this column depends on the type of the response variable used during training.</p>
+<p>If <em>type</em> = 'prob', then the table has multiple additional columns, one for each possible value of the response variable. The columns are labeled as 'estimated_prob_<em>dep_value</em>', where <em>dep_value</em> represents each value of the response variable.</p>
+<p class="enddd"></p>
+</dd>
+<dt>type (optional) </dt>
+<dd>TEXT, optional, default: 'response'. For regression trees, the output is always the predicted value of the dependent variable. For classification trees, the <em>type</em> variable can be 'response', giving the classification prediction as output, or 'prob', giving the class probabilities as output. For each value of the dependent variable, a column with the probabilities is added to the output table.  </dd>
+</dl>
+<p><a class="anchor" id="display"></a></p><dl class="section user"><dt>Tree Display</dt><dd>The display function outputs a graph representation of the decision tree. The output can either be in the popular 'dot' format that can be visualized using various programs including those in the GraphViz package, or in a simple text format. The details of the text format are output with the tree. <pre class="syntax">
+tree_display(tree_model, dot_format, verbosity)
+</pre></dd></dl>
+<p>An additional display function is provided to output the surrogate splits chosen for each internal node: </p><pre class="syntax">
+tree_surr_display(tree_model)
+</pre><p>This output contains the list of surrogate splits for each internal node. The nodes are sorted in ascending order by id. This is equivalent to viewing the tree in a breadth-first manner. For each surrogate, we output the surrogate split (variable and threshold) and also give the number of rows that were common between the primary split and the surrogate split. Finally, the number of rows present in the majority branch of the primary split is also shown. Only surrogates that perform better than this majority branch are included in the surrogate list. When the primary variable has a NULL value the surrogate variables are used in order to compute the split for that node. If all surrogates variables are NULL, then the majority branch is used to compute the split for a tuple.</p>
+<p><b>Arguments</b> </p><dl class="arglist">
+<dt>tree_model </dt>
+<dd>TEXT. Name of the table containing the decision tree model. </dd>
+<dt>dot_format (optional) </dt>
+<dd>BOOLEAN, default = TRUE. Output can either be in a dot format or a text format. If TRUE, the result is in the dot format, else output is in text format. </dd>
+<dt>verbosity (optional) </dt>
+<dd>BOOLEAN, default = FALSE. If set to TRUE, the dot format output will contain additional information (impurity, sample size, number of weighted rows for each response variable, classification or prediction if the tree was pruned at this level) </dd>
+</dl>
+<p>The output is always returned as a 'TEXT'. For the dot format, the output can be redirected to a file on the client side and then rendered using visualization programs.</p>
+<p>To export the dot format result to an external file, use the method below. Please note that you should use unaligned table output mode for psql with '-A' flag, or else you may get an error when you try to convert the dot file to another format for viewing (e.g., PDF). And inside the psql client, both '\t' and '\o' should be used:</p>
+<pre class="example">
+&gt; # under bash
+&gt; psql -A my_database
+# -- in psql now
+# \t
+# \o test.dot -- export to a file
+# select madlib.tree_display('tree_out');
+# \o
+# \t
+</pre><p>After the dot file has been generated, use third-party plotting software to plot the trees in a nice format: </p><pre class="example">
+&gt; # under bash, convert the dot file into a PDF file
+&gt; dot -Tpdf test.dot &gt; test.pdf
+&gt; xpdf test.pdf&amp;
+</pre><p>Please see the examples below for more details on the contents of the tree output formats.</p>
+<p>An additional display function is provided to output the surrogate splits chosen for each internal node: </p><pre class="syntax">
+tree_surr_display(tree_model)
+</pre><p><a class="anchor" id="display_importance"></a></p><dl class="section user"><dt>Importance Display</dt><dd></dd></dl>
+<p>This is a helper function that creates a table to more easily view impurity variable importance values for a given model table. This function rescales the importance values to represent them as percentages i.e. importance values are scaled to sum to 100.</p>
+<pre class="syntax">
+<a class="el" href="random__forest_8sql__in.html#aea5ca2b827a4ee552a8c0f4d4d947725">get_var_importance(model_table, output_table)</a>
+</pre><p><b>Arguments</b> </p><dl class="arglist">
+<dt>model_table </dt>
+<dd>TEXT. Name of the table containing the decision tree model. </dd>
+<dt>output_table </dt>
+<dd>TEXT. Name of the table to create for importance values. </dd>
+</dl>
+<p>The summary table generated by the tree_train function is necessary for this function to work.</p>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd><h4>Decision Tree Classification Examples</h4>
+</dd></dl>
+<ol type="1">
+<li>Load input data set related to whether to play golf or not: <pre class="example">
+DROP TABLE IF EXISTS dt_golf CASCADE;
+CREATE TABLE dt_golf (
+    id integer NOT NULL,
+    "OUTLOOK" text,
+    temperature double precision,
+    humidity double precision,
+    "Temp_Humidity" double precision[],
+    clouds_airquality text[],
+    windy boolean,
+    class text,
+    observation_weight double precision
+);
+INSERT INTO dt_golf VALUES
+(1,'sunny', 85, 85, ARRAY[85, 85],ARRAY['none', 'unhealthy'], 'false','Don''t Play', 5.0),
+(2, 'sunny', 80, 90, ARRAY[80, 90], ARRAY['none', 'moderate'], 'true', 'Don''t Play', 5.0),
+(3, 'overcast', 83, 78, ARRAY[83, 78], ARRAY['low', 'moderate'], 'false', 'Play', 1.5),
+(4, 'rain', 70, 96, ARRAY[70, 96], ARRAY['low', 'moderate'], 'false', 'Play', 1.0),
+(5, 'rain', 68, 80, ARRAY[68, 80], ARRAY['medium', 'good'], 'false', 'Play', 1.0),
+(6, 'rain', 65, 70, ARRAY[65, 70], ARRAY['low', 'unhealthy'], 'true', 'Don''t Play', 1.0),
+(7, 'overcast', 64, 65, ARRAY[64, 65], ARRAY['medium', 'moderate'], 'true', 'Play', 1.5),
+(8, 'sunny', 72, 95, ARRAY[72, 95], ARRAY['high', 'unhealthy'], 'false', 'Don''t Play', 5.0),
+(9, 'sunny', 69, 70, ARRAY[69, 70], ARRAY['high', 'good'], 'false', 'Play', 5.0),
+(10, 'rain', 75, 80, ARRAY[75, 80], ARRAY['medium', 'good'], 'false', 'Play', 1.0),
+(11, 'sunny', 75, 70, ARRAY[75, 70], ARRAY['none', 'good'], 'true', 'Play', 5.0),
+(12, 'overcast', 72, 90, ARRAY[72, 90], ARRAY['medium', 'moderate'], 'true', 'Play', 1.5),
+(13, 'overcast', 81, 75, ARRAY[81, 75], ARRAY['medium', 'moderate'], 'false', 'Play', 1.5),
+(14, 'rain', 71, 80, ARRAY[71, 80], ARRAY['low', 'unhealthy'], 'true', 'Don''t Play', 1.0);
+</pre></li>
+<li>Run the decision tree training function: <pre class="example">
+DROP TABLE IF EXISTS train_output, train_output_summary;
+SELECT madlib.tree_train('dt_golf',         -- source table
+                         'train_output',    -- output model table
+                         'id',              -- id column
+                         'class',           -- response
+                         '"OUTLOOK", temperature, windy',   -- features
+                         NULL::text,        -- exclude columns
+                         'gini',            -- split criterion
+                         NULL::text,        -- no grouping
+                         NULL::text,        -- no weights, all observations treated equally
+                         5,                 -- max depth
+                         3,                 -- min split
+                         1,                 -- min bucket
+                         10                 -- number of bins per continuous variable
+                         );
+</pre> View the output table (excluding the tree which is in binary format): <pre class="example">
+\x on
+SELECT pruning_cp, cat_levels_in_text, cat_n_levels, impurity_var_importance, tree_depth FROM train_output;
+</pre> <pre class="result">
+-[ RECORD 1 ]-----------+--------------------------------------
+pruning_cp              | 0
+cat_levels_in_text      | {overcast,rain,sunny,False,True}
+cat_n_levels            | {3,2}
+impurity_var_importance | {0.102040816326531,0,0.85905612244898}
+tree_depth              | 5
+</pre> View the summary table: <pre class="example">
+\x on
+SELECT * FROM train_output_summary;
+</pre> <pre class="result">
+-[ RECORD 1 ]---------------+--------------------------------
+method                      | tree_train
+is_classification           | t
+source_table                | dt_golf
+model_table                 | train_output
+id_col_name                 | id
+list_of_features            | "OUTLOOK", temperature, windy
+list_of_features_to_exclude | None
+dependent_varname           | class
+independent_varnames        | "OUTLOOK",windy,temperature
+cat_features                | "OUTLOOK",windy
+con_features                | temperature
+grouping_cols               |
+num_all_groups              | 1
+num_failed_groups           | 0
+total_rows_processed        | 14
+total_rows_skipped          | 0
+dependent_var_levels        | "Don't Play","Play"
+dependent_var_type          | text
+input_cp                    | 0
+independent_var_types       | text, boolean, double precision
+n_folds                     | 0
+null_proxy                  |
+</pre> View the normalized impurity importance table using the helper function: <pre class="example">
+\x off
+DROP TABLE IF EXISTS imp_output;
+SELECT madlib.get_var_importance('train_output','imp_output');
+SELECT * FROM imp_output;
+</pre> <pre class="result">
+   feature   | impurity_var_importance
+-------------+-------------------------
+ "OUTLOOK"   |        10.6171090593052
+ windy       |                       0
+ temperature |         89.382786893026
+</pre></li>
+<li>Predict output categories. For the purpose of this example, we use the same data that was used for training: <pre class="example">
+\x off
+DROP TABLE IF EXISTS prediction_results;
+SELECT madlib.tree_predict('train_output',          -- tree model
+                           'dt_golf',               -- new data table
+                           'prediction_results',    -- output table
+                           'response');             -- show response
+SELECT g.id, class, estimated_class FROM prediction_results p,
+dt_golf g WHERE p.id = g.id ORDER BY g.id;
+</pre> <pre class="result">
+ id |   class    | estimated_class
+----+------------+-----------------
+  1 | Don't Play | Don't Play
+  2 | Don't Play | Don't Play
+  3 | Play       | Play
+  4 | Play       | Play
+  5 | Play       | Play
+  6 | Don't Play | Don't Play
+  7 | Play       | Play
+  8 | Don't Play | Don't Play
+  9 | Play       | Play
+ 10 | Play       | Play
+ 11 | Play       | Play
+ 12 | Play       | Play
+ 13 | Play       | Play
+ 14 | Don't Play | Don't Play
+(14 rows)
+</pre> To display the probabilities associated with each value of the dependent variable, set the 'type' parameter to 'prob': <pre class="example">
+DROP TABLE IF EXISTS prediction_results;
+SELECT madlib.tree_predict('train_output',          -- tree model
+                           'dt_golf',               -- new data table
+                           'prediction_results',    -- output table
+                           'prob');                 -- show probability
+SELECT g.id, class, "estimated_prob_Don't Play",  "estimated_prob_Play"
+FROM prediction_results p, dt_golf g WHERE p.id = g.id ORDER BY g.id;
+</pre> <pre class="result">
+ id |   class    | estimated_prob_Don't Play | estimated_prob_Play
+----+------------+---------------------------+---------------------
+  1 | Don't Play |                         1 |                   0
+  2 | Don't Play |                         1 |                   0
+  3 | Play       |                         0 |                   1
+  4 | Play       |                         0 |                   1
+  5 | Play       |                         0 |                   1
+  6 | Don't Play |                         1 |                   0
+  7 | Play       |                         0 |                   1
+  8 | Don't Play |                         1 |                   0
+  9 | Play       |                         0 |                   1
+ 10 | Play       |                         0 |                   1
+ 11 | Play       |                         0 |                   1
+ 12 | Play       |                         0 |                   1
+ 13 | Play       |                         0 |                   1
+ 14 | Don't Play |                         1 |                   0
+(14 rows)
+</pre></li>
+<li>View the tree in text format: <pre class="example">
+SELECT madlib.tree_display('train_output', FALSE);
+</pre> <pre class="result">
+&#160;-------------------------------------
+&#160;- Each node represented by 'id' inside ().
+&#160;- Each internal nodes has the split condition at the end, while each
+        leaf node has a * at the end.
+&#160;- For each internal node (i), its child nodes are indented by 1 level
+        with ids (2i+1) for True node and (2i+2) for False node.
+&#160;- Number of (weighted) rows for each response variable inside [].'
+        The response label order is given as ['"\'Don\'t Play\'"', '"\'Play\'"'].
+        For each leaf, the prediction is given after the '--&gt;'
+&#160;-------------------------------------
+ (0)[5 9]  "OUTLOOK" in {overcast}
+    (1)[0 4]  * --&gt; "Play"
+    (2)[5 5]  temperature &lt;= 75
+       (5)[3 5]  temperature &lt;= 65
+          (11)[1 0]  * --&gt; "Don't Play"
+          (12)[2 5]  temperature &lt;= 70
+             (25)[0 3]  * --&gt; "Play"
+             (26)[2 2]  temperature &lt;= 72
+                (53)[2 0]  * --&gt; "Don't Play"
+                (54)[0 2]  * --&gt; "Play"
+       (6)[2 0]  * --&gt; "Don't Play"
+&#160;-------------------------------------
+</pre> Here are some details on how to interpret the tree display above:<ul>
+<li>Node numbering starts at 0 for the root node and would be contiguous 1,2...n if the tree was completely full (no pruning). Since the tree has been pruned, the node numbering is not contiguous.</li>
+<li>The order of values [x y] indicates the number of weighted rows that correspond to ["Don't play" "Play"] <em>before</em> the node test. For example, at (root) node 0, there are 5 rows for "Don't play" and 9 rows for "Play" in the raw data.</li>
+<li>If we apply the test of "OUTLOOK" being overcast, then the True (yes) result is leaf node 1 which is "Play". There are 0 "Don't play" rows and 4 "Play" rows that correspond to this case (overcast). In other words, if it is overcast, you always play golf. If it is not overcast, you may or may not play golf, depending on the rest of the tree.</li>
+<li>The remaining 5 "Don't play" rows and 5 "Play rows" are then tested at node 2 on temperature&lt;=75. The False (no) result is leaf node 6 which is "Don't Play". The True (yes) result proceeds to leaf node 5 to test on temperature&lt;=65. And so on down the tree.</li>
+<li>Creating a dot format visualization of the tree, as described below, can help with following the decision flows.</li>
+</ul>
+</li>
+<li>Create a dot format display of the tree: <pre class="example">
+SELECT madlib.tree_display('train_output', TRUE);
+</pre> <pre class="result">
+ digraph "Classification tree for dt_golf" {
+          subgraph "cluster0"{
+          label=""
+ "g0_0" [label="\"OUTLOOK" &lt;= overcast", shape=ellipse];
+ "g0_0" -&gt; "g0_1"[label="yes"];
+ "g0_1" [label=""Play"",shape=box];
+ "g0_0" -&gt; "g0_2"[label="no"];
+ "g0_2" [label="temperature &lt;= 75", shape=ellipse];
+ "g0_2" -&gt; "g0_5"[label="yes"];
+ "g0_2" -&gt; "g0_6"[label="no"];
+ "g0_6" [label=""Don't Play"",shape=box];
+ "g0_5" [label="temperature &lt;= 65", shape=ellipse];
+ "g0_5" -&gt; "g0_11"[label="yes"];
+ "g0_11" [label=""Don't Play"",shape=box];
+ "g0_5" -&gt; "g0_12"[label="no"];
+ "g0_12" [label="temperature &lt;= 70", shape=ellipse];
+ "g0_12" -&gt; "g0_25"[label="yes"];
+ "g0_25" [label=""Play"",shape=box];
+ "g0_12" -&gt; "g0_26"[label="no"];
+ "g0_26" [label="temperature &lt;= 72", shape=ellipse];
+ "g0_26" -&gt; "g0_53"[label="yes"];
+ "g0_53" [label=""Don't Play"",shape=box];
+ "g0_26" -&gt; "g0_54"[label="no"];
+ "g0_54" [label=""Play"",shape=box];
+&#160;&#160;&#160;} //--- end of subgraph------------
+&#160;} //---end of digraph---------
+</pre> One important difference to note about the dot format above is how categorical variable tests are displayed:<ul>
+<li>In the text format of the tree, the node 0 test is "OUTLOOK" in {overcast}, but in the dot format of the tree, the same node 0 test reads "\"OUTLOOK" &lt;= overcast". This is because in dot format for categorical variables, the '&lt;=' symbol represents the location in the array 'cat_levels_in_text' from the output table for the "OUTLOOK" levels. The array is ['overcast', 'rain', 'sunny', 'False', 'True'] with the first 3 entries corresponding to "OUTLOOK" and the last 2 entries corresponding to 'windy'. So the test "\"OUTLOOK" &lt;= overcast" means all "OUTLOOK" levels to the left of, and including, 'overcast'. In this case there are no levels to the left of 'overcast' in the array so it is simply a test on whether it is overcast or not.</li>
+<li>If there was a test "\"OUTLOOK" &lt;= rain", this would include both 'overcast' and 'rain', since 'overcast' is to the left of 'rain' in the array.</li>
+<li>If there was a test "windy &lt;= True", this would include both 'False' and 'True', since 'False' is to the left of 'True' in the array.</li>
+</ul>
+</li>
+<li>Now create a dot format display of the tree with additional information: <pre class="example">
+SELECT madlib.tree_display('train_output', TRUE, TRUE);
+</pre> <pre class="result">
+ digraph "Classification tree for dt_golf" {
+          subgraph "cluster0"{
+          label=""
+ "g0_0" [label="\"OUTLOOK" &lt;= overcast\n impurity = 0.459184\n samples = 14\n value = [5 9]\n class = "Play"", shape=ellipse];
+ "g0_0" -&gt; "g0_1"[label="yes"];
+ "g0_1" [label=""Play"\n impurity = 0\n samples = 4\n value = [0 4]",shape=box];
+ "g0_0" -&gt; "g0_2"[label="no"];
+ "g0_2" [label="temperature &lt;= 75\n impurity = 0.5\n samples = 10\n value = [5 5]\n class = "Don't Play"", shape=ellipse];
+ "g0_2" -&gt; "g0_5"[label="yes"];
+ "g0_2" -&gt; "g0_6"[label="no"];
+ "g0_6" [label=""Don't Play"\n impurity = 0\n samples = 2\n value = [2 0]",shape=box];
+ "g0_5" [label="temperature &lt;= 65\n impurity = 0.46875\n samples = 8\n value = [3 5]\n class = "Play"", shape=ellipse];
+ "g0_5" -&gt; "g0_11"[label="yes"];
+ "g0_11" [label=""Don't Play"\n impurity = 0\n samples = 1\n value = [1 0]",shape=box];
+ "g0_5" -&gt; "g0_12"[label="no"];
+ "g0_12" [label="temperature &lt;= 70\n impurity = 0.408163\n samples = 7\n value = [2 5]\n class = "Play"", shape=ellipse];
+ "g0_12" -&gt; "g0_25"[label="yes"];
+ "g0_25" [label=""Play"\n impurity = 0\n samples = 3\n value = [0 3]",shape=box];
+ "g0_12" -&gt; "g0_26"[label="no"];
+ "g0_26" [label="temperature &lt;= 72\n impurity = 0.5\n samples = 4\n value = [2 2]\n class = "Don't Play"", shape=ellipse];
+ "g0_26" -&gt; "g0_53"[label="yes"];
+ "g0_53" [label=""Don't Play"\n impurity = 0\n samples = 2\n value = [2 0]",shape=box];
+ "g0_26" -&gt; "g0_54"[label="no"];
+ "g0_54" [label=""Play"\n impurity = 0\n samples = 2\n value = [0 2]",shape=box];
+&#160;&#160;&#160;} //--- end of subgraph------------
+&#160;} //---end of digraph---------
+</pre> The additional information in each node is: impurity, sample size, number of weighted rows for each response variable, and classification if the tree was pruned at this level. If your tree is not too big, you may wish to convert the dot format to PDF or another format for better visualization of the tree structure.</li>
+<li>Arrays of features. Categorical and continuous features can be array columns, in which case the array is expanded to treat each element of the array as a feature: <pre class="example">
+DROP TABLE IF EXISTS train_output, train_output_summary;
+SELECT madlib.tree_train('dt_golf',         -- source table
+                         'train_output',    -- output model table
+                         'id',              -- id column
+                         'class',           -- response
+                         '"Temp_Humidity", clouds_airquality',   -- features
+                         NULL::text,        -- exclude columns
+                         'gini',            -- split criterion
+                         NULL::text,        -- no grouping
+                         NULL::text,        -- no weights, all observations treated equally
+                         5,                 -- max depth
+                         3,                 -- min split
+                         1,                 -- min bucket
+                         10                 -- number of bins per continuous variable
+                         );
+</pre> View the output table (excluding the tree which is in binary format): <pre class="example">
+\x on
+SELECT pruning_cp, cat_levels_in_text, cat_n_levels, impurity_var_importance, tree_depth FROM train_output;
+</pre> <pre class="result">
+-[ RECORD 1 ]-----------+-----------------------------------------------------
+pruning_cp              | 0
+cat_levels_in_text      | {medium,none,high,low,unhealthy,good,moderate}
+cat_n_levels            | {4,3}
+impurity_var_importance | {0,0.330612244897959,0.0466666666666666,0.444444444444444}
+tree_depth              | 3
+</pre> The first 4 levels correspond to cloud ceiling and the next 3 levels correspond to air quality.</li>
+<li>Weighting observations. Use the 'weights' parameter to adjust a row's vote to balance the dataset. In our example, the weights are somewhat random but show that a different decision tree is create compared to the case where no weights are used: <pre class="example">
+DROP TABLE IF EXISTS train_output, train_output_summary;
+SELECT madlib.tree_train('dt_golf',         -- source table
+                         'train_output',    -- output model table
+                         'id',              -- id column
+                         'class',           -- response
+                         '"OUTLOOK", temperature, windy',   -- features
+                         NULL::text,        -- exclude columns
+                         'gini',            -- split criterion
+                         NULL::text,        -- no grouping
+                         'observation_weight', -- weight observations
+                         5,                 -- max depth
+                         3,                 -- min split
+                         1,                 -- min bucket
+                         10                 -- number of bins per continuous variable
+                         );
+SELECT madlib.tree_display('train_output');
+</pre> <pre class="result">
+&#160; -------------------------------------
+&#160; - Each node represented by 'id' inside ().
+&#160; - Each internal nodes has the split condition at the end, while each
+         leaf node has a * at the end.
+&#160; - For each internal node (i), its child nodes are indented by 1 level
+         with ids (2i+1) for True node and (2i+2) for False node.
+&#160; - Number of (weighted) rows for each response variable inside [].'
+         The response label order is given as ['"Don\'t Play"', '"Play"'].
+         For each leaf, the prediction is given after the '--&gt;'
+&#160; -------------------------------------
+ (0)[17 19]  temperature &lt;= 75
+    (1)[ 7 16]  temperature &lt;= 72
+       (3)[ 7 10]  temperature &lt;= 70
+          (7)[  1 8.5]  * --&gt; "Play"
+          (8)[  6 1.5]  "OUTLOOK" in {overcast}
+             (17)[  0 1.5]  * --&gt; "Play"
+             (18)[6 0]  * --&gt; "Don't Play"
+       (4)[0 6]  * --&gt; "Play"
+    (2)[10  3]  "OUTLOOK" in {overcast}
+       (5)[0 3]  * --&gt; "Play"
+       (6)[10  0]  * --&gt; "Don't Play"
+</pre></li>
+</ol>
+<h4>Decision Tree Regression Examples</h4>
+<ol type="1">
+<li>Load input data related to fuel consumption and 10 aspects of automobile design and performance for 32 automobiles (1973–74 models). Data was extracted from the 1974 Motor Trend US magazine. <pre class="example">
+DROP TABLE IF EXISTS mt_cars;
+CREATE TABLE mt_cars (
+    id integer NOT NULL,
+    mpg double precision,
+    cyl integer,
+    disp double precision,
+    hp integer,
+    drat double precision,
+    wt double precision,
+    qsec double precision,
+    vs integer,
+    am integer,
+    gear integer,
+    carb integer
+);
+INSERT INTO mt_cars VALUES
+(1,18.7,8,360,175,3.15,3.44,17.02,0,0,3,2),
+(2,21,6,160,110,3.9,2.62,16.46,0,1,4,4),
+(3,24.4,4,146.7,62,3.69,3.19,20,1,0,4,2),
+(4,21,6,160,110,3.9,2.875,17.02,0,1,4,4),
+(5,17.8,6,167.6,123,3.92,3.44,18.9,1,0,4,4),
+(6,16.4,8,275.8,180,3.078,4.07,17.4,0,0,3,3),
+(7,22.8,4,108,93,3.85,2.32,18.61,1,1,4,1),
+(8,17.3,8,275.8,180,3.078,3.73,17.6,0,0,3,3),
+(9,21.4,null,258,110,3.08,3.215,19.44,1,0,3,1),
+(10,15.2,8,275.8,180,3.078,3.78,18,0,0,3,3),
+(11,18.1,6,225,105,2.768,3.46,20.22,1,0,3,1),
+(12,32.4,4,78.7,66,4.08,2.20,19.47,1,1,4,1),
+(13,14.3,8,360,245,3.21,3.578,15.84,0,0,3,4),
+(14,22.8,4,140.8,95,3.92,3.15,22.9,1,0,4,2),
+(15,30.4,4,75.7,52,4.93,1.615,18.52,1,1,4,2),
+(16,19.2,6,167.6,123,3.92,3.44,18.3,1,0,4,4),
+(17,33.9,4,71.14,65,4.22,1.835,19.9,1,1,4,1),
+(18,15.2,null,304,150,3.15,3.435,17.3,0,0,3,2),
+(19,10.4,8,472,205,2.93,5.25,17.98,0,0,3,4),
+(20,27.3,4,79,66,4.08,1.935,18.9,1,1,4,1),
+(21,10.4,8,460,215,3,5.424,17.82,0,0,3,4),
+(22,26,4,120.3,91,4.43,2.14,16.7,0,1,5,2),
+(23,14.7,8,440,230,3.23,5.345,17.42,0,0,3,4),
+(24,30.4,4,95.14,113,3.77,1.513,16.9,1,1,5,2),
+(25,21.5,4,120.1,97,3.70,2.465,20.01,1,0,3,1),
+(26,15.8,8,351,264,4.22,3.17,14.5,0,1,5,4),
+(27,15.5,8,318,150,2.768,3.52,16.87,0,0,3,2),
+(28,15,8,301,335,3.54,3.578,14.6,0,1,5,8),
+(29,13.3,8,350,245,3.73,3.84,15.41,0,0,3,4),
+(30,19.2,8,400,175,3.08,3.845,17.05,0,0,3,2),
+(31,19.7,6,145,175,3.62,2.77,15.5,0,1,5,6),
+(32,21.4,4,121,109,4.11,2.78,18.6,1,1,4,2);
+</pre></li>
+<li>We train a regression decision tree with surrogates in order to handle the NULL feature values: <pre class="example">
+DROP TABLE IF EXISTS train_output, train_output_summary, train_output_cv;
+SELECT madlib.tree_train('mt_cars',         -- source table
+                         'train_output',    -- output model table
+                         'id',              -- id column
+                         'mpg',             -- dependent variable
+                         '*',               -- features
+                         'id, hp, drat, am, gear, carb',  -- exclude columns
+                         'mse',             -- split criterion
+                         NULL::text,        -- no grouping
+                         NULL::text,        -- no weights, all observations treated equally
+                         10,                -- max depth
+                         8,                 -- min split
+                         3,                 -- number of bins per continuous variable
+                         10,                -- number of splits
+                         NULL,              -- pruning parameters
+                         'max_surrogates=2' -- number of surrogates
+                         );
+</pre> View the output table (excluding the tree which is in binary format) which shows ordering of levels of categorical variables 'vs' and 'cyl': <pre class="example">
+SELECT pruning_cp, cat_levels_in_text, cat_n_levels, impurity_var_importance, tree_depth FROM train_output;
+</pre> <pre class="result">
+-[ RECORD 1 ]-----------+------------------------------------------------------------------------
+pruning_cp              | 0
+cat_levels_in_text      | {0,1,4,6,8}
+cat_n_levels            | {2,3}
+impurity_var_importance | {0,22.6309172500675,4.79024943310651,2.32115000000003,13.8967382920111}
+tree_depth              | 4
+</pre> View the summary table: <pre class="example">
+\x on
+SELECT * FROM train_output_summary;
+</pre> <pre class="result">
+-[ RECORD 1 ]---------------+-----------------------------------------------------------------------
+method                      | tree_train
+is_classification           | f
+source_table                | mt_cars
+model_table                 | train_output
+id_col_name                 | id
+list_of_features            | *
+list_of_features_to_exclude | id, hp, drat, am, gear, carb
+dependent_varname           | mpg
+independent_varnames        | vs,cyl,disp,qsec,wt
+cat_features                | vs,cyl
+con_features                | disp,qsec,wt
+grouping_cols               |
+num_all_groups              | 1
+num_failed_groups           | 0
+total_rows_processed        | 32
+total_rows_skipped          | 0
+dependent_var_levels        |
+dependent_var_type          | double precision
+input_cp                    | 0
+independent_var_types       | integer, integer, double precision, double precision, double precision
+n_folds                     | 0
+null_proxy                  |
+</pre> View the normalized impurity importance table using the helper function: <pre class="example">
+\x off
+DROP TABLE IF EXISTS imp_output;
+SELECT madlib.get_var_importance('train_output','imp_output');
+SELECT * FROM imp_output ORDER BY impurity_var_importance DESC;
+</pre> <pre class="result">
+ feature | impurity_var_importance
+---------+-------------------------
+ cyl     |        51.8593190075796
+ wt      |        31.8447271176382
+ disp    |        10.9769776775887
+ qsec    |        5.31897390566817
+ vs      |                       0
+</pre></li>
+<li>Predict regression output for the same data and compare with original: <pre class="example">
+\x off
+DROP TABLE IF EXISTS prediction_results;
+SELECT madlib.tree_predict('train_output',
+                           'mt_cars',
+                           'prediction_results',
+                           'response');
+SELECT s.id, mpg, estimated_mpg, mpg-estimated_mpg as delta
+FROM prediction_results p,
+mt_cars s WHERE s.id = p.id ORDER BY id;
+</pre> Result: <pre class="result">
+ id | mpg  |  estimated_mpg   |        delta
+----+------+------------------+---------------------
+  1 | 18.7 |            16.84 |                1.86
+  2 |   21 | 19.7428571428571 |    1.25714285714286
+  3 | 24.4 |            22.58 |                1.82
+  4 |   21 | 19.7428571428571 |    1.25714285714286
+  5 | 17.8 | 19.7428571428571 |   -1.94285714285714
+  6 | 16.4 |            16.84 |  -0.439999999999998
+  7 | 22.8 |            22.58 |   0.219999999999999
+  8 | 17.3 |           13.325 |               3.975
+  9 | 21.4 | 19.7428571428571 |    1.65714285714286
+ 10 | 15.2 |           13.325 |               1.875
+ 11 | 18.1 | 19.7428571428571 |   -1.64285714285714
+ 12 | 32.4 | 30.0666666666667 |    2.33333333333334
+ 13 | 14.3 |            14.78 |               -0.48
+ 14 | 22.8 |            22.58 |   0.219999999999999
+ 15 | 30.4 | 30.0666666666667 |   0.333333333333336
+ 16 | 19.2 | 19.7428571428571 |  -0.542857142857141
+ 17 | 33.9 | 30.0666666666667 |    3.83333333333334
+ 18 | 15.2 |            16.84 |               -1.64
+ 19 | 10.4 |           13.325 |              -2.925
+ 20 | 27.3 | 30.0666666666667 |   -2.76666666666666
+ 21 | 10.4 |           13.325 |              -2.925
+ 22 |   26 | 30.0666666666667 |   -4.06666666666666
+ 23 | 14.7 |            16.84 |               -2.14
+ 24 | 30.4 | 30.0666666666667 |   0.333333333333336
+ 25 | 21.5 |            22.58 |               -1.08
+ 26 | 15.8 |            14.78 |                1.02
+ 27 | 15.5 |            14.78 |   0.719999999999999
+ 28 |   15 |            14.78 |   0.219999999999999
+ 29 | 13.3 |            14.78 |               -1.48
+ 30 | 19.2 |            16.84 |                2.36
+ 31 | 19.7 | 19.7428571428571 | -0.0428571428571409
+ 32 | 21.4 |            22.58 |               -1.18
+(32 rows)
+</pre></li>
+<li>Display the decision tree in basic text format: <pre class="example">
+SELECT madlib.tree_display('train_output', FALSE);
+</pre> <pre class="result">
+&#160; -------------------------------------
+&#160;- Each node represented by 'id' inside ().
+&#160;- Each internal nodes has the split condition at the end, while each
+&#160;    leaf node has a * at the end.
+&#160;- For each internal node (i), its child nodes are indented by 1 level
+&#160;    with ids (2i+1) for True node and (2i+2) for False node.
+&#160;- Number of rows and average response value inside []. For a leaf node, this is the prediction.
+&#160;-------------------------------------
+ (0)[32, 20.0906]  cyl in {4}
+    (1)[11, 26.6636]  wt &lt;= 2.2
+       (3)[6, 30.0667]  *
+       (4)[5, 22.58]  *
+    (2)[21, 16.6476]  disp &lt;= 258
+       (5)[7, 19.7429]  *
+       (6)[14, 15.1]  qsec &lt;= 17.42
+          (13)[10, 15.81]  qsec &lt;= 16.9
+             (27)[5, 14.78]  *
+             (28)[5, 16.84]  *
+          (14)[4, 13.325]  *
+ &#160;-------------------------------------
+(1 row)
+</pre></li>
+<li>Display the surrogate variables that are used to compute the split for each node when the primary variable is NULL: <pre class="example">
+SELECT madlib.tree_surr_display('train_output');
+</pre> <pre class="result">
+&#160;-------------------------------------
+       Surrogates for internal nodes
+&#160;-------------------------------------
+ (0) cyl in {4}
+      1: disp &lt;= 146.7    [common rows = 29]
+      2: vs in {1}    [common rows = 26]
+      [Majority branch = 11 ]
+ (1) wt &lt;= 2.2
+      [Majority branch = 19 ]
+ (2) disp &lt;= 258
+      1: cyl in {4,6}    [common rows = 19]
+      2: vs in {1}    [common rows = 18]
+      [Majority branch = 7 ]
+ (6) qsec &lt;= 17.42
+      1: disp &gt; 275.8    [common rows = 11]
+      2: vs in {0}    [common rows = 10]
+      [Majority branch = 10 ]
+ (13) qsec &lt;= 16.9
+      1: wt &lt;= 3.84    [common rows = 8]
+      2: disp &lt;= 360    [common rows = 7]
+      [Majority branch = 5 ]
+&#160;-------------------------------------
+(1 row)
+</pre> <dl class="section note"><dt>Note</dt><dd>The 'cyl' parameter in the data set has two tuples with NULL values (<em>id = 9</em> and <em>id = 18</em>). In the prediction based on this tree, the surrogate splits for the <em>cyl in {4}</em> split in node 0 are used to predict those two tuples. The splits are used in descending order until a surrogate variable is found that is not NULL. In this case, the two tuples have non-NULL values for <em>disp</em>, hence the <em>disp &lt;= 146.7</em> split is used to make the prediction. If all the surrogate variables are NULL then the majority branch would be followed.</dd></dl>
+</li>
+<li>Now let's use cross validation to select the best value of the complexity parameter cp: <pre class="example">
+DROP TABLE IF EXISTS train_output, train_output_summary, train_output_cv;
+SELECT madlib.tree_train('mt_cars',         -- source table
+                         'train_output',    -- output model table
+                         'id',              -- id column
+                         'mpg',             -- dependent variable
+                         '*',               -- features
+                         'id, hp, drat, am, gear, carb',  -- exclude columns
+                         'mse',             -- split criterion
+                         NULL::text,        -- no grouping
+                         NULL::text,        -- no weights, all observations treated equally
+                         10,                -- max depth
+                         8,                 -- min split
+                         3,                 -- number of bins per continuous variable
+                         10,                -- number of splits
+                         'n_folds=3'       -- pruning parameters for cross validation
+                         );
+</pre> View the output table (excluding the tree which is in binary format). The input cp value was 0 (default) and the best 'pruning_cp' value turns out to be 0 as well in this small example: <pre class="example">
+SELECT pruning_cp, cat_levels_in_text, cat_n_levels, impurity_var_importance, tree_depth FROM train_output;
+</pre> <pre class="result">
+-[ RECORD 1 ]-----------+-----------------------------------------------------------------------
+pruning_cp              | 0
+cat_levels_in_text      | {0,1,4,6,8}
+cat_n_levels            | {2,3}
+impurity_var_importance | {0,22.6309172500677,4.79024943310653,2.32115,13.8967382920109}
+tree_depth              | 4
+</pre> The cp values tested and average error and standard deviation are: <pre class="example">
+SELECT * FROM train_output_cv ORDER BY cv_error_avg ASC;
+</pre> <pre class="result">
+         cp          |   cv_error_avg   | cv_error_stddev
+---------------------+------------------+------------------
+                   0 | 4.60222321567406 | 1.14990035501294
+ 0.00942145242026098 | 4.71906243157825 | 1.21587651168567
+  0.0156685263245236 | 4.86688342751006 | 1.30225133441406
+  0.0893348335770666 |  5.0608834230282 | 1.42488238861617
+   0.135752855572154 | 5.33192746100332 | 1.62718329150341
+   0.643125226048458 | 5.76814538295394 | 2.10750950120742
+(6 rows)
+</pre> <h4>NULL Handling Example</h4>
+</li>
+</ol>
+<ol type="1">
+<li>Create toy example to illustrate 'null-as-category' handling for categorical features: <pre class="example">
+DROP TABLE IF EXISTS null_handling_example;
+CREATE TABLE null_handling_example (
+    id integer,
+    country text,
+    city text,
+    weather text,
+    response text
+);
+INSERT INTO null_handling_example VALUES
+(1,null,null,null,'a'),
+(2,'US',null,null,'b'),
+(3,'US','NY',null,'c'),
+(4,'US','NY','rainy','d');
+</pre></li>
+<li>Train decision tree. Note that 'NULL' is set as a valid level for the categorical features country, weather and city: <pre class="example">
+DROP TABLE IF EXISTS train_output, train_output_summary;
+SELECT madlib.tree_train('null_handling_example',         -- source table
+                         'train_output',                  -- output model table
+                         'id',                            -- id column
+                         'response',                      -- dependent variable
+                         'country, weather, city',        -- features
+                         NULL,                            -- features to exclude
+                         'gini',                          -- split criterion
+                         NULL::text,                      -- no grouping
+                         NULL::text,                      -- no weights, all observations treated equally
+                         4,                               -- max depth
+                         1,                               -- min split
+                         1,                               -- number of bins per continuous variable
+                         10,                              -- number of splits
+                         NULL,                            -- pruning parameters
+                         'null_as_category=true'          -- null handling
+                         );
+SELECT cat_levels_in_text, cat_n_levels FROM train_output;
+</pre> <pre class="result">
+            cat_levels_in_text            | cat_n_levels
+------------------------------------------+--------------
+ {US,__NULL__,rainy,__NULL__,NY,__NULL__} | {2,2,2}
+</pre> View the summary table: <pre class="example">
+\x on
+SELECT * FROM train_output_summary;
+</pre> <pre class="result">
+-[ RECORD 1 ]---------------+-----------------------
+method                      | tree_train
+is_classification           | t
+source_table                | null_handling_example
+model_table                 | train_output
+id_col_name                 | id
+list_of_features            | country, weather, city
+list_of_features_to_exclude | None
+dependent_varname           | response
+independent_varnames        | country,weather,city
+cat_features                | country,weather,city
+con_features                |
+grouping_cols               | [NULL]
+num_all_groups              | 1
+num_failed_groups           | 0
+total_rows_processed        | 4
+total_rows_skipped          | 0
+dependent_var_levels        | "a","b","c","d"
+dependent_var_type          | text
+input_cp                    | 0
+independent_var_types       | text, text, text
+n_folds                     | 0
+null_proxy                  | __NULL__
+</pre></li>
+<li>Predict for data not previously seen by assuming NULL value as the default: <pre class="example">
+\x off
+DROP TABLE IF EXISTS table_test;
+CREATE TABLE table_test (
+    id integer,
+    country text,
+    city text,
+    weather text,
+    expected_response text
+);
+INSERT INTO table_test VALUES
+(1,'IN','MUM','cloudy','a'),
+(2,'US','HOU','humid','b'),
+(3,'US','NY','sunny','c'),
+(4,'US','NY','rainy','d');
+&#160;
+DROP TABLE IF EXISTS prediction_results;
+SELECT madlib.tree_predict('train_output',
+                           'table_test',
+                           'prediction_results',
+                           'response');
+SELECT s.id, expected_response, estimated_response
+FROM prediction_results p, table_test s
+WHERE s.id = p.id ORDER BY id;
+</pre> <pre class="result">
+ id | expected_response | estimated_response
+----+-------------------+--------------------
+  1 | a                 | a
+  2 | b                 | b
+  3 | c                 | c
+  4 | d                 | d
+(4 rows)
+</pre> There is only training data for country 'US' so the response for country 'IN' is 'a', corresponding to a NULL (not 'US') country level. Likewise, any city in the 'US' that is not 'NY' will predict response 'b', corresponding to a NULL (not 'NY') city level.</li>
+<li>Display the decision tree in basic text format: <pre class="example">
+SELECT madlib.tree_display('train_output', FALSE);
+</pre> <pre class="result">
+&#160; -------------------------------------
+&#160;- Each node represented by 'id' inside ().
+&#160;- Each internal nodes has the split condition at the end, while each
+&#160;    leaf node has a * at the end.
+&#160;- For each internal node (i), its child nodes are indented by 1 level
+&#160;    with ids (2i+1) for True node and (2i+2) for False node.
+&#160;- Number of rows and average response value inside []. For a leaf node, this is the prediction.
+&#160;-------------------------------------
+  (0)[1 1 1 1]  city in {NY}
+    (1)[0 0 1 1]  weather in {rainy}
+       (3)[0 0 0 1]  * --&gt; "d"
+       (4)[0 0 1 0]  * --&gt; "c"
+    (2)[1 1 0 0]  country in {US}
+       (5)[0 1 0 0]  * --&gt; "b"
+       (6)[1 0 0 0]  * --&gt; "a"
+&#160;-------------------------------------
+(1 row)
+</pre></li>
+</ol>
+<p><a class="anchor" id="literature"></a></p><dl class="section user"><dt>Literature</dt><dd>[1] Breiman, Leo; Friedman, J. H.; Olshen, R. A.; Stone, C. J. (1984). Classification and Regression Trees. Monterey, CA: Wadsworth &amp; Brooks/Cole Advanced Books &amp; Software.</dd></dl>
+<p><a class="anchor" id="related"></a></p><dl class="section user"><dt>Related Topics</dt><dd></dd></dl>
+<p>File <a class="el" href="decision__tree_8sql__in.html">decision_tree.sql_in</a> documenting the training function</p>
+<p><a class="el" href="group__grp__random__forest.html">Random Forest</a></p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:59 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__dense__linear__solver.html b/docs/rc/group__grp__dense__linear__solver.html
new file mode 100644
index 0000000..318efdd
--- /dev/null
+++ b/docs/rc/group__grp__dense__linear__solver.html
@@ -0,0 +1,262 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Dense Linear Systems</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__dense__linear__solver.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Dense Linear Systems<div class="ingroups"><a class="el" href="group__grp__other__functions.html">Utilities</a> &raquo; <a class="el" href="group__grp__linear__solver.html">Linear Solvers</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li class="level1">
+<a href="#dls_usage">Solution Function</a> </li>
+<li class="level1">
+<a href="#dls_opt_params">Optimizer Parameters</a> </li>
+<li class="level1">
+<a href="#dls_examples">Examples</a> </li>
+<li class="level1">
+<a href="#related">Related Topics</a> </li>
+</ul>
+</div><p>The linear systems module implements solution methods for systems of consistent linear equations. Systems of linear equations take the form: </p><p class="formulaDsp">
+\[ Ax = b \]
+</p>
+<p>where \(x \in \mathbb{R}^{n}\), \(A \in \mathbb{R}^{m \times n} \) and \(b \in \mathbb{R}^{m}\). We assume that there are no rows of \(A\) where all elements are zero. The algorithms implemented in this module can handle large dense linear systems. Currently, the algorithms implemented in this module solve the linear system by a direct decomposition. Hence, these methods are known as <em>direct method</em>.</p>
+<p><a class="anchor" id="dls_usage"></a></p><dl class="section user"><dt>Solution Function</dt><dd><pre class="syntax">
+linear_solver_dense( tbl_source,
+                     tbl_result,
+                     row_id,
+                     LHS,
+                     RHS,
+                     grouping_col,
+                     optimizer,
+                     optimizer_params
+                   )
+</pre> <b>Arguments</b> <dl class="arglist">
+<dt>tbl_source </dt>
+<dd><p class="startdd">TEXT. The name of the table containing the training data. The input data is expected to be of the following form: </p><pre>{TABLE|VIEW} <em>sourceName</em> (
+    ...
+    <em>row_id</em>          FLOAT8,
+    <em>left_hand_side</em>  FLOAT8[],
+    <em>right_hand_side</em> FLOAT8,
+    ...
+)</pre><p>Each row represents a single equation. The <em>right_hand_side</em> column refers to the right hand side of the equations while the <em>left_hand_side</em> column refers to the multipliers on the variables on the left hand side of the same equations.</p>
+<p class="enddd"></p>
+</dd>
+<dt>tbl_result </dt>
+<dd><p class="startdd">TEXT. The name of the table where the output is saved. The output is stored in the table named by the <em>tbl_result</em> argument. It contains the following columns: </p><table class="output">
+<tr>
+<th>solution </th><td>FLOAT8[]. The solution variables in the same order as that provided as input in the 'left_hand_side' column name of the <em>source_table</em>  </td></tr>
+<tr>
+<th>residual_norm </th><td>FLOAT8. The scaled residual norm, defined as \( \frac{|Ax - b|}{|b|} \). This value is an indication of the accuracy of the solution.  </td></tr>
+<tr>
+<th>iters </th><td>INTEGER. Number of iterations required by the algorithm (only applicable for iterative algorithms). The output is NULL for 'direct' methods.   </td></tr>
+</table>
+<p class="enddd"></p>
+</dd>
+<dt>row_id </dt>
+<dd><p class="startdd">TEXT. The name of the column storing the 'row id' of the equations.</p>
+<p>For a system with N equations, the row_id's must be a continuous range of integers from \( 0 \ldots n-1 \). </p>
+<p class="enddd"></p>
+</dd>
+<dt>LHS </dt>
+<dd><p class="startdd">TEXT. The name of the column storing the 'left hand side' of the equations, stored as an array.</p>
+<p class="enddd"></p>
+</dd>
+<dt>RHS </dt>
+<dd><p class="startdd">TEXT. The name of the column storing the 'right hand side' of the equations.</p>
+<p class="enddd"></p>
+</dd>
+<dt>grouping_cols (optional)  </dt>
+<dd>TEXT, default: NULL. Group by column names. <em>Not currently implemented. Any non-NULL value is ignored.</em> </dd>
+<dt>optimizer (optional)  </dt>
+<dd><p class="startdd">TEXT, default: 'direct'. The type of optimizer.</p>
+<p class="enddd"></p>
+</dd>
+<dt>optimizer_params (optional)  </dt>
+<dd>TEXT, default: NULL. Optimizer specific parameters. </dd>
+</dl>
+</dd></dl>
+<p><a class="anchor" id="dls_opt_params"></a></p><dl class="section user"><dt>Optimizer Parameters</dt><dd></dd></dl>
+<p>For each optimizer, there are specific parameters that can be tuned for better performance.</p>
+<dl class="arglist">
+<dt>algorithm (default: householderqr) </dt>
+<dd><p class="startdd">There are several algorithms that can be classified as 'direct' methods of solving linear systems. MADlib dense linear system solvers provide various algorithmic options for users.</p>
+<p>The following table provides a guideline on the choice of algorithm based on conditions on the A matrix, speed of the algorithms and numerical stability. </p><pre class="fragment"> Algorithm            | Conditions on A  | Speed | Accuracy
+ ----------------------------------------------------------
+ householderqr        | None             |  ++   |  +
+ partialpivlu         | Invertable       |  ++   |  +
+ fullpivlu            | None             |  -    |  +++
+ colpivhouseholderqr  | None             |  +    |  ++
+ fullpivhouseholderqr | None             |  -    |  +++
+ llt                  | Pos. Definite    |  +++  |  +
+ ldlt                 | Pos. or Neg Def  |  +++  |  ++
+</pre><p>For speed '++' is faster than '+', which is faster than '-'. For accuracy '+++' is better than '++'.</p>
+<p class="enddd">More details about the individual algorithms can be found in the <a href="http://eigen.tuxfamily.org/dox-devel/group__TutorialLinearAlgebra.html">Eigen documentation</a>. Eigen is an open source library for linear algebra.  </p>
+</dd>
+</dl>
+<p><a class="anchor" id="dls_examples"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<ol type="1">
+<li>View online help for the linear systems solver function. <pre class="example">
+SELECT madlib.linear_solver_dense();
+</pre></li>
+<li>Create the sample data set. <pre class="example">
+CREATE TABLE linear_systems_test_data( id INTEGER NOT NULL,
+                                       lhs DOUBLE PRECISION[],
+                                       rhs DOUBLE PRECISION
+                                     );
+INSERT INTO linear_systems_test_data(id, lhs, rhs)
+       VALUES
+        (0, ARRAY[1,0,0], 20),
+        (1, ARRAY[0,1,0], 15),
+        (2, ARRAY[0,0,1], 20);
+</pre></li>
+<li>Solve the linear systems with default parameters. <pre class="example">
+SELECT madlib.linear_solver_dense( 'linear_systems_test_data',
+                                   'output_table',
+                                   'id',
+                                   'lhs',
+                                   'rhs'
+                                 );
+</pre></li>
+<li>Obtain the output from the output table. <pre class="example">
+\x on
+SELECT * FROM output_table;
+</pre> Result: <pre class="result">
+--------------------+-------------------------------------
+solution            | {20,15,20}
+residual_norm       | 0
+iters               | NULL
+</pre></li>
+<li>Choose an algorithm different than the default. <pre class="example">
+DROP TABLE IF EXISTS result_table;
+SELECT madlib.linear_solver_dense( 'linear_systems_test_data',
+                                   'result_table',
+                                   'id',
+                                   'lhs',
+                                   'rhs',
+                                   NULL,
+                                   'direct',
+                                   'algorithm=llt'
+                                 );
+</pre></li>
+</ol>
+<p><a class="anchor" id="related"></a></p><dl class="section user"><dt>Related Topics</dt><dd>File <a class="el" href="dense__linear__systems_8sql__in.html" title="SQL functions for linear systems. ">dense_linear_systems.sql_in</a> documenting the SQL functions</dd></dl>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:59 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__deprecated.html b/docs/rc/group__grp__deprecated.html
new file mode 100644
index 0000000..a30da1e
--- /dev/null
+++ b/docs/rc/group__grp__deprecated.html
@@ -0,0 +1,142 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Deprecated Modules</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__deprecated.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#groups">Modules</a>  </div>
+  <div class="headertitle">
+<div class="title">Deprecated Modules</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Deprecated modules that will be removed in the next major version (2.0). There are newer MADlib modules that have replaced these functions. </p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group__grp__indicator"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__indicator.html">Create Indicator Variables</a></td></tr>
+<tr class="memdesc:group__grp__indicator"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provides utility functions helpful for data preparation before modeling. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__mlogreg"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__mlogreg.html">Multinomial Logistic Regression</a></td></tr>
+<tr class="memdesc:group__grp__mlogreg"><td class="mdescLeft">&#160;</td><td class="mdescRight">Also called as softmax regression, models the relationship between one or more independent variables and a categorical dependent variable. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__deprecated.js b/docs/rc/group__grp__deprecated.js
new file mode 100644
index 0000000..05ef03b
--- /dev/null
+++ b/docs/rc/group__grp__deprecated.js
@@ -0,0 +1,5 @@
+var group__grp__deprecated =
+[
+    [ "Create Indicator Variables", "group__grp__indicator.html", null ],
+    [ "Multinomial Logistic Regression", "group__grp__mlogreg.html", null ]
+];
\ No newline at end of file
diff --git a/docs/rc/group__grp__desc__stats.html b/docs/rc/group__grp__desc__stats.html
new file mode 100644
index 0000000..dd9491b
--- /dev/null
+++ b/docs/rc/group__grp__desc__stats.html
@@ -0,0 +1,145 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Descriptive Statistics</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__desc__stats.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#groups">Modules</a>  </div>
+  <div class="headertitle">
+<div class="title">Descriptive Statistics<div class="ingroups"><a class="el" href="group__grp__stats.html">Statistics</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Methods to compute descriptive statistics of a dataset. </p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group__grp__sketches"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__sketches.html">Cardinality Estimators</a></td></tr>
+<tr class="memdesc:group__grp__sketches"><td class="mdescLeft">&#160;</td><td class="mdescRight">Methods to estimate the number of unique values contained in data. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__correlation"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__correlation.html">Covariance and Correlation</a></td></tr>
+<tr class="memdesc:group__grp__correlation"><td class="mdescLeft">&#160;</td><td class="mdescRight">Generates a covariance or Pearson correlation matrix for pairs of numeric columns in a table. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__summary"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__summary.html">Summary</a></td></tr>
+<tr class="memdesc:group__grp__summary"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculates general descriptive statistics for any data table. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__desc__stats.js b/docs/rc/group__grp__desc__stats.js
new file mode 100644
index 0000000..d49a7aa
--- /dev/null
+++ b/docs/rc/group__grp__desc__stats.js
@@ -0,0 +1,6 @@
+var group__grp__desc__stats =
+[
+    [ "Cardinality Estimators", "group__grp__sketches.html", "group__grp__sketches" ],
+    [ "Covariance and Correlation", "group__grp__correlation.html", null ],
+    [ "Summary", "group__grp__summary.html", null ]
+];
\ No newline at end of file
diff --git a/docs/rc/group__grp__dl.html b/docs/rc/group__grp__dl.html
new file mode 100644
index 0000000..553f124
--- /dev/null
+++ b/docs/rc/group__grp__dl.html
@@ -0,0 +1,151 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Deep Learning</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__dl.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#groups">Modules</a>  </div>
+  <div class="headertitle">
+<div class="title">Deep Learning<div class="ingroups"><a class="el" href="group__grp__early__stage.html">Early Stage Development</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>A collection of modules for deep learning. </p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group__grp__gpu__configuration"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__gpu__configuration.html">GPU Configuration</a></td></tr>
+<tr class="memdesc:group__grp__gpu__configuration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Utility function to report number and type of GPUs in the database cluster. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__keras"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__keras.html">Keras</a></td></tr>
+<tr class="memdesc:group__grp__keras"><td class="mdescLeft">&#160;</td><td class="mdescRight">Fit, evaluate and predict using the Keras API. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__keras__model__arch"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__keras__model__arch.html">Load Models</a></td></tr>
+<tr class="memdesc:group__grp__keras__model__arch"><td class="mdescLeft">&#160;</td><td class="mdescRight">Utility function to load model architectures and weights into a table. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__model__selection"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__model__selection.html">Model Selection for DL</a></td></tr>
+<tr class="memdesc:group__grp__model__selection"><td class="mdescLeft">&#160;</td><td class="mdescRight">Train multiple deep learning models at the same time for model architecture search and hyperparameter selection. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__input__preprocessor__dl"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__input__preprocessor__dl.html">Preprocessor for Images</a></td></tr>
+<tr class="memdesc:group__grp__input__preprocessor__dl"><td class="mdescLeft">&#160;</td><td class="mdescRight">Utilities that prepare input image data for use by deep learning modules. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:59 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__dl.js b/docs/rc/group__grp__dl.js
new file mode 100644
index 0000000..e010900
--- /dev/null
+++ b/docs/rc/group__grp__dl.js
@@ -0,0 +1,8 @@
+var group__grp__dl =
+[
+    [ "GPU Configuration", "group__grp__gpu__configuration.html", null ],
+    [ "Keras", "group__grp__keras.html", null ],
+    [ "Load Models", "group__grp__keras__model__arch.html", null ],
+    [ "Model Selection for DL", "group__grp__model__selection.html", "group__grp__model__selection" ],
+    [ "Preprocessor for Images", "group__grp__input__preprocessor__dl.html", null ]
+];
\ No newline at end of file
diff --git a/docs/rc/group__grp__early__stage.html b/docs/rc/group__grp__early__stage.html
new file mode 100644
index 0000000..634bbe3
--- /dev/null
+++ b/docs/rc/group__grp__early__stage.html
@@ -0,0 +1,148 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Early Stage Development</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__early__stage.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#groups">Modules</a>  </div>
+  <div class="headertitle">
+<div class="title">Early Stage Development</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Implementations which are in an early stage of development. Interface and implementation are subject to change. </p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group__grp__cg"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__cg.html">Conjugate Gradient</a></td></tr>
+<tr class="memdesc:group__grp__cg"><td class="mdescLeft">&#160;</td><td class="mdescRight">Finds the solution to the function \( \boldsymbol Ax = \boldsymbol b \), where \(A\) is a symmetric, positive-definite matrix and \(x\) and \( \boldsymbol b \) are vectors. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__dl"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__dl.html">Deep Learning</a></td></tr>
+<tr class="memdesc:group__grp__dl"><td class="mdescLeft">&#160;</td><td class="mdescRight">A collection of modules for deep learning. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__bayes"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__bayes.html">Naive Bayes Classification</a></td></tr>
+<tr class="memdesc:group__grp__bayes"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs a classification model from a dataset where each attribute independently contributes to the probability that a data point belongs to a category. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__sample"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__sample.html">Random Sampling</a></td></tr>
+<tr class="memdesc:group__grp__sample"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provides utility functions for sampling operations. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:59 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__early__stage.js b/docs/rc/group__grp__early__stage.js
new file mode 100644
index 0000000..4e29825
--- /dev/null
+++ b/docs/rc/group__grp__early__stage.js
@@ -0,0 +1,7 @@
+var group__grp__early__stage =
+[
+    [ "Conjugate Gradient", "group__grp__cg.html", null ],
+    [ "Deep Learning", "group__grp__dl.html", "group__grp__dl" ],
+    [ "Naive Bayes Classification", "group__grp__bayes.html", null ],
+    [ "Random Sampling", "group__grp__sample.html", null ]
+];
\ No newline at end of file
diff --git a/docs/rc/group__grp__elasticnet.html b/docs/rc/group__grp__elasticnet.html
new file mode 100644
index 0000000..6a8df66
--- /dev/null
+++ b/docs/rc/group__grp__elasticnet.html
@@ -0,0 +1,756 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Elastic Net Regularization</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__elasticnet.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Elastic Net Regularization<div class="ingroups"><a class="el" href="group__grp__super.html">Supervised Learning</a> &raquo; <a class="el" href="group__grp__regml.html">Regression Models</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b><ul>
+<li class="level1">
+<a href="#train">Training Function</a> </li>
+<li class="level1">
+<a href="#optimizer">Optimizer Parameters</a> </li>
+<li class="level1">
+<a href="#predict">Prediction Functions</a> </li>
+<li class="level1">
+<a href="#examples">Examples</a> </li>
+<li class="level1">
+<a href="#background">Technical Background</a> </li>
+<li class="level1">
+<a href="#literature">Literature</a> </li>
+<li class="level1">
+<a href="#related">Related Topics</a> </li>
+</ul>
+</div><p>This module implements elastic net regularization [1] for linear and logistic regression. Regularization is a technique often used to prevent overfitting.</p>
+<p><a class="anchor" id="train"></a></p><dl class="section user"><dt>Training Function</dt><dd>The training function has the following syntax: <pre class="syntax">
+elastic_net_train( tbl_source,
+                   tbl_result,
+                   col_dep_var,
+                   col_ind_var,
+                   regress_family,
+                   alpha,
+                   lambda_value,
+                   standardize,
+                   grouping_col,
+                   optimizer,
+                   optimizer_params,
+                   excluded,
+                   max_iter,
+                   tolerance
+                 )
+</pre></dd></dl>
+<p><b>Arguments</b> </p><dl class="arglist">
+<dt>tbl_source </dt>
+<dd><p class="startdd">TEXT. The name of the table containing the training data.</p>
+<p class="enddd"></p>
+</dd>
+<dt>tbl_result </dt>
+<dd><p class="startdd">TEXT. Name of the output table containing output model. The output table produced by the <a class="el" href="elastic__net_8sql__in.html#a735038a5090c112505c740a90a203e83" title="Interface for elastic net. ">elastic_net_train()</a> function has the following columns: </p><table class="output">
+<tr>
+<th>regress_family </th><td>The regression type: 'gaussian' or 'binomial'.  </td></tr>
+<tr>
+<th>features </th><td>Array of features (independent variables) passed to the algorithm.  </td></tr>
+<tr>
+<th>features_selected </th><td>Array of features selected by the algorithm.  </td></tr>
+<tr>
+<th>coef_nonzero </th><td>Coefficients of the selected features.  </td></tr>
+<tr>
+<th>coef_all </th><td>Coefficients of all features, both selected and unselected.  </td></tr>
+<tr>
+<th>intercept </th><td>Intercept for the model.  </td></tr>
+<tr>
+<th>log_likelihood </th><td>Log of the likelihood value produced by the algorithm.  </td></tr>
+<tr>
+<th>standardize </th><td>BOOLEAN. If data has been normalized, will be set to TRUE.  </td></tr>
+<tr>
+<th>iteration_run </th><td>The number of iterations executed.  </td></tr>
+</table>
+<p class="enddd"></p>
+</dd>
+<dt>col_dep_var </dt>
+<dd><p class="startdd">TEXT. An expression for the dependent variable.</p>
+<dl class="section note"><dt>Note</dt><dd>Both <em>col_dep_var</em> and <em>col_ind_var</em> can be valid PostgreSQL expressions. For example, <code>col_dep_var = 'log(y+1)'</code>, and <code>col_ind_var = 'array[exp(x[1]), x[2], 1/(1+x[3])]'</code>. In the binomial case, you can use a Boolean expression, for example, <code>col_dep_var = 'y &lt; 0'</code>.</dd></dl>
+</dd>
+<dt>col_ind_var </dt>
+<dd><p class="startdd">TEXT. An expression for the independent variables. Use <code>'*'</code> to specify all columns of <em>tbl_source</em> except those listed in the <em>excluded</em> string described below. If <em>col_dep_var</em> is a column name, it is automatically excluded from the independent variables. However, if <em>col_dep_var</em> is a valid PostgreSQL expression, any column names used within the expression are only excluded if they are explicitly listed in the <em>excluded</em> argument. Therefore, it is a good idea to add all column names involved in the dependent variable expression to the <em>excluded</em> string.</p>
+<p class="enddd"></p>
+</dd>
+<dt>regress_family </dt>
+<dd><p class="startdd">TEXT. For regression type, specify either 'gaussian' ('linear') or 'binomial' ('logistic').</p>
+<p class="enddd"></p>
+</dd>
+<dt>alpha </dt>
+<dd><p class="startdd">FLOAT8. Elastic net control parameter with a value in the range [0, 1]. A value of 1 means L1 regularization, and a value of 0 means L2 regularization.</p>
+<p class="enddd"></p>
+</dd>
+<dt>lambda_value </dt>
+<dd><p class="startdd">FLOAT8. Regularization parameter (must be positive).</p>
+<p class="enddd"></p>
+</dd>
+<dt>standardize (optional) </dt>
+<dd><p class="startdd">BOOLEAN, default: TRUE. Whether to normalize the data or not. Setting to TRUE usually yields better results and faster convergence.</p>
+<p class="enddd"></p>
+</dd>
+<dt>grouping_col (optional) </dt>
+<dd><p class="startdd">TEXT, default: NULL. A single column or a list of comma-separated columns that divides the input data into discrete groups, resulting in one regression per group. When this value is NULL, no grouping is used and a single model is generated for all data.</p>
+<dl class="section note"><dt>Note</dt><dd>Expressions are not currently supported for 'grouping_col'.</dd></dl>
+</dd>
+<dt>optimizer (optional) </dt>
+<dd><p class="startdd">TEXT, default: 'fista'. Name of optimizer, either 'fista' or 'igd'. FISTA [2] is an algorithm with a fast global rate of convergence for solving linear inverse problems. Incremental gradient descent (IGD) is a stochastic approach to minimizing an objective function [4].</p>
+<p class="enddd"></p>
+</dd>
+<dt>optimizer_params (optional) </dt>
+<dd><p class="startdd">TEXT, default: NULL. Optimizer parameters, delimited with commas. These parameters differ depending on the value of <em>optimizer</em> parameter. See the descriptions below for details.</p>
+<p class="enddd"></p>
+</dd>
+<dt>excluded (optional) </dt>
+<dd><p class="startdd">TEXT, default: NULL. If the <em>col_ind_var</em> input is '*' then <em>excluded</em> can be provided as a comma-delimited list of column names that are to be excluded from the features. For example, <code>'col1, col2'</code>. If the <em>col_ind_var</em> is an array, <em>excluded</em> must be a list of the integer array positions to exclude, for example <code>'1,2'</code>. If this argument is NULL or an empty string, no columns are excluded.</p>
+<p class="enddd"></p>
+</dd>
+<dt>max_iter (optional) </dt>
+<dd><p class="startdd">INTEGER, default: 1000. The maximum number of iterations allowed.</p>
+<p class="enddd"></p>
+</dd>
+<dt>tolerance (optional) </dt>
+<dd>FLOAT8, default: 1e-6. This is the criterion to stop iterating. Both the 'fista' and 'igd' optimizers compute the difference between the log likelihood of two consecutive iterations, and when the difference is smaller than <em>tolerance</em> or the iteration number is larger than <em>max_iter</em>, the computation stops. </dd>
+</dl>
+<p><a class="anchor" id="optimizer"></a></p><dl class="section user"><dt>Other Parameters</dt><dd></dd></dl>
+<p>For <em>optimizer_params</em>, there are several parameters that can be supplied in a string containing a comma-delimited list of name-value pairs . All of these named parameters are optional and use the format "&lt;param_name&gt; = &lt;value&gt;".</p>
+<p>The parameters described below are organized by category: warmup, cross validation and optimization.</p>
+<p><em><b>Warmup parameters</b></em> </p><pre class="syntax">
+  $$
+    warmup = &lt;value&gt;,
+    warmup_lambdas = &lt;value&gt;,
+    warmup_lambda_no = &lt;value&gt;,
+    warmup_tolerance = &lt;value&gt;
+  $$
+</pre><dl class="arglist">
+<dt>warmup </dt>
+<dd><p class="startdd">Default: FALSE. If <em>warmup</em> is TRUE, a series of strictly descending lambda values are used, which end with the lambda value that the user wants to calculate. A larger lambda gives a sparser solution, and the sparse solution is then used as the initial guess for the next lambda's solution, which can speed up the computation for the next lambda. For larger data sets, this can sometimes accelerate the whole computation and may in fact be faster than computation with only a single lambda value.</p>
+<p class="enddd"></p>
+</dd>
+<dt>warmup_lambdas </dt>
+<dd><p class="startdd">Default: NULL. Set of lambda values to use when <em>warmup</em> is TRUE. The default is NULL, which means that lambda values will be automatically generated.</p>
+<p class="enddd"></p>
+</dd>
+<dt>warmup_lambda_no </dt>
+<dd><p class="startdd">Default: 15. Number of lambda values used in <em>warm-up</em>. If <em>warmup_lambdas</em> is not NULL, this value is overridden by the number of provided lambda values.</p>
+<p class="enddd"></p>
+</dd>
+<dt>warmup_tolerance </dt>
+<dd>The value of tolerance used during warmup. The default value is the same as the <em>tolerance</em> argument described above. </dd>
+</dl>
+<p><em><b>Cross validation parameters</b></em> </p><dl class="section note"><dt>Note</dt><dd>Please note that for performance reasons, warmup is disabled whenever cross validation is used. Also, cross validation is not supported if grouping is used.</dd></dl>
+<pre class="syntax">
+  $$
+    n_folds = &lt;value&gt;,
+    validation_result = &lt;value&gt;,
+    lambda_value = &lt;value&gt;,
+    n_lambdas = &lt;value&gt;,
+    alpha = &lt;value&gt;
+  $$
+</pre><p>Hyperparameter optimization can be carried out using the built-in cross validation mechanism, which is activated by assigning a value greater than 1 to the parameter <em>n_folds</em>.</p>
+<p>The cross validation scores are the mean and standard deviation of the accuracy when predicted on the validation fold, averaged over all folds and all rows. For classification, the accuracy metric used is the ratio of correct classifications. For regression, the accuracy metric used is the negative of mean squared error (negative to make it a concave problem, thus selecting <em>max</em> means the highest accuracy). Cross validation scores are written out to a separate table with the user specified name given in the 'validation_result' parameter.</p>
+<p>The values of a parameter to cross validate should be provided in a list. For example, to regularize with the L1 norm and use a lambda value from the set {0.3, 0.4, 0.5}, include 'lambda_value={0.3, 0.4, 0.5}'. Note that the use of '{}' and '[]' are both valid here.</p>
+<dl class="arglist">
+<dt>n_folds </dt>
+<dd><p class="startdd">Default: 0. Number of folds (k). Must be at least 2 to activate cross validation. If a value of k &gt; 2 is specified, each fold is then used as a validation set once, while the other k - 1 folds form the training set. </p>
+<p class="enddd"></p>
+</dd>
+<dt>validation_result </dt>
+<dd><p class="startdd">Default: NULL. Name of the table to store the cross validation results, including the values of parameters and their averaged error values. The table is only created if the name is not NULL. </p>
+<p class="enddd"></p>
+</dd>
+<dt>lambda_value </dt>
+<dd><p class="startdd">Default: NULL. Set of regularization values to be used for cross validation. The default is NULL, which means that lambda values will be automatically generated.</p>
+<p class="enddd"></p>
+</dd>
+<dt>n_lambdas </dt>
+<dd><p class="startdd">Default: 15. Number of lambdas to cross validate over. If a list of lambda values is not provided in the <em>lambda_value</em> set above, this parameter can be used to autogenerate the set of lambdas. If the <em>lambda_value</em> set is not NULL, this value is overridden by the number of provided lambda values. </p>
+<dl class="section note"><dt>Note</dt><dd>If you want to cross validate over alpha only and not lambda, then set <em>lambda_value</em> to NULL and <em>n_lambdas</em> to 0. In this case, cross validation will be done on the set of <em>alpha</em> values specified in the next parameter. The lambda value used will be the one specified in the main function call at the top of this page.</dd></dl>
+</dd>
+<dt>alpha </dt>
+<dd>Elastic net control parameter. This is a list of values to apply cross validation on. (Note that alpha values are not autogenerated.) If not specified, the alpha value used will be the one specified in the main function call at the top of this page.  </dd>
+</dl>
+<p><em><b>Optimizer parameters</b></em></p>
+<p><b>FISTA</b> Parameters </p><pre class="syntax">
+  $$
+    max_stepsize = &lt;value&gt;,
+    eta = &lt;value&gt;,
+    use_active_set = &lt;value&gt;,
+    activeset_tolerance = &lt;value&gt;,
+    random_stepsize = &lt;value&gt;
+  $$
+</pre><dl class="arglist">
+<dt>max_stepsize </dt>
+<dd><p class="startdd">Default: 4.0. Initial backtracking step size. At each iteration, the algorithm first tries <em>stepsize = max_stepsize</em>, and if it does not work out, it then tries a smaller step size, <em>stepsize = stepsize/eta</em>, where <em>eta</em> must be larger than 1. At first glance, this seems to perform repeated iterations for even one step, but using a larger step size actually greatly increases the computation speed and minimizes the total number of iterations. A careful choice of <em>max_stepsize</em> can decrease the computation time by more than 10 times.</p>
+<p class="enddd"></p>
+</dd>
+<dt>eta </dt>
+<dd><p class="startdd">Default: 2.0 If stepsize does not work, <em>stepsize/<em>eta</em> is</em> tried. Must be greater than 1. </p>
+<p class="enddd"></p>
+</dd>
+<dt>use_active_set </dt>
+<dd><p class="startdd">Default: FALSE. If <em>use_active_set</em> is TRUE, an active-set method is used to speed up the computation. Considerable speedup is obtained by organizing the iterations around the active set of features&mdash;those with nonzero coefficients. After a complete cycle through all the variables, we iterate only on the active set until convergence. If another complete cycle does not change the active set, we are done. Otherwise, the process is repeated.</p>
+<p class="enddd"></p>
+</dd>
+<dt>activeset_tolerance </dt>
+<dd><p class="startdd">The value of tolerance used during active set calculation. The default value is the same as the <em>tolerance</em> argument described above. </p>
+<p class="enddd"></p>
+</dd>
+<dt>random_stepsize </dt>
+<dd>Default: FALSE. Whether to add some randomness to the step size. Sometimes, this can speed up the calculation. </dd>
+</dl>
+<p><b>IGD</b> parameters </p><pre class="syntax">
+  $$
+      stepsize = &lt;value&gt;,
+      step_decay = &lt;value&gt;,
+      threshold = &lt;value&gt;,
+      parallel = &lt;value&gt;
+  $$
+</pre> <dl class="arglist">
+<dt>stepsize </dt>
+<dd><p class="startdd">The default is 0.01.</p>
+<p class="enddd"></p>
+</dd>
+<dt>step_decay </dt>
+<dd><p class="startdd">The actual stepsize used for current step is (previous stepsize) / exp(step_decay). The default value is 0, which means that a constant stepsize is used in IGD.</p>
+<p class="enddd"></p>
+</dd>
+<dt>threshold </dt>
+<dd><p class="startdd">Default: 1e-10. When a coefficient is really small, set this coefficient to be 0.</p>
+<p>Due to the stochastic nature of SGD, we can only obtain very small values for the fitting coefficients. Therefore, <em>threshold</em> is needed at the end of the computation to screen out tiny values and hard-set them to zeros. This is accomplished as follows: (1) multiply each coefficient with the standard deviation of the corresponding feature; (2) compute the average of absolute values of re-scaled coefficients; (3) divide each rescaled coefficient with the average, and if the resulting absolute value is smaller than <em>threshold</em>, set the original coefficient to zero.</p>
+<p class="enddd"></p>
+</dd>
+<dt>parallel </dt>
+<dd><p class="startdd">Whether to run the computation on multiple segments. The default is TRUE.</p>
+<p class="enddd">SGD is a sequential algorithm in nature. When running in a distributed manner, each segment of the data runs its own SGD model and then the models are averaged to get a model for each iteration. This averaging might slow down the convergence speed, but it affords the ability to process large datasets on a cluster of machines. This algorithm, therefore, provides the <em>parallel</em> option to allow you to choose whether to do parallel computation.  </p>
+</dd>
+</dl>
+<p><a class="anchor" id="predict"></a></p><dl class="section user"><dt>Prediction Function</dt><dd></dd></dl>
+<h4>Per-Tuple Prediction</h4>
+<p>The prediction function returns a double value for the Gaussian family and a Boolean value for the Binomial family.</p>
+<p>The predict function has the following syntax (<a class="el" href="elastic__net_8sql__in.html#a96db4ff4ba3ea363fafbf6c036c19fae" title="Prediction for linear models use learned coefficients for a given example. ">elastic_net_gaussian_predict()</a> and <a class="el" href="elastic__net_8sql__in.html#aa78cde79f1f2caa7c5b38f933001d793" title="Prediction for logistic models use learned coefficients for a given example. ">elastic_net_binomial_predict()</a>): </p><pre class="syntax">
+elastic_net_&lt;family&gt;_predict(
+                     coefficients,
+                     intercept,
+                     ind_var
+                   )
+</pre><p><b>Arguments</b> </p><dl class="arglist">
+<dt>coefficients </dt>
+<dd>DOUBLE PRECISION[]. Fitting coefficients, usually <em>coef_all</em> or <em>coef_nonzero</em>. </dd>
+<dt>intercept </dt>
+<dd>DOUBLE PRECISION. Intercept for the model. </dd>
+<dt>ind_var </dt>
+<dd>DOUBLE PRECISION[]. Independent variables that correspond to coefficients. Use <em>features</em> column in <em>tbl_result</em> for <em>coef_all</em>, and <em>features_selected</em> for <em>coef_nonzero</em>. See the <a href="#additional_example">examples for this case below</a>. <dl class="section note"><dt>Note</dt><dd>Unexpected results or errors may be returned in the case that this argument <em>ind_var</em> is not specified properly. </dd></dl>
+</dd>
+</dl>
+<p>For the binomial family, there is a function (<a class="el" href="elastic__net_8sql__in.html#a308718fd5234bc1007b971a639aadf71" title="Compute the probability of belonging to the True class for a given observation. ">elastic_net_binomial_prob()</a>) that outputs the probability of the instance being TRUE: </p><pre class="syntax">
+elastic_net_binomial_prob(
+                     coefficients,
+                     intercept,
+                     ind_var
+                   )
+</pre><h4>Per-Table Prediction</h4>
+<p>Alternatively, you can use another prediction function that stores the prediction result in a table (<a class="el" href="elastic__net_8sql__in.html#a3578608204ac9b2d3442ff42977f632b" title="Prediction and put the result in a table can be used together with General-CV. ">elastic_net_predict()</a>). This is useful if you want to use elastic net together with the general cross validation function. </p><pre class="syntax">
+elastic_net_predict( tbl_model,
+                     tbl_new_sourcedata,
+                     col_id,
+                     tbl_predict
+                   )
+</pre><p> <b>Arguments</b> </p><dl class="arglist">
+<dt>tbl_model </dt>
+<dd>TEXT. Name of the table containing the output from the training function. </dd>
+<dt>tbl_new_sourcedata </dt>
+<dd>TEXT. Name of the table containing the new source data. </dd>
+<dt>col_id </dt>
+<dd>TEXT. Unique ID associated with each row. </dd>
+<dt>tbl_predict </dt>
+<dd>TEXT. Name of table to store the prediction result.  </dd>
+</dl>
+<p>You do not need to specify whether the model is "linear" or "logistic" because this information is already included in the <em>tbl_model</em> table.</p>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<ol type="1">
+<li>Display online help for the <a class="el" href="elastic__net_8sql__in.html#a735038a5090c112505c740a90a203e83" title="Interface for elastic net. ">elastic_net_train()</a> function: <pre class="example">
+SELECT madlib.elastic_net_train();
+</pre></li>
+<li>Create an input data set of house prices and features: <pre class="example">
+DROP TABLE IF EXISTS houses;
+CREATE TABLE houses ( id INT,
+                      tax INT,
+                      bedroom INT,
+                      bath FLOAT,
+                      price INT,
+                      size INT,
+                      lot INT,
+                      zipcode INT);
+INSERT INTO houses (id, tax, bedroom, bath, price, size, lot, zipcode) VALUES
+(1  ,  590 ,       2 ,    1 ,  50000 ,  770 , 22100  , 94301),
+(2  , 1050 ,       3 ,    2 ,  85000 , 1410 , 12000  , 94301),
+(3  ,   20 ,       3 ,    1 ,  22500 , 1060 ,  3500  , 94301),
+(4  ,  870 ,       2 ,    2 ,  90000 , 1300 , 17500  , 94301),
+(5  , 1320 ,       3 ,    2 , 133000 , 1500 , 30000  , 94301),
+(6  , 1350 ,       2 ,    1 ,  90500 ,  820 , 25700  , 94301),
+(7  , 2790 ,       3 ,  2.5 , 260000 , 2130 , 25000  , 94301),
+(8  ,  680 ,       2 ,    1 , 142500 , 1170 , 22000  , 94301),
+(9  , 1840 ,       3 ,    2 , 160000 , 1500 , 19000  , 94301),
+(10 , 3680 ,       4 ,    2 , 240000 , 2790 , 20000  , 94301),
+(11 , 1660 ,       3 ,    1 ,  87000 , 1030 , 17500  , 94301),
+(12 , 1620 ,       3 ,    2 , 118600 , 1250 , 20000  , 94301),
+(13 , 3100 ,       3 ,    2 , 140000 , 1760 , 38000  , 94301),
+(14 , 2070 ,       2 ,    3 , 148000 , 1550 , 14000  , 94301),
+(15 ,  650 ,       3 ,  1.5 ,  65000 , 1450 , 12000  , 94301),
+(16 ,  770 ,       2 ,    2 ,  91000 , 1300 , 17500  , 76010),
+(17 , 1220 ,       3 ,    2 , 132300 , 1500 , 30000  , 76010),
+(18 , 1150 ,       2 ,    1 ,  91100 ,  820 , 25700  , 76010),
+(19 , 2690 ,       3 ,  2.5 , 260011 , 2130 , 25000  , 76010),
+(20 ,  780 ,       2 ,    1 , 141800 , 1170 , 22000  , 76010),
+(21 , 1910 ,       3 ,    2 , 160900 , 1500 , 19000  , 76010),
+(22 , 3600 ,       4 ,    2 , 239000 , 2790 , 20000  , 76010),
+(23 , 1600 ,       3 ,    1 ,  81010 , 1030 , 17500  , 76010),
+(24 , 1590 ,       3 ,    2 , 117910 , 1250 , 20000  , 76010),
+(25 , 3200 ,       3 ,    2 , 141100 , 1760 , 38000  , 76010),
+(26 , 2270 ,       2 ,    3 , 148011 , 1550 , 14000  , 76010),
+(27 ,  750 ,       3 ,  1.5 ,  66000 , 1450 , 12000  , 76010);
+</pre></li>
+<li>Train the model: <pre class="example">
+DROP TABLE IF EXISTS houses_en, houses_en_summary;
+SELECT madlib.elastic_net_train( 'houses',                  -- Source table
+                                 'houses_en',               -- Result table
+                                 'price',                   -- Dependent variable
+                                 'array[tax, bath, size]',  -- Independent variable
+                                 'gaussian',                -- Regression family
+                                 0.5,                       -- Alpha value
+                                 0.1,                       -- Lambda value
+                                 TRUE,                      -- Standardize
+                                 NULL,                      -- Grouping column(s)
+                                 'fista',                   -- Optimizer
+                                 '',                        -- Optimizer parameters
+                                 NULL,                      -- Excluded columns
+                                 10000,                     -- Maximum iterations
+                                 1e-6                       -- Tolerance value
+                               );
+</pre></li>
+<li>View the resulting model: <pre class="example">
+-- Turn on expanded display to make it easier to read results.
+\x on
+SELECT * FROM houses_en;
+</pre> Result: <pre class="result">
+-[ RECORD 1 ]-----+-------------------------------------------
+family            | gaussian
+features          | {tax,bath,size}
+features_selected | {tax,bath,size}
+coef_nonzero      | {22.785201806,10707.9664343,54.7959774173}
+coef_all          | {22.785201806,10707.9664343,54.7959774173}
+intercept         | -7798.71393905
+log_likelihood    | -512248641.971
+standardize       | t
+iteration_run     | 10000
+</pre></li>
+<li>Use the prediction function to evaluate residuals: <pre class="example">
+\x off
+SELECT id, price, predict, price - predict AS residual
+FROM (
+    SELECT
+        houses.*,
+        madlib.elastic_net_gaussian_predict(
+            m.coef_all,             -- Coefficients
+            m.intercept,            -- Intercept
+            ARRAY[tax,bath,size]    -- Features (corresponding to coefficients)
+            ) AS predict
+    FROM houses, houses_en m) s
+ORDER BY id;
+</pre> Result: <pre class="result">
+ id | price  |     predict      |     residual
+----+--------+------------------+-------------------
+  1 |  50000 |  58545.391894031 |   -8545.391894031
+  2 |  85000 | 114804.077663003 |  -29804.077663003
+  3 |  22500 |  61448.835664388 |  -38948.835664388
+  4 |  90000 |  104675.17768007 |   -14675.17768007
+  5 | 133000 |  125887.70644358 |     7112.29355642
+  6 |  90500 |  78601.843595366 |   11898.156404634
+  7 | 260000 | 199257.358231079 |   60742.641768921
+  8 | 142500 |  82514.559377081 |   59985.440622919
+  9 | 160000 |  137735.93215082 |    22264.06784918
+ 10 | 240000 | 250347.627648647 |  -10347.627648647
+ 11 |  87000 |  97172.428263539 |  -10172.428263539
+ 12 | 118600 | 119024.150628605 | -424.150628604999
+ 13 | 140000 | 180692.127913358 |  -40692.127913358
+ 14 | 148000 | 156424.249824545 |   -8424.249824545
+ 15 |  65000 | 102527.938104575 |  -37527.938104575
+ 16 |  91000 |  102396.67273637 |   -11396.67273637
+ 17 | 132300 |  123609.20149988 |     8690.79850012
+ 18 |  91100 |  74044.833707966 |   17055.166292034
+ 19 | 260011 | 196978.853287379 |   63032.146712621
+ 20 | 141800 |  84793.064320781 |   57006.935679219
+ 21 | 160900 |  139330.88561141 |    21569.11438859
+ 22 | 239000 | 248524.823693687 | -9524.82369368701
+ 23 |  81010 |  95805.325297319 |  -14795.325297319
+ 24 | 117910 | 118340.599145495 | -430.599145494998
+ 25 | 141100 | 182970.632857058 |  -41870.632857058
+ 26 | 148011 | 160981.259711945 |  -12970.259711945
+ 27 |  66000 | 104806.443048275 |  -38806.443048275
+</pre></li>
+</ol>
+<h4>Example with Grouping</h4>
+<ol type="1">
+<li>Reuse the houses table above and train the model by grouping on zip code: <pre class="example">
+DROP TABLE IF EXISTS houses_en1, houses_en1_summary;
+SELECT madlib.elastic_net_train( 'houses',                  -- Source table
+                                 'houses_en1',               -- Result table
+                                 'price',                   -- Dependent variable
+                                 'array[tax, bath, size]',  -- Independent variable
+                                 'gaussian',                -- Regression family
+                                 0.5,                       -- Alpha value
+                                 0.1,                       -- Lambda value
+                                 TRUE,                      -- Standardize
+                                 'zipcode',                 -- Grouping column(s)
+                                 'fista',                   -- Optimizer
+                                 '',                        -- Optimizer parameters
+                                 NULL,                      -- Excluded columns
+                                 10000,                     -- Maximum iterations
+                                 1e-6                       -- Tolerance value
+                               );
+</pre></li>
+<li>View the resulting model with a separate model for each group: <pre class="example">
+-- Turn on expanded display to make it easier to read results.
+\x on
+SELECT * FROM houses_en1;
+</pre> Result: <pre class="result">
+-[ RECORD 1 ]-----+--------------------------------------------
+zipcode           | 94301
+family            | gaussian
+features          | {tax,bath,size}
+features_selected | {tax,bath,size}
+coef_nonzero      | {27.0542096962,12351.5244083,47.5833289771}
+coef_all          | {27.0542096962,12351.5244083,47.5833289771}
+intercept         | -7191.19791597
+log_likelihood    | -519199964.967
+standardize       | t
+iteration_run     | 10000
+-[ RECORD 2 ]-----+--------------------------------------------
+zipcode           | 76010
+family            | gaussian
+features          | {tax,bath,size}
+features_selected | {tax,bath,size}
+coef_nonzero      | {15.6325953499,10166.6608469,57.8689916035}
+coef_all          | {15.6325953499,10166.6608469,57.8689916035}
+intercept         | 513.912201627
+log_likelihood    | -538806528.45
+standardize       | t
+iteration_run     | 10000
+</pre></li>
+<li>Use the prediction function to evaluate residuals: <pre class="example">
+\x off
+SELECT madlib.elastic_net_predict(
+                'houses_en1',             -- Model table
+                'houses',                 -- New source data table
+                'id',                     -- Unique ID associated with each row
+                'houses_en1_prediction'   -- Table to store prediction result
+              );
+SELECT  houses.id,
+        houses.price,
+        houses_en1_prediction.prediction,
+        houses.price - houses_en1_prediction.prediction AS residual
+FROM houses_en1_prediction, houses
+WHERE houses.id = houses_en1_prediction.id ORDER BY id;
+</pre></li>
+</ol>
+<p><a class="anchor" id="additional_example"></a></p><h4>Example where coef_nonzero is different from coef_all</h4>
+<ol type="1">
+<li>Reuse the <a href="#examples">houses</a> table above and train the model with alpha=1 (L1) and a large lambda value (30000). <pre class="example">
+DROP TABLE IF EXISTS houses_en2, houses_en2_summary;
+SELECT madlib.elastic_net_train( 'houses',                  -- Source table
+                                 'houses_en2',              -- Result table
+                                 'price',                   -- Dependent variable
+                                 'array[tax, bath, size]',  -- Independent variable
+                                 'gaussian',                -- Regression family
+                                 1,                         -- Alpha value
+                                 30000,                     -- Lambda value
+                                 TRUE,                      -- Standardize
+                                 NULL,                      -- Grouping column(s)
+                                 'fista',                   -- Optimizer
+                                 '',                        -- Optimizer parameters
+                                 NULL,                      -- Excluded columns
+                                 10000,                     -- Maximum iterations
+                                 1e-6                       -- Tolerance value
+                               );
+</pre></li>
+<li>View the resulting model and see coef_nonzero is different from coef_all: <pre class="example">
+-- Turn on expanded display to make it easier to read results.
+\x on
+SELECT * FROM houses_en2;
+</pre> Result: <pre class="result">
+-[ RECORD 1 ]-----+--------------------------------
+family            | gaussian
+features          | {tax,bath,size}
+features_selected | {tax,size}
+coef_nonzero      | {6.94744249834,29.7137297658}
+coef_all          | {6.94744249834,0,29.7137297658}
+intercept         | 74445.7039382
+log_likelihood    | -1635348585.07
+standardize       | t
+iteration_run     | 151
+</pre></li>
+<li>We can still use the prediction function with <em>coef_all</em> to evaluate residuals: <pre class="example">
+\x off
+SELECT id, price, predict, price - predict AS residual
+FROM (
+    SELECT
+        houses.*,
+        madlib.elastic_net_gaussian_predict(
+            m.coef_all,                   -- All coefficients
+            m.intercept,                  -- Intercept
+            ARRAY[tax,bath,size]          -- All features
+            ) AS predict
+    FROM houses, houses_en2 m) s
+ORDER BY id;
+</pre></li>
+<li>We can speed up the prediction function with <em>coef_nonzero</em> to evaluate residuals. This requires the user to examine the <em>feature_selected</em> column in the result table to construct the correct set of independent variables to provide to the prediction function: <pre class="example">
+\x off
+SELECT id, price, predict, price - predict AS residual
+FROM (
+    SELECT
+        houses.*,
+        madlib.elastic_net_gaussian_predict(
+            m.coef_nonzero,               -- Non-zero coefficients
+            m.intercept,                  -- Intercept
+            ARRAY[tax,size]               -- Features corresponding to non-zero coefficients
+            ) AS predict
+    FROM houses, houses_en2 m) s
+ORDER BY id;
+</pre> The two queries above will result in same residuals: <pre class="result">
+ id | price  |     predict      |     residual
+----+--------+------------------+-------------------
+  1 |  50000 | 101424.266931887 | -51424.2669318866
+  2 |  85000 | 123636.877531235 |  -38636.877531235
+  3 |  22500 | 106081.206339915 | -83581.2063399148
+  4 |  90000 | 119117.827607296 | -29117.8276072958
+  5 | 133000 | 128186.922684709 |   4813.0773152912
+  6 |  90500 | 108190.009718915 |  -17690.009718915
+  7 | 260000 | 157119.312909723 |  102880.687090277
+  8 | 142500 | 113935.028663057 |  28564.9713369428
+  9 | 160000 | 131799.592783846 |  28200.4072161544
+ 10 | 240000 | 182913.598378673 |  57086.4016213268
+ 11 |  87000 | 116583.600144218 | -29583.6001442184
+ 12 | 118600 | 122842.722992761 |  -4242.7229927608
+ 13 | 140000 | 148278.940070862 | -8278.94007086201
+ 14 | 148000 | 134883.191046754 |  13116.8089532462
+ 15 |  65000 | 122046.449722531 |  -57046.449722531
+ 16 |  91000 | 118423.083357462 | -27423.0833574618
+ 17 | 132300 | 127492.178434875 |   4807.8215651252
+ 18 |  91100 | 106800.521219247 |  -15700.521219247
+ 19 | 260011 | 156424.568659889 |  103586.431340111
+ 20 | 141800 | 114629.772912891 |  27170.2270871088
+ 21 | 160900 | 132285.913758729 |  28614.0862412706
+ 22 | 239000 | 182357.802978806 |   56642.197021194
+ 23 |  81010 | 116166.753594318 |  -35156.753594318
+ 24 | 117910 | 122634.299717811 | -4724.29971781059
+ 25 | 141100 | 148973.684320696 | -7873.68432069599
+ 26 | 148011 | 136272.679546422 |  11738.3204535782
+ 27 |  66000 | 122741.193972365 |  -56741.193972365
+(27 rows)
+</pre></li>
+</ol>
+<h4>Example with Cross Validation</h4>
+<ol type="1">
+<li>Reuse the houses table above. Here we use 3-fold cross validation with 3 automatically generated lambda values and 3 specified alpha values. (This can take some time to run since elastic net is effectively being called 27 times for these combinations, then a 28th time for the whole dataset.) <pre class="example">
+DROP TABLE IF EXISTS houses_en3, houses_en3_summary, houses_en3_cv;
+SELECT madlib.elastic_net_train( 'houses',                  -- Source table
+                                 'houses_en3',               -- Result table
+                                 'price',                   -- Dependent variable
+                                 'array[tax, bath, size]',  -- Independent variable
+                                 'gaussian',                -- Regression family
+                                 0.5,                       -- Alpha value
+                                 0.1,                       -- Lambda value
+                                 TRUE,                      -- Standardize
+                                 NULL,                      -- Grouping column(s)
+                                 'fista',                   -- Optimizer
+                                 $$ n_folds = 3,            -- Cross validation parameters
+                                    validation_result=houses_en3_cv,
+                                    n_lambdas = 3,
+                                    alpha = {0, 0.1, 1}
+                                 $$,
+                                 NULL,                      -- Excluded columns
+                                 10000,                     -- Maximum iterations
+                                 1e-6                       -- Tolerance value
+                               );
+SELECT * FROM houses_en3;
+</pre> <pre class="result">
+-[ RECORD 1 ]-----+--------------------------------------------
+family            | gaussian
+features          | {tax,bath,size}
+features_selected | {tax,bath,size}
+coef_nonzero      | {22.4584188479,11657.0739045,52.1624090811}
+coef_all          | {22.4584188479,11657.0739045,52.1624090811}
+intercept         | -5067.33396522
+log_likelihood    | -543193170.15
+standardize       | t
+iteration_run     | 10000
+</pre></li>
+<li>Details of the cross validation: <pre class="example">
+SELECT * FROM houses_en3_cv ORDER BY mean_neg_loss DESC;
+</pre> <pre class="result">
+ alpha | lambda_value |  mean_neg_loss     |   std_neg_loss
+-------+--------------+------------------------------------------+
+   0.0 |          0.1 |     -36094.4685768 |      10524.4473253
+   0.1 |          0.1 |     -36136.2448004 |      10682.4136993
+   1.0 |        100.0 |     -37007.9496501 |      12679.3781975
+   1.0 |          0.1 |     -37018.1019927 |      12716.7438015
+   0.1 |        100.0 |     -59275.6940173 |      9764.50064237
+   0.0 |        100.0 |     -59380.252681  |      9763.26373034
+   1.0 |     100000.0 |     -60353.0220769 |      9748.10305107
+   0.1 |     100000.0 | {large neg number} |  {large pos number}
+   0.0 |     100000.0 | {large neg number} |  {large pos number}
+(9 rows)
+</pre></li>
+</ol>
+<p><a class="anchor" id="notes"></a></p><dl class="section user"><dt>Note</dt><dd>It is <b>strongly</b> <b>recommended</b> that you run <code><a class="el" href="elastic__net_8sql__in.html#a735038a5090c112505c740a90a203e83" title="Interface for elastic net. ">elastic_net_train()</a></code> on a subset of the data with a limited <em>max_iter</em> before applying it to the full data set with a large <em>max_iter</em>. In the pre-run, you can adjust the parameters to get the best performance and then apply the best set of parameters to the whole data set.</dd></dl>
+<p><a class="anchor" id="background"></a></p><dl class="section user"><dt>Technical Background</dt><dd></dd></dl>
+<p>Elastic net regularization seeks to find a weight vector that, for any given training example set, minimizes: </p><p class="formulaDsp">
+\[\min_{w \in R^N} L(w) + \lambda \left(\frac{(1-\alpha)}{2} \|w\|_2^2 + \alpha \|w\|_1 \right)\]
+</p>
+<p> where \(L\) is the metric function that the user wants to minimize. Here \( \alpha \in [0,1] \) and \( lambda \geq 0 \). If \(alpha = 0\), we have the ridge regularization (known also as Tikhonov regularization), and if \(\alpha = 1\), we have the LASSO regularization.</p>
+<p>For the Gaussian response family (or linear model), we have </p><p class="formulaDsp">
+\[L(\vec{w}) = \frac{1}{2}\left[\frac{1}{M} \sum_{m=1}^M (w^{t} x_m + w_{0} - y_m)^2 \right] \]
+</p>
+<p>For the Binomial response family (or logistic model), we have </p><p class="formulaDsp">
+\[ L(\vec{w}) = \sum_{m=1}^M\left[y_m \log\left(1 + e^{-(w_0 + \vec{w}\cdot\vec{x}_m)}\right) + (1-y_m) \log\left(1 + e^{w_0 + \vec{w}\cdot\vec{x}_m}\right)\right]\ , \]
+</p>
+<p> where \(y_m \in {0,1}\).</p>
+<p>To get better convergence, one can rescale the value of each element of x </p><p class="formulaDsp">
+\[ x&#39; \leftarrow \frac{x - \bar{x}}{\sigma_x} \]
+</p>
+<p> and for Gaussian case we also let </p><p class="formulaDsp">
+\[y&#39; \leftarrow y - \bar{y} \]
+</p>
+<p> and then minimize with the regularization terms. At the end of the calculation, the orginal scales will be restored and an intercept term will be obtained at the same time as a by-product.</p>
+<p>Note that fitting after scaling is not equivalent to directly fitting.</p>
+<p><a class="anchor" id="literature"></a></p><dl class="section user"><dt>Literature</dt><dd></dd></dl>
+<p>[1] Elastic net regularization, <a href="http://en.wikipedia.org/wiki/Elastic_net_regularization">http://en.wikipedia.org/wiki/Elastic_net_regularization</a></p>
+<p>[2] Beck, A. and M. Teboulle (2009), A fast iterative shrinkage-thresholding algorithm for linear inverse problems. SIAM J. on Imaging Sciences 2(1), 183-202.</p>
+<p>[3] Shai Shalev-Shwartz and Ambuj Tewari, Stochastic Methods for L1 Regularized Loss Minimization. Proceedings of the 26th International Conference on Machine Learning, Montreal, Canada, 2009.</p>
+<p>[4] Stochastic gradient descent, <a href="https://en.wikipedia.org/wiki/Stochastic_gradient_descent">https://en.wikipedia.org/wiki/Stochastic_gradient_descent</a></p>
+<p><a class="anchor" id="related"></a></p><dl class="section user"><dt>Related Topics</dt><dd></dd></dl>
+<p>File <a class="el" href="elastic__net_8sql__in.html" title="SQL functions for elastic net regularization. ">elastic_net.sql_in</a> documenting the SQL functions. </p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__encode__categorical.html b/docs/rc/group__grp__encode__categorical.html
new file mode 100644
index 0000000..a137661
--- /dev/null
+++ b/docs/rc/group__grp__encode__categorical.html
@@ -0,0 +1,693 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Encoding Categorical Variables</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__encode__categorical.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Encoding Categorical Variables<div class="ingroups"><a class="el" href="group__grp__datatrans.html">Data Types and Transformations</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li>
+<a href="#categorical">Coding Systems for Categorical Variables</a> </li>
+<li>
+<a href="#examples">Examples</a> </li>
+<li>
+<a href="#literature">Literature</a> </li>
+</ul>
+</div><p><a class="anchor" id="categorical"></a></p><dl class="section user"><dt>Coding Systems for Categorical Variables</dt><dd>Categorical variables [1] require special attention in regression analysis because, unlike dichotomous or continuous variables, they cannot be entered into the regression equation just as they are. For example, if you have a variable called race that is coded with 1=Hispanic, 2=Asian, 3=Black, 4=White, then entering race in your regression will look at the linear effect of the race variable, which is probably not what you intended. Instead, categorical variables like this need to be coded into a series of indicator variables which can then be entered into the regression model. There are a variety of coding systems that can be used for coding categorical variables, including one-hot, dummy, effects, orthogonal, and Helmert.</dd></dl>
+<p>We currently support one-hot and dummy coding techniques.</p>
+<p>Dummy coding is used when a researcher wants to compare other groups of the predictor variable with one specific group of the predictor variable. Often, the specific group to compare with is called the reference group.</p>
+<p>One-hot encoding is similar to dummy coding except it builds indicator (0/1) columns (cast as numeric) for each value of each category. Only one of these columns could take on the value 1 for each row (data point). There is no reference category for this function.</p>
+<pre class="syntax">
+encode_categorical_variables (
+        source_table,
+        output_table,
+        categorical_cols,
+        categorical_cols_to_exclude,    -- Optional
+        row_id,                         -- Optional
+        top,                            -- Optional
+        value_to_drop,                  -- Optional
+        encode_null,                    -- Optional
+        output_type,                    -- Optional
+        output_dictionary,              -- Optional
+        distributed_by                  -- Optional
+        )
+</pre><p> <b>Arguments</b> </p><dl class="arglist">
+<dt>source_table </dt>
+<dd><p class="startdd">VARCHAR. Name of the table containing the source categorical data to encode.</p>
+<p class="enddd"></p>
+</dd>
+<dt>output_table </dt>
+<dd><p class="startdd">VARCHAR. Name of the result table.</p>
+<dl class="section note"><dt>Note</dt><dd>If there are index columns in the 'source_table' specified by the parameter 'row_id' (see below), then the output table will contain only the index columns 'row_id' and the encoded columns. If the parameter 'row_id' is not specified, then all columns from the 'source_table', with the exception of the original columns that have been encoded, will be included in the 'output_table'. </dd></dl>
+</dd>
+<dt>categorical_cols </dt>
+<dd><p class="startdd">VARCHAR. Comma-separated string of column names of categorical variables to encode. Can also be '*' meaning all columns are to be encoded, except the ones specified in 'categorical_cols_to_exclude' and 'row_id'. Please note that all Boolean, integer and text columns are considered categorical columns and will be encoded when ‘*’ is specified for this argument. </p>
+<p class="enddd"></p>
+</dd>
+<dt>categorical_cols_to_exclude (optional) </dt>
+<dd><p class="startdd">VARCHAR. Comma-separated string of column names to exclude from the categorical variables to encode. Applicable only if 'categorical_cols' = '*'. </p>
+<p class="enddd"></p>
+</dd>
+<dt>row_id (optional) </dt>
+<dd><p class="startdd">VARCHAR. Comma-separated column name(s) corresponding to the primary key(s) of the source table. This parameter determines the format of the 'output_table' as described above. If 'categorical_cols' = '*', these columns will be excluded from encoding (but will be included in the output table).</p>
+<dl class="section note"><dt>Note</dt><dd>If you want to see both the raw categorical variable and its encoded form in the output_table, then include the categorical variable in the 'row_id' parameter. However, this will not work if you specify '*' for the parameter 'categorical_cols', because in this case 'row_id' columns will not be encoded at all. </dd></dl>
+</dd>
+<dt>top (optional) </dt>
+<dd><p class="startdd">VARCHAR. default: NULL. If integer, encodes the top n values by frequency. If float in the range (0.0, 1.0), encodes the specified fraction of values by frequency (e.g., 0.1 means top 10%). Can be specified as a global for all categorical columns, or as a dictionary with separate 'top' values for each categorical variable. Set to NULL to encode all levels (values) for all categorical columns. </p>
+<p class="enddd"></p>
+</dd>
+<dt>value_to_drop (optional) </dt>
+<dd><p class="startdd">VARCHAR. Default: NULL.</p>
+<ul>
+<li>For dummy coding, indicate the desired value (reference) to drop for each categorical variable. Can be specified as a global for all categorical columns, or a comma-separated string containing items of the form 'name=value', where 'name' is the column name and 'value' is the reference value to be dropped.</li>
+<li>Set to NULL for one-hot encoding (default)</li>
+</ul>
+<dl class="section note"><dt>Note</dt><dd>If you specify both 'value_to_drop' and 'top' parameters, the 'value_to_drop' will be applied first (takes priority), then 'top' will be applied to the remaining values. </dd></dl>
+</dd>
+<dt>encode_null (optional) </dt>
+<dd><p class="startdd">BOOLEAN. default: FALSE. Whether NULL should be treated as one of the values of the categorical variable. If TRUE, then an indicator variable is created corresponding to the NULL value. If FALSE, then all encoded values for that variable will be set to 0. </p>
+<p class="enddd"></p>
+</dd>
+<dt>output_type (optional) </dt>
+<dd><p class="startdd">VARCHAR. default: 'column'. This parameter controls the output format of the indicator variables. If 'column', a column is created for each indicator variable. PostgreSQL limits the number of columns in a table. If the total number of indicator columns exceeds the limit, then make this parameter either 'array' to combine the indicator columns into an array or 'svec' to cast the array output to <em>'madlib.svec'</em> type.</p>
+<p>Since the array output for any single tuple would be sparse (only one non-zero entry for each categorical column), the 'svec' output would be most efficient for storage. The 'array' output is useful if the array is used for post-processing, including concatenating with other non-categorical features.</p>
+<p>The order of the array is the same as specified in 'categorical_cols'. A dictionary will be created when 'output_type' is 'array' or 'svec' to define an index into the array. The dictionary table will be given the name of the 'output_table' appended by '_dictionary'. </p>
+<p class="enddd"></p>
+</dd>
+<dt>output_dictionary (optional) </dt>
+<dd><p class="startdd">BOOLEAN. default: FALSE. This parameter is used to handle auto-generated column names that exceed the PostgreSQL limit of 63 bytes.</p>
+<ul>
+<li>If TRUE, column names will include numerical IDs and will create a dictionary table called 'output_table_dictionary' ('output_table' appended with '_dictionary').</li>
+<li>If FALSE, will auto-generate column names in the usual way unless the limit of 63 bytes will be exceeded. In this case, a dictionary output file will be created and a message given to the user. </li>
+</ul>
+<p class="enddd"></p>
+</dd>
+<dt>distributed_by (optional) </dt>
+<dd><p class="startdd">VARCHAR. default: NULL. Columns to use for the distribution policy of the output table. When NULL, either 'row_id' is used as distribution policy (when provided), or else the distribution policy of 'source_table' will be used. This argument does not apply to PostgreSQL platforms.</p>
+<ul>
+<li>NULL: By default, the distribution policy of the source_table will be used.</li>
+<li>Comma-separated column names: Column(s) to be used for the distribution key.</li>
+<li>RANDOMLY: Use random distribution policy (only if there does not exist a column named 'randomly').</li>
+</ul>
+<p class="enddd"></p>
+</dd>
+</dl>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<ol type="1">
+<li>Use a subset of the abalone dataset [2]: <pre class="example">
+DROP TABLE IF EXISTS abalone;
+CREATE TABLE abalone (
+    id serial,
+    sex character varying,
+    length double precision,
+    diameter double precision,
+    height double precision,
+    rings int
+);
+INSERT INTO abalone (sex, length, diameter, height, rings) VALUES
+('M',    0.455,  0.365,  0.095,  15),
+('M',    0.35,   0.265,  0.09,   7),
+('F',    0.53,   0.42,   0.135,  9),
+('M',    0.44,   0.365,  0.125,  10),
+('I',    0.33,   0.255,  0.08,   7),
+('I',    0.425,  0.3,    0.095,  8),
+('F',    0.53,   0.415,  0.15,   20),
+('F',    0.545,  0.425,  0.125,  16),
+('M',    0.475,  0.37,   0.125,  9),
+(NULL,   0.55,   0.44,   0.15,   19),
+('F',    0.525,  0.38,   0.14,   14),
+('M',    0.43,   0.35,   0.11,   10),
+('M',    0.49,   0.38,   0.135,  11),
+('F',    0.535,  0.405,  0.145,  10),
+('F',    0.47,   0.355,  0.1,    10),
+('M',    0.5,    0.4,    0.13,   12),
+('I',    0.355,  0.28,   0.085,  7),
+('F',    0.44,   0.34,   0.1,    10),
+('M',    0.365,  0.295,  0.08,   7),
+(NULL,   0.45,   0.32,   0.1,    9);
+</pre></li>
+<li>Create new table with one-hot encoding. The column 'sex' is replaced by three columns encoding the values 'F', 'M' and 'I'. Null values are not encoded by default: <pre class="example">
+DROP TABLE IF EXISTS abalone_out, abalone_out_dictionary;
+SELECT madlib.encode_categorical_variables (
+        'abalone',                   -- Source table
+        'abalone_out',               -- Output table
+        'sex'                        -- Categorical columns
+        );
+SELECT * FROM abalone_out ORDER BY id;
+</pre> <pre class="result">
+  id | length | diameter | height | rings | sex_F | sex_I | sex_M
+----+--------+----------+--------+-------+-------+-------+-------
+  1 |  0.455 |    0.365 |  0.095 |    15 |     0 |     0 |     1
+  2 |   0.35 |    0.265 |   0.09 |     7 |     0 |     0 |     1
+  3 |   0.53 |     0.42 |  0.135 |     9 |     1 |     0 |     0
+  4 |   0.44 |    0.365 |  0.125 |    10 |     0 |     0 |     1
+  5 |   0.33 |    0.255 |   0.08 |     7 |     0 |     1 |     0
+  6 |  0.425 |      0.3 |  0.095 |     8 |     0 |     1 |     0
+  7 |   0.53 |    0.415 |   0.15 |    20 |     1 |     0 |     0
+  8 |  0.545 |    0.425 |  0.125 |    16 |     1 |     0 |     0
+  9 |  0.475 |     0.37 |  0.125 |     9 |     0 |     0 |     1
+ 10 |   0.55 |     0.44 |   0.15 |    19 |     0 |     0 |     0
+ 11 |  0.525 |     0.38 |   0.14 |    14 |     1 |     0 |     0
+ 12 |   0.43 |     0.35 |   0.11 |    10 |     0 |     0 |     1
+ 13 |   0.49 |     0.38 |  0.135 |    11 |     0 |     0 |     1
+ 14 |  0.535 |    0.405 |  0.145 |    10 |     1 |     0 |     0
+ 15 |   0.47 |    0.355 |    0.1 |    10 |     1 |     0 |     0
+ 16 |    0.5 |      0.4 |   0.13 |    12 |     0 |     0 |     1
+ 17 |  0.355 |     0.28 |  0.085 |     7 |     0 |     1 |     0
+ 18 |   0.44 |     0.34 |    0.1 |    10 |     1 |     0 |     0
+ 19 |  0.365 |    0.295 |   0.08 |     7 |     0 |     0 |     1
+ 20 |   0.45 |     0.32 |    0.1 |     9 |     0 |     0 |     0
+(20 rows)
+</pre></li>
+<li>Now include NULL values in encoding (note the additional column 'sex_null'): <pre class="example">
+DROP TABLE IF EXISTS abalone_out, abalone_out_dictionary;
+SELECT madlib.encode_categorical_variables (
+        'abalone',                   -- Source table
+        'abalone_out',               -- Output table
+        'sex',                       -- Categorical columns
+        NULL,                        -- Categorical columns to exclude
+        NULL,                        -- Index columns
+        NULL,                        -- Top values
+        NULL,                        -- Value to drop for dummy encoding
+        TRUE                         -- Encode nulls
+        );
+SELECT * FROM abalone_out ORDER BY id;
+</pre> <pre class="result">
+ id | length | diameter | height | rings | sex_F | sex_I | sex_M | sex_null
+----+--------+----------+--------+-------+-------+-------+-------+----------
+  1 |  0.455 |    0.365 |  0.095 |    15 |     0 |     0 |     1 |        0
+  2 |   0.35 |    0.265 |   0.09 |     7 |     0 |     0 |     1 |        0
+  3 |   0.53 |     0.42 |  0.135 |     9 |     1 |     0 |     0 |        0
+  4 |   0.44 |    0.365 |  0.125 |    10 |     0 |     0 |     1 |        0
+  5 |   0.33 |    0.255 |   0.08 |     7 |     0 |     1 |     0 |        0
+  6 |  0.425 |      0.3 |  0.095 |     8 |     0 |     1 |     0 |        0
+  7 |   0.53 |    0.415 |   0.15 |    20 |     1 |     0 |     0 |        0
+  8 |  0.545 |    0.425 |  0.125 |    16 |     1 |     0 |     0 |        0
+  9 |  0.475 |     0.37 |  0.125 |     9 |     0 |     0 |     1 |        0
+ 10 |   0.55 |     0.44 |   0.15 |    19 |     0 |     0 |     0 |        1
+ 11 |  0.525 |     0.38 |   0.14 |    14 |     1 |     0 |     0 |        0
+ 12 |   0.43 |     0.35 |   0.11 |    10 |     0 |     0 |     1 |        0
+ 13 |   0.49 |     0.38 |  0.135 |    11 |     0 |     0 |     1 |        0
+ 14 |  0.535 |    0.405 |  0.145 |    10 |     1 |     0 |     0 |        0
+ 15 |   0.47 |    0.355 |    0.1 |    10 |     1 |     0 |     0 |        0
+ 16 |    0.5 |      0.4 |   0.13 |    12 |     0 |     0 |     1 |        0
+ 17 |  0.355 |     0.28 |  0.085 |     7 |     0 |     1 |     0 |        0
+ 18 |   0.44 |     0.34 |    0.1 |    10 |     1 |     0 |     0 |        0
+ 19 |  0.365 |    0.295 |   0.08 |     7 |     0 |     0 |     1 |        0
+ 20 |   0.45 |     0.32 |    0.1 |     9 |     0 |     0 |     0 |        1
+(20 rows)
+</pre></li>
+<li>Encode all categorical variables in the source table. Also, specify the column 'id' as the index (primary key) which changes the output table to include only the index and the encoded variables: <pre class="example">
+DROP TABLE IF EXISTS abalone_out, abalone_out_dictionary;
+SELECT madlib.encode_categorical_variables (
+        'abalone',                   -- Source table
+        'abalone_out',               -- Output table
+        '*',                         -- Categorical columns
+        NULL,                        -- Categorical columns to exclude
+        'id'                         -- Index columns
+        );
+SELECT * FROM abalone_out ORDER BY id;
+</pre> <pre class="result">
+ id | sex_F | sex_I | sex_M | rings_7 | rings_8 | rings_9 | rings_10 | rings_11 | rings_12 | rings_14 | rings_15 | rings_16 | rings_19 | rings_20
+----+-------+-------+-------+---------+---------+---------+----------+----------+----------+----------+----------+----------+----------+----------
+  1 |     0 |     0 |     1 |       0 |       0 |       0 |        0 |        0 |        0 |        0 |        1 |        0 |        0 |        0
+  2 |     0 |     0 |     1 |       1 |       0 |       0 |        0 |        0 |        0 |        0 |        0 |        0 |        0 |        0
+  3 |     1 |     0 |     0 |       0 |       0 |       1 |        0 |        0 |        0 |        0 |        0 |        0 |        0 |        0
+  4 |     0 |     0 |     1 |       0 |       0 |       0 |        1 |        0 |        0 |        0 |        0 |        0 |        0 |        0
+  5 |     0 |     1 |     0 |       1 |       0 |       0 |        0 |        0 |        0 |        0 |        0 |        0 |        0 |        0
+  6 |     0 |     1 |     0 |       0 |       1 |       0 |        0 |        0 |        0 |        0 |        0 |        0 |        0 |        0
+  7 |     1 |     0 |     0 |       0 |       0 |       0 |        0 |        0 |        0 |        0 |        0 |        0 |        0 |        1
+  8 |     1 |     0 |     0 |       0 |       0 |       0 |        0 |        0 |        0 |        0 |        0 |        1 |        0 |        0
+  9 |     0 |     0 |     1 |       0 |       0 |       1 |        0 |        0 |        0 |        0 |        0 |        0 |        0 |        0
+ 10 |     0 |     0 |     0 |       0 |       0 |       0 |        0 |        0 |        0 |        0 |        0 |        0 |        1 |        0
+ 11 |     1 |     0 |     0 |       0 |       0 |       0 |        0 |        0 |        0 |        1 |        0 |        0 |        0 |        0
+ 12 |     0 |     0 |     1 |       0 |       0 |       0 |        1 |        0 |        0 |        0 |        0 |        0 |        0 |        0
+ 13 |     0 |     0 |     1 |       0 |       0 |       0 |        0 |        1 |        0 |        0 |        0 |        0 |        0 |        0
+ 14 |     1 |     0 |     0 |       0 |       0 |       0 |        1 |        0 |        0 |        0 |        0 |        0 |        0 |        0
+ 15 |     1 |     0 |     0 |       0 |       0 |       0 |        1 |        0 |        0 |        0 |        0 |        0 |        0 |        0
+ 16 |     0 |     0 |     1 |       0 |       0 |       0 |        0 |        0 |        1 |        0 |        0 |        0 |        0 |        0
+ 17 |     0 |     1 |     0 |       1 |       0 |       0 |        0 |        0 |        0 |        0 |        0 |        0 |        0 |        0
+ 18 |     1 |     0 |     0 |       0 |       0 |       0 |        1 |        0 |        0 |        0 |        0 |        0 |        0 |        0
+ 19 |     0 |     0 |     1 |       1 |       0 |       0 |        0 |        0 |        0 |        0 |        0 |        0 |        0 |        0
+ 20 |     0 |     0 |     0 |       0 |       0 |       1 |        0 |        0 |        0 |        0 |        0 |        0 |        0 |        0
+(20 rows)
+</pre></li>
+<li>Now let's encode only the top values and group others into a miscellaneous bucket column. Top values can be global across all columns or specified by column. As an example of the latter, here are the top 2 'sex' values and the top 50% of 'rings' values: <pre class="example">
+DROP TABLE IF EXISTS abalone_out, abalone_out_dictionary;
+SELECT madlib.encode_categorical_variables (
+        'abalone',                   -- Source table
+        'abalone_out',               -- Output table
+        '*',                         -- Categorical columns
+        NULL,                        -- Categorical columns to exclude
+        'id',                        -- Index columns
+        'sex=2, rings=0.5'           -- Top values
+        );
+SELECT * FROM abalone_out ORDER BY id;
+</pre> <pre class="result">
+ id | sex_M | sex_F | sex__misc__ | rings_10 | rings_7 | rings_9 | rings__misc__
+----+-------+-------+-------------+----------+---------+---------+---------------
+  1 |     1 |     0 |           0 |        0 |       0 |       0 |             1
+  2 |     1 |     0 |           0 |        0 |       1 |       0 |             0
+  3 |     0 |     1 |           0 |        0 |       0 |       1 |             0
+  4 |     1 |     0 |           0 |        1 |       0 |       0 |             0
+  5 |     0 |     0 |           1 |        0 |       1 |       0 |             0
+  6 |     0 |     0 |           1 |        0 |       0 |       0 |             1
+  7 |     0 |     1 |           0 |        0 |       0 |       0 |             1
+  8 |     0 |     1 |           0 |        0 |       0 |       0 |             1
+  9 |     1 |     0 |           0 |        0 |       0 |       1 |             0
+ 10 |     0 |     0 |           0 |        0 |       0 |       0 |             1
+ 11 |     0 |     1 |           0 |        0 |       0 |       0 |             1
+ 12 |     1 |     0 |           0 |        1 |       0 |       0 |             0
+ 13 |     1 |     0 |           0 |        0 |       0 |       0 |             1
+ 14 |     0 |     1 |           0 |        1 |       0 |       0 |             0
+ 15 |     0 |     1 |           0 |        1 |       0 |       0 |             0
+ 16 |     1 |     0 |           0 |        0 |       0 |       0 |             1
+ 17 |     0 |     0 |           1 |        0 |       1 |       0 |             0
+ 18 |     0 |     1 |           0 |        1 |       0 |       0 |             0
+ 19 |     1 |     0 |           0 |        0 |       1 |       0 |             0
+ 20 |     0 |     0 |           0 |        0 |       0 |       1 |             0
+(20 rows)
+</pre></li>
+<li>If you want to see both the raw categorical variable and its encoded form in the output_table, then include the categorical variable(s) in the index parameter. (Remember that this will not work if you specify '*' for the parameter 'categorical_cols', because in this case 'row_id' columns will not be encoded at all.) <pre class="example">
+DROP TABLE IF EXISTS abalone_out, abalone_out_dictionary;
+SELECT madlib.encode_categorical_variables (
+        'abalone',                   -- Source table
+        'abalone_out',               -- Output table
+        'sex, rings',                -- Categorical columns
+        NULL,                        -- Categorical columns to exclude
+        'id, sex, rings'             -- Index columns
+        );
+SELECT * FROM abalone_out ORDER BY id;
+</pre> <pre class="result">
+ id | sex | rings | sex_F | sex_I | sex_M | rings_7 | rings_8 | rings_9 | rings_10 | rings_11 | rings_12 | rings_14 | rings_15 | rings_16 | rings_19 | rings_20
+----+-----+-------+-------+-------+-------+---------+---------+---------+----------+----------+----------+----------+----------+----------+----------+----------
+  1 | M   |    15 |     0 |     0 |     1 |       0 |       0 |       0 |        0 |        0 |        0 |        0 |        1 |        0 |        0 |        0
+  2 | M   |     7 |     0 |     0 |     1 |       1 |       0 |       0 |        0 |        0 |        0 |        0 |        0 |        0 |        0 |        0
+  3 | F   |     9 |     1 |     0 |     0 |       0 |       0 |       1 |        0 |        0 |        0 |        0 |        0 |        0 |        0 |        0
+  4 | M   |    10 |     0 |     0 |     1 |       0 |       0 |       0 |        1 |        0 |        0 |        0 |        0 |        0 |        0 |        0
+  5 | I   |     7 |     0 |     1 |     0 |       1 |       0 |       0 |        0 |        0 |        0 |        0 |        0 |        0 |        0 |        0
+  6 | I   |     8 |     0 |     1 |     0 |       0 |       1 |       0 |        0 |        0 |        0 |        0 |        0 |        0 |        0 |        0
+  7 | F   |    20 |     1 |     0 |     0 |       0 |       0 |       0 |        0 |        0 |        0 |        0 |        0 |        0 |        0 |        1
+  8 | F   |    16 |     1 |     0 |     0 |       0 |       0 |       0 |        0 |        0 |        0 |        0 |        0 |        1 |        0 |        0
+  9 | M   |     9 |     0 |     0 |     1 |       0 |       0 |       1 |        0 |        0 |        0 |        0 |        0 |        0 |        0 |        0
+ 10 |     |    19 |     0 |     0 |     0 |       0 |       0 |       0 |        0 |        0 |        0 |        0 |        0 |        0 |        1 |        0
+ 11 | F   |    14 |     1 |     0 |     0 |       0 |       0 |       0 |        0 |        0 |        0 |        1 |        0 |        0 |        0 |        0
+ 12 | M   |    10 |     0 |     0 |     1 |       0 |       0 |       0 |        1 |        0 |        0 |        0 |        0 |        0 |        0 |        0
+ 13 | M   |    11 |     0 |     0 |     1 |       0 |       0 |       0 |        0 |        1 |        0 |        0 |        0 |        0 |        0 |        0
+ 14 | F   |    10 |     1 |     0 |     0 |       0 |       0 |       0 |        1 |        0 |        0 |        0 |        0 |        0 |        0 |        0
+ 15 | F   |    10 |     1 |     0 |     0 |       0 |       0 |       0 |        1 |        0 |        0 |        0 |        0 |        0 |        0 |        0
+ 16 | M   |    12 |     0 |     0 |     1 |       0 |       0 |       0 |        0 |        0 |        1 |        0 |        0 |        0 |        0 |        0
+ 17 | I   |     7 |     0 |     1 |     0 |       1 |       0 |       0 |        0 |        0 |        0 |        0 |        0 |        0 |        0 |        0
+ 18 | F   |    10 |     1 |     0 |     0 |       0 |       0 |       0 |        1 |        0 |        0 |        0 |        0 |        0 |        0 |        0
+ 19 | M   |     7 |     0 |     0 |     1 |       1 |       0 |       0 |        0 |        0 |        0 |        0 |        0 |        0 |        0 |        0
+ 20 |     |     9 |     0 |     0 |     0 |       0 |       0 |       1 |        0 |        0 |        0 |        0 |        0 |        0 |        0 |        0
+(20 rows)
+</pre></li>
+<li>For dummy encoding, let's make the 'I' value from the 'sex' variable as the reference. Here we use the 'value_to_drop' parameter: <pre class="example">
+DROP TABLE IF EXISTS abalone_out, abalone_out_dictionary;
+SELECT madlib.encode_categorical_variables (
+        'abalone',                   -- Source table
+        'abalone_out',               -- Output table
+        '*',                         -- Categorical columns
+        'rings',                     -- Categorical columns to exclude
+        'id',                        -- Index columns
+        NULL,                        -- Top value
+        'sex=I'                      -- Value to drop for dummy encoding
+        );
+SELECT * FROM abalone_out ORDER BY id;
+</pre> <pre class="result">
+  id | sex_F | sex_M
+----+-------+-------
+  1 |     0 |     1
+  2 |     0 |     1
+  3 |     1 |     0
+  4 |     0 |     1
+  5 |     0 |     0
+  6 |     0 |     0
+  7 |     1 |     0
+  8 |     1 |     0
+  9 |     0 |     1
+ 10 |     0 |     0
+ 11 |     1 |     0
+ 12 |     0 |     1
+ 13 |     0 |     1
+ 14 |     1 |     0
+ 15 |     1 |     0
+ 16 |     0 |     1
+ 17 |     0 |     0
+ 18 |     1 |     0
+ 19 |     0 |     1
+ 20 |     0 |     0
+(20 rows)
+</pre></li>
+<li>Create an array output for the two categorical variables in the source table: <pre class="example">
+DROP TABLE IF EXISTS abalone_out, abalone_out_dictionary;
+SELECT madlib.encode_categorical_variables (
+        'abalone',                   -- Source table
+        'abalone_out',               -- Output table
+        '*',                         -- Categorical columns
+        NULL,                        -- Categorical columns to exclude
+        'id',                        -- Index columns
+        NULL,                        -- Top values
+        NULL,                        -- Value to drop for dummy encoding
+        NULL,                        -- Encode nulls
+        'array'                      -- Array output type
+        );
+SELECT * FROM abalone_out ORDER BY id;
+</pre> <pre class="result">
+ id |     __encoded_variables__
+----+-------------------------------
+  1 | {0,0,1,0,0,0,0,0,0,0,1,0,0,0}
+  2 | {0,0,1,1,0,0,0,0,0,0,0,0,0,0}
+  3 | {1,0,0,0,0,1,0,0,0,0,0,0,0,0}
+  4 | {0,0,1,0,0,0,1,0,0,0,0,0,0,0}
+  5 | {0,1,0,1,0,0,0,0,0,0,0,0,0,0}
+  6 | {0,1,0,0,1,0,0,0,0,0,0,0,0,0}
+  7 | {1,0,0,0,0,0,0,0,0,0,0,0,0,1}
+  8 | {1,0,0,0,0,0,0,0,0,0,0,1,0,0}
+  9 | {0,0,1,0,0,1,0,0,0,0,0,0,0,0}
+ 10 | {0,0,0,0,0,0,0,0,0,0,0,0,1,0}
+ 11 | {1,0,0,0,0,0,0,0,0,1,0,0,0,0}
+ 12 | {0,0,1,0,0,0,1,0,0,0,0,0,0,0}
+ 13 | {0,0,1,0,0,0,0,1,0,0,0,0,0,0}
+ 14 | {1,0,0,0,0,0,1,0,0,0,0,0,0,0}
+ 15 | {1,0,0,0,0,0,1,0,0,0,0,0,0,0}
+ 16 | {0,0,1,0,0,0,0,0,1,0,0,0,0,0}
+ 17 | {0,1,0,1,0,0,0,0,0,0,0,0,0,0}
+ 18 | {1,0,0,0,0,0,1,0,0,0,0,0,0,0}
+ 19 | {0,0,1,1,0,0,0,0,0,0,0,0,0,0}
+ 20 | {0,0,0,0,0,1,0,0,0,0,0,0,0,0}
+(20 rows)
+</pre> View the dictionary table that gives the index into the array: <pre class="example">
+SELECT * FROM abalone_out_dictionary;
+</pre> <pre class="result">
+  encoded_column_name  | index | variable | value
+-----------------------+-------+----------+-------
+ __encoded_variables__ |     1 | sex      | F
+ __encoded_variables__ |     2 | sex      | I
+ __encoded_variables__ |     3 | sex      | M
+ __encoded_variables__ |     4 | rings    | 7
+ __encoded_variables__ |     5 | rings    | 8
+ __encoded_variables__ |     6 | rings    | 9
+ __encoded_variables__ |     7 | rings    | 10
+ __encoded_variables__ |     8 | rings    | 11
+ __encoded_variables__ |     9 | rings    | 12
+ __encoded_variables__ |    10 | rings    | 14
+ __encoded_variables__ |    11 | rings    | 15
+ __encoded_variables__ |    12 | rings    | 16
+ __encoded_variables__ |    13 | rings    | 19
+ __encoded_variables__ |    14 | rings    | 20
+(14 rows)
+</pre></li>
+<li>Create a dictionary output: <pre class="example">
+DROP TABLE IF EXISTS abalone_out, abalone_out_dictionary;
+SELECT madlib.encode_categorical_variables (
+        'abalone',                   -- Source table
+        'abalone_out',               -- Output table
+        '*',                         -- Categorical columns
+        NULL,                        -- Categorical columns to exclude
+        'id',                        -- Index columns
+        NULL,                        -- Top values
+        NULL,                        -- Value to drop for dummy encoding
+        NULL,                        -- Encode nulls
+        NULL,                        -- Output type
+        TRUE                         -- Dictionary output
+        );
+SELECT * FROM abalone_out ORDER BY id;
+</pre> <pre class="result">
+ id | sex_1 | sex_2 | sex_3 | rings_1 | rings_2 | rings_3 | rings_4 | rings_5 | rings_6 | rings_7 | rings_8 | rings_9 | rings_10 | rings_11
+----+-------+-------+-------+---------+---------+---------+---------+---------+---------+---------+---------+---------+----------+----------
+  1 |     0 |     0 |     1 |       0 |       0 |       0 |       0 |       0 |       0 |       0 |       1 |       0 |        0 |        0
+  2 |     0 |     0 |     1 |       1 |       0 |       0 |       0 |       0 |       0 |       0 |       0 |       0 |        0 |        0
+  3 |     1 |     0 |     0 |       0 |       0 |       1 |       0 |       0 |       0 |       0 |       0 |       0 |        0 |        0
+  4 |     0 |     0 |     1 |       0 |       0 |       0 |       1 |       0 |       0 |       0 |       0 |       0 |        0 |        0
+  5 |     0 |     1 |     0 |       1 |       0 |       0 |       0 |       0 |       0 |       0 |       0 |       0 |        0 |        0
+  6 |     0 |     1 |     0 |       0 |       1 |       0 |       0 |       0 |       0 |       0 |       0 |       0 |        0 |        0
+  7 |     1 |     0 |     0 |       0 |       0 |       0 |       0 |       0 |       0 |       0 |       0 |       0 |        0 |        1
+  8 |     1 |     0 |     0 |       0 |       0 |       0 |       0 |       0 |       0 |       0 |       0 |       1 |        0 |        0
+  9 |     0 |     0 |     1 |       0 |       0 |       1 |       0 |       0 |       0 |       0 |       0 |       0 |        0 |        0
+ 10 |     0 |     0 |     0 |       0 |       0 |       0 |       0 |       0 |       0 |       0 |       0 |       0 |        1 |        0
+ 11 |     1 |     0 |     0 |       0 |       0 |       0 |       0 |       0 |       0 |       1 |       0 |       0 |        0 |        0
+ 12 |     0 |     0 |     1 |       0 |       0 |       0 |       1 |       0 |       0 |       0 |       0 |       0 |        0 |        0
+ 13 |     0 |     0 |     1 |       0 |       0 |       0 |       0 |       1 |       0 |       0 |       0 |       0 |        0 |        0
+ 14 |     1 |     0 |     0 |       0 |       0 |       0 |       1 |       0 |       0 |       0 |       0 |       0 |        0 |        0
+ 15 |     1 |     0 |     0 |       0 |       0 |       0 |       1 |       0 |       0 |       0 |       0 |       0 |        0 |        0
+ 16 |     0 |     0 |     1 |       0 |       0 |       0 |       0 |       0 |       1 |       0 |       0 |       0 |        0 |        0
+ 17 |     0 |     1 |     0 |       1 |       0 |       0 |       0 |       0 |       0 |       0 |       0 |       0 |        0 |        0
+ 18 |     1 |     0 |     0 |       0 |       0 |       0 |       1 |       0 |       0 |       0 |       0 |       0 |        0 |        0
+ 19 |     0 |     0 |     1 |       1 |       0 |       0 |       0 |       0 |       0 |       0 |       0 |       0 |        0 |        0
+ 20 |     0 |     0 |     0 |       0 |       0 |       1 |       0 |       0 |       0 |       0 |       0 |       0 |        0 |        0
+(20 rows)
+</pre> View the dictionary table that defines the numerical columns in the output table: <pre class="example">
+SELECT * FROM abalone_out_dictionary ORDER BY encoded_column_name;
+</pre> <pre class="result">
+ encoded_column_name | index | variable | value
+---------------------+-------+----------+-------
+ "rings_1"           |     1 | rings    | 7
+ "rings_10"          |    10 | rings    | 19
+ "rings_11"          |    11 | rings    | 20
+ "rings_2"           |     2 | rings    | 8
+ "rings_3"           |     3 | rings    | 9
+ "rings_4"           |     4 | rings    | 10
+ "rings_5"           |     5 | rings    | 11
+ "rings_6"           |     6 | rings    | 12
+ "rings_7"           |     7 | rings    | 14
+ "rings_8"           |     8 | rings    | 15
+ "rings_9"           |     9 | rings    | 16
+ "sex_1"             |     1 | sex      | F
+ "sex_2"             |     2 | sex      | I
+ "sex_3"             |     3 | sex      | M
+(14 rows)
+</pre></li>
+<li>We can chose from various distribution policies of the output table, for examply RANDOMLY: <pre class="example">
+DROP TABLE IF EXISTS abalone_out, abalone_out_dictionary;
+SELECT madlib.encode_categorical_variables (
+        'abalone',                   -- Source table
+        'abalone_out',               -- Output table
+        '*',                         -- Categorical columns
+        NULL,                        -- Categorical columns to exclude
+        'id',                        -- Index columns
+        NULL,                        -- Top values
+        NULL,                        -- Value to drop for dummy encoding
+        NULL,                        -- Encode nulls
+        NULL,                        -- Output type
+        NULL,                        -- Dictionary output
+        'RANDOMLY'                   -- Distribution policy
+        );
+SELECT * FROM abalone_out ORDER BY id;
+</pre> <pre class="result">
+ id | sex_F | sex_I | sex_M | rings_10 | rings_11 | rings_12 | rings_14 | rings_15 | rings_16 | rings_19 | rings_20 | rings_7 | rings_8 | rings_9
+----+-------+-------+-------+----------+----------+----------+----------+----------+----------+----------+----------+---------+---------+---------
+  1 |     0 |     0 |     1 |        0 |        0 |        0 |        0 |        1 |        0 |        0 |        0 |       0 |       0 |       0
+  2 |     0 |     0 |     1 |        0 |        0 |        0 |        0 |        0 |        0 |        0 |        0 |       1 |       0 |       0
+  3 |     1 |     0 |     0 |        0 |        0 |        0 |        0 |        0 |        0 |        0 |        0 |       0 |       0 |       1
+  4 |     0 |     0 |     1 |        1 |        0 |        0 |        0 |        0 |        0 |        0 |        0 |       0 |       0 |       0
+  5 |     0 |     1 |     0 |        0 |        0 |        0 |        0 |        0 |        0 |        0 |        0 |       1 |       0 |       0
+  6 |     0 |     1 |     0 |        0 |        0 |        0 |        0 |        0 |        0 |        0 |        0 |       0 |       1 |       0
+  7 |     1 |     0 |     0 |        0 |        0 |        0 |        0 |        0 |        0 |        0 |        1 |       0 |       0 |       0
+  8 |     1 |     0 |     0 |        0 |        0 |        0 |        0 |        0 |        1 |        0 |        0 |       0 |       0 |       0
+  9 |     0 |     0 |     1 |        0 |        0 |        0 |        0 |        0 |        0 |        0 |        0 |       0 |       0 |       1
+ 10 |     0 |     0 |     0 |        0 |        0 |        0 |        0 |        0 |        0 |        1 |        0 |       0 |       0 |       0
+ 11 |     1 |     0 |     0 |        0 |        0 |        0 |        1 |        0 |        0 |        0 |        0 |       0 |       0 |       0
+ 12 |     0 |     0 |     1 |        1 |        0 |        0 |        0 |        0 |        0 |        0 |        0 |       0 |       0 |       0
+ 13 |     0 |     0 |     1 |        0 |        1 |        0 |        0 |        0 |        0 |        0 |        0 |       0 |       0 |       0
+ 14 |     1 |     0 |     0 |        1 |        0 |        0 |        0 |        0 |        0 |        0 |        0 |       0 |       0 |       0
+ 15 |     1 |     0 |     0 |        1 |        0 |        0 |        0 |        0 |        0 |        0 |        0 |       0 |       0 |       0
+ 16 |     0 |     0 |     1 |        0 |        0 |        1 |        0 |        0 |        0 |        0 |        0 |       0 |       0 |       0
+ 17 |     0 |     1 |     0 |        0 |        0 |        0 |        0 |        0 |        0 |        0 |        0 |       1 |       0 |       0
+ 18 |     1 |     0 |     0 |        1 |        0 |        0 |        0 |        0 |        0 |        0 |        0 |       0 |       0 |       0
+ 19 |     0 |     0 |     1 |        0 |        0 |        0 |        0 |        0 |        0 |        0 |        0 |       1 |       0 |       0
+ 20 |     0 |     0 |     0 |        0 |        0 |        0 |        0 |        0 |        0 |        0 |        0 |       0 |       0 |       1
+(20 rows)
+</pre></li>
+<li>If you have a reason to encode FLOAT variables, you can cast them as TEXT in the following way within the function call: <pre class="example">
+DROP TABLE IF EXISTS abalone_out, abalone_out_dictionary;
+SELECT madlib.encode_categorical_variables (
+        'abalone',                   -- Source table
+        'abalone_out',               -- Output table
+        'height::TEXT'               -- Categorical columns
+        );
+SELECT * FROM abalone_out ORDER BY id;
+</pre> <pre class="result">
+id | sex | length | diameter | height | rings | height::TEXT_0.08 | height::TEXT_0.085 | height::TEXT_0.09 | height::TEXT_0.095 | height::TEXT_0.1 | height::TEXT_0.11 | height::TEXT_0.125 | height::TEXT_0.13 | height::TEXT_0.135 | height::TEXT_0.14 | height::TEXT_0.145 | height::TEXT_0.15
+----+-----+--------+----------+--------+-------+-------------------+--------------------+-------------------+--------------------+------------------+-------------------+--------------------+-------------------+--------------------+-------------------+--------------------+-------------------
+  1 | M   |  0.455 |    0.365 |  0.095 |    15 |                 0 |                  0 |                 0 |                  1 |                0 |                 0 |                  0 |                 0 |                  0 |                 0 |                  0 |                 0
+  2 | M   |   0.35 |    0.265 |   0.09 |     7 |                 0 |                  0 |                 1 |                  0 |                0 |                 0 |                  0 |                 0 |                  0 |                 0 |                  0 |                 0
+  3 | F   |   0.53 |     0.42 |  0.135 |     9 |                 0 |                  0 |                 0 |                  0 |                0 |                 0 |                  0 |                 0 |                  1 |                 0 |                  0 |                 0
+  4 | M   |   0.44 |    0.365 |  0.125 |    10 |                 0 |                  0 |                 0 |                  0 |                0 |                 0 |                  1 |                 0 |                  0 |                 0 |                  0 |                 0
+  5 | I   |   0.33 |    0.255 |   0.08 |     7 |                 1 |                  0 |                 0 |                  0 |                0 |                 0 |                  0 |                 0 |                  0 |                 0 |                  0 |                 0
+  6 | I   |  0.425 |      0.3 |  0.095 |     8 |                 0 |                  0 |                 0 |                  1 |                0 |                 0 |                  0 |                 0 |                  0 |                 0 |                  0 |                 0
+  7 | F   |   0.53 |    0.415 |   0.15 |    20 |                 0 |                  0 |                 0 |                  0 |                0 |                 0 |                  0 |                 0 |                  0 |                 0 |                  0 |                 1
+  8 | F   |  0.545 |    0.425 |  0.125 |    16 |                 0 |                  0 |                 0 |                  0 |                0 |                 0 |                  1 |                 0 |                  0 |                 0 |                  0 |                 0
+  9 | M   |  0.475 |     0.37 |  0.125 |     9 |                 0 |                  0 |                 0 |                  0 |                0 |                 0 |                  1 |                 0 |                  0 |                 0 |                  0 |                 0
+ 10 |     |   0.55 |     0.44 |   0.15 |    19 |                 0 |                  0 |                 0 |                  0 |                0 |                 0 |                  0 |                 0 |                  0 |                 0 |                  0 |                 1
+ 11 | F   |  0.525 |     0.38 |   0.14 |    14 |                 0 |                  0 |                 0 |                  0 |                0 |                 0 |                  0 |                 0 |                  0 |                 1 |                  0 |                 0
+ 12 | M   |   0.43 |     0.35 |   0.11 |    10 |                 0 |                  0 |                 0 |                  0 |                0 |                 1 |                  0 |                 0 |                  0 |                 0 |                  0 |                 0
+ 13 | M   |   0.49 |     0.38 |  0.135 |    11 |                 0 |                  0 |                 0 |                  0 |                0 |                 0 |                  0 |                 0 |                  1 |                 0 |                  0 |                 0
+ 14 | F   |  0.535 |    0.405 |  0.145 |    10 |                 0 |                  0 |                 0 |                  0 |                0 |                 0 |                  0 |                 0 |                  0 |                 0 |                  1 |                 0
+ 15 | F   |   0.47 |    0.355 |    0.1 |    10 |                 0 |                  0 |                 0 |                  0 |                1 |                 0 |                  0 |                 0 |                  0 |                 0 |                  0 |                 0
+ 16 | M   |    0.5 |      0.4 |   0.13 |    12 |                 0 |                  0 |                 0 |                  0 |                0 |                 0 |                  0 |                 1 |                  0 |                 0 |                  0 |                 0
+ 17 | I   |  0.355 |     0.28 |  0.085 |     7 |                 0 |                  1 |                 0 |                  0 |                0 |                 0 |                  0 |                 0 |                  0 |                 0 |                  0 |                 0
+ 18 | F   |   0.44 |     0.34 |    0.1 |    10 |                 0 |                  0 |                 0 |                  0 |                1 |                 0 |                  0 |                 0 |                  0 |                 0 |                  0 |                 0
+ 19 | M   |  0.365 |    0.295 |   0.08 |     7 |                 1 |                  0 |                 0 |                  0 |                0 |                 0 |                  0 |                 0 |                  0 |                 0 |                  0 |                 0
+ 20 |     |   0.45 |     0.32 |    0.1 |     9 |                 0 |                  0 |                 0 |                  0 |                1 |                 0 |                  0 |                 0 |                  0 |                 0 |                  0 |                 0
+(20 rows)
+</pre></li>
+<li>You can also use a logical expression in the categorical columns, which will be passed as boolean, and in the output table there will be two columns with name logical_expression_true and logical_expression_false: <pre class="example">
+DROP TABLE IF EXISTS abalone_out, abalone_out_dictionary;
+SELECT madlib.encode_categorical_variables (
+        'abalone',                   -- Source table
+        'abalone_out',               -- Output table
+        'height&gt;.10'                 -- Categorical columns
+        );
+SELECT * FROM abalone_out ORDER BY id;
+</pre> <pre class="result">
+ id | sex | length | diameter | height | rings | height&gt;.10_false | height&gt;.10_true
+----+-----+--------+----------+--------+-------+------------------+-----------------
+  1 | M   |  0.455 |    0.365 |  0.095 |    15 |                1 |               0
+  2 | M   |   0.35 |    0.265 |   0.09 |     7 |                1 |               0
+  3 | F   |   0.53 |     0.42 |  0.135 |     9 |                0 |               1
+  4 | M   |   0.44 |    0.365 |  0.125 |    10 |                0 |               1
+  5 | I   |   0.33 |    0.255 |   0.08 |     7 |                1 |               0
+  6 | I   |  0.425 |      0.3 |  0.095 |     8 |                1 |               0
+  7 | F   |   0.53 |    0.415 |   0.15 |    20 |                0 |               1
+  8 | F   |  0.545 |    0.425 |  0.125 |    16 |                0 |               1
+  9 | M   |  0.475 |     0.37 |  0.125 |     9 |                0 |               1
+ 10 |     |   0.55 |     0.44 |   0.15 |    19 |                0 |               1
+ 11 | F   |  0.525 |     0.38 |   0.14 |    14 |                0 |               1
+ 12 | M   |   0.43 |     0.35 |   0.11 |    10 |                0 |               1
+ 13 | M   |   0.49 |     0.38 |  0.135 |    11 |                0 |               1
+ 14 | F   |  0.535 |    0.405 |  0.145 |    10 |                0 |               1
+ 15 | F   |   0.47 |    0.355 |    0.1 |    10 |                1 |               0
+ 16 | M   |    0.5 |      0.4 |   0.13 |    12 |                0 |               1
+ 17 | I   |  0.355 |     0.28 |  0.085 |     7 |                1 |               0
+ 18 | F   |   0.44 |     0.34 |    0.1 |    10 |                1 |               0
+ 19 | M   |  0.365 |    0.295 |   0.08 |     7 |                1 |               0
+ 20 |     |   0.45 |     0.32 |    0.1 |     9 |                1 |               0
+(20 rows)
+</pre></li>
+</ol>
+<p><a class="anchor" id="literature"></a></p><dl class="section user"><dt>Literature</dt><dd></dd></dl>
+<p><a class="anchor" id="svm-lit-1"></a>[1] <a href="https://en.wikipedia.org/wiki/Categorical_variable">https://en.wikipedia.org/wiki/Categorical_variable</a></p>
+<p>[2] <a href="https://archive.ics.uci.edu/ml/datasets/Abalone">https://archive.ics.uci.edu/ml/datasets/Abalone</a> </p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__fmsketch.html b/docs/rc/group__grp__fmsketch.html
new file mode 100644
index 0000000..cf32052
--- /dev/null
+++ b/docs/rc/group__grp__fmsketch.html
@@ -0,0 +1,167 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: FM (Flajolet-Martin)</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__fmsketch.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">FM (Flajolet-Martin)<div class="ingroups"><a class="el" href="group__grp__stats.html">Statistics</a> &raquo; <a class="el" href="group__grp__desc__stats.html">Descriptive Statistics</a> &raquo; <a class="el" href="group__grp__sketches.html">Cardinality Estimators</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li>
+<a href="#syntax">Syntax</a> </li>
+<li>
+<a href="#examples">Examples</a> </li>
+<li>
+<a href="#literature">Literature</a> </li>
+<li>
+<a href="#related">Related Topics</a> </li>
+</ul>
+</div><p><a class="el" href="sketch_8sql__in.html#ae27d5aaa5e4b426bcfe55e05a89c8e0b">fmsketch_dcount</a> can be run on a column of any type. It returns an approximation to the number of distinct values (a la <code>COUNT(DISTINCT x)</code>), but faster and approximate. Like any aggregate, it can be combined with a GROUP BY clause to do distinct counts per group.</p>
+<p><a class="anchor" id="syntax"></a></p><dl class="section user"><dt>Syntax</dt><dd></dd></dl>
+<p>Get the number of distinct values in a designated column. </p><pre class="syntax">
+fmsketch_dcount( col_name )
+</pre><dl class="section note"><dt>Note</dt><dd>This is a <a href="https://www.postgresql.org/docs/current/static/xaggr.html">User Defined Aggregate</a> which returns the results when used in a query. Use "CREATE TABLE AS ", with the UDA as subquery if the results are to be stored. This is unlike the usual MADlib stored procedure interface which places the results in a table instead of returning it.</dd></dl>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd><ol type="1">
+<li>Generate some data. <pre class="example">
+CREATE TABLE data(class INT, a1 INT);
+INSERT INTO data SELECT 1,1 FROM generate_series(1,10000);
+INSERT INTO data SELECT 1,2 FROM generate_series(1,15000);
+INSERT INTO data SELECT 1,3 FROM generate_series(1,10000);
+INSERT INTO data SELECT 2,5 FROM generate_series(1,1000);
+INSERT INTO data SELECT 2,6 FROM generate_series(1,1000);
+</pre></li>
+<li>Find the distinct number of values for each class. <pre class="example">
+SELECT class, fmsketch_dcount(a1)
+FROM data
+GROUP BY data.class;
+</pre> Result: <pre class="result">
+class | fmsketch_dcount
+&#160;------+-----------------
+    2 |               2
+    1 |               3
+(2 rows)
+</pre></li>
+</ol>
+</dd></dl>
+<p><a class="anchor" id="literature"></a></p><dl class="section user"><dt>Literature</dt><dd>[1] P. Flajolet and N.G. Martin. Probabilistic counting algorithms for data base applications, Journal of Computer and System Sciences 31(2), pp 182-209, 1985. <a href="http://algo.inria.fr/flajolet/Publications/FlMa85.pdf">http://algo.inria.fr/flajolet/Publications/FlMa85.pdf</a></dd></dl>
+<p><a class="anchor" id="related"></a></p><dl class="section user"><dt>Related Topics</dt><dd>File <a class="el" href="sketch_8sql__in.html" title="SQL functions for sketch-based approximations of descriptive statistics. ">sketch.sql_in</a> documenting the SQL function. </dd></dl>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__glm.html b/docs/rc/group__grp__glm.html
new file mode 100644
index 0000000..2c180a9
--- /dev/null
+++ b/docs/rc/group__grp__glm.html
@@ -0,0 +1,578 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Generalized Linear Models</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__glm.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Generalized Linear Models<div class="ingroups"><a class="el" href="group__grp__super.html">Supervised Learning</a> &raquo; <a class="el" href="group__grp__regml.html">Regression Models</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b><ul>
+<li class="level1">
+<a href="#train">Training Function</a> </li>
+<li class="level1">
+<a href="#predict">Prediction Function</a> </li>
+<li class="level1">
+<a href="#examples">Examples</a> </li>
+<li class="level1">
+<a href="#related">Related Topics</a> </li>
+</ul>
+</div><p>Generalized linear models extends ordinary linear regression by allowing the response variable to follow a more general set of distributions (rather than simply Gaussian distributions), and for a general family of functions of the response variable (the link function) to vary linearly with the predicted values (rather than assuming that the response itself must vary linearly).</p>
+<p>For example, data of counts would typically be modeled with a Poisson distribution and a log link, while binary outcomes would typically be modeled with a Bernoulli distribution (or binomial distribution, depending on exactly how the problem is phrased) and a log-odds (or logit) link function.</p>
+<p>Currently, the implemented distribution families are </p><center> <table class="doxtable">
+<tr>
+<th>Distribution Family </th><th>Link Functions  </th></tr>
+<tr>
+<td>Binomial </td><td>logit, probit  </td></tr>
+<tr>
+<td>Gamma </td><td>inverse, identity, log  </td></tr>
+<tr>
+<td>Gaussian </td><td>identity, inverse, log  </td></tr>
+<tr>
+<td>Inverse Gaussian </td><td>inverse of square, inverse, identity, log  </td></tr>
+<tr>
+<td>Poisson </td><td>log, identity, square-root<br />
+  </td></tr>
+</table>
+</center><p><a class="anchor" id="train"></a></p><dl class="section user"><dt>Training Function</dt><dd>GLM training function has the following format: <pre class="syntax">
+glm(source_table,
+    model_table,
+    dependent_varname,
+    independent_varname,
+    family_params,
+    grouping_col,
+    optim_params,
+    verbose
+    )
+</pre> <b>Arguments</b> <dl class="arglist">
+<dt>source_table </dt>
+<dd><p class="startdd">TEXT. The name of the table containing the training data.</p>
+<p class="enddd"></p>
+</dd>
+<dt>model_table </dt>
+<dd><p class="startdd">TEXT. Name of the generated table containing the model.</p>
+<p>The model table produced by glm contains the following columns:</p>
+<table class="output">
+<tr>
+<th>&lt;...&gt; </th><td><p class="starttd">Text. Grouping columns, if provided in input. This could be multiple columns depending on the <code>grouping_col</code> input. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>coef </th><td><p class="starttd">FLOAT8. Vector of the coefficients in linear predictor. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>log_likelihood </th><td><p class="starttd">FLOAT8. The log-likelihood \( l(\boldsymbol \beta) \). We use the maximum likelihood estimate of dispersion parameter to calculate the log-likelihood while R and Python use deviance estimate and Pearson estimate respectively. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>std_err </th><td><p class="starttd">FLOAT8[]. Vector of the standard error of the coefficients. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>z_stats or t_stats </th><td><p class="starttd">FLOAT8[]. Vector of the z-statistics (in Poisson distribtuion and Binomial distribution) or the t-statistics (in all other distributions) of the coefficients. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>p_values </th><td><p class="starttd">FLOAT8[]. Vector of the p-values of the coefficients. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>dispersion </th><td><p class="starttd">FLOAT8. The dispersion value (Pearson estimate). When family=poisson or family=binomial, the dispersion is always 1. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>num_rows_processed </th><td><p class="starttd">BIGINT. Numbers of rows processed. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>num_rows_skipped </th><td><p class="starttd">BIGINT. Numbers of rows skipped due to missing values or failures. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>num_iterations </th><td>INTEGER. The number of iterations actually completed. This would be different from the <code>nIterations</code> argument if a <code>tolerance</code> parameter is provided and the algorithm converges before all iterations are completed.  </td></tr>
+</table>
+<p>A summary table named &lt;model_table&gt;_summary is also created at the same time, which has the following columns: </p><table class="output">
+<tr>
+<th>method </th><td><p class="starttd">'glm' </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>source_table </th><td><p class="starttd">The data source table name. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>model_table </th><td><p class="starttd">The model table name. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>dependent_varname </th><td><p class="starttd">The dependent variable. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>independent_varname </th><td><p class="starttd">The independent variables </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>family_params </th><td><p class="starttd">A string that contains family parameters, and has the form of 'family=..., link=...' </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>grouping_col </th><td><p class="starttd">Name of grouping columns. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>optimizer_params </th><td><p class="starttd">A string that contains optimizer parameters, and has the form of 'optimizer=..., max_iter=..., tolerance=...' </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>num_all_groups </th><td><p class="starttd">Number of groups in glm training. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>num_failed_groups </th><td><p class="starttd">Number of failed groups in glm training. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>total_rows_processed </th><td><p class="starttd">BIGINT. Total numbers of rows processed in all groups. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>total_rows_skipped </th><td><p class="starttd">BIGINT. Total numbers of rows skipped in all groups due to missing values or failures. </p>
+<p class="endtd"></p>
+</td></tr>
+</table>
+<p class="enddd"></p>
+</dd>
+<dt>dependent_varname </dt>
+<dd><p class="startdd">TEXT. Name of the dependent variable column.</p>
+<p class="enddd"></p>
+</dd>
+<dt>independent_varname </dt>
+<dd><p class="startdd">TEXT. Expression list to evaluate for the independent variables. An intercept variable is not assumed. It is common to provide an explicit intercept term by including a single constant <code>1</code> term in the independent variable list.</p>
+<p class="enddd"></p>
+</dd>
+<dt>family_params (optional) </dt>
+<dd><p class="startdd">TEXT, Parameters for distribution family. Currently, we support</p>
+<p>(1) family=poisson and link=[log or identity or sqrt].</p>
+<p>(2) family=gaussian and link=[identity or log or inverse]. And when family=gaussian and link=identity, the GLM model is exactly the same as the linear regression.</p>
+<p>(3) family=gamma and link=[inverse or identity or log].</p>
+<p>(4) family=inverse_gaussian and link=[sqr_inverse or log or identity or inverse].</p>
+<p>(5) family=binomial and link=[probit or logit]. </p>
+<p class="enddd"></p>
+</dd>
+<dt>grouping_col (optional) </dt>
+<dd><p class="startdd">TEXT, default: NULL. An expression list used to group the input dataset into discrete groups, running one regression per group. Similar to the SQL "GROUP BY" clause. When this value is NULL, no grouping is used and a single model is generated.</p>
+<p class="enddd"></p>
+</dd>
+<dt>optim_params (optional) </dt>
+<dd><p class="startdd">TEXT, default: 'max_iter=100,optimizer=irls,tolerance=1e-6'. Parameters for optimizer. Currently, we support tolerance=[tolerance for relative error between log-likelihoods], max_iter=[maximum iterations to run], optimizer=irls.</p>
+<p class="enddd"></p>
+</dd>
+<dt>verbose (optional) </dt>
+<dd>BOOLEAN, default: FALSE. Provides verbose output of the results of training. </dd>
+</dl>
+</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>For p-values, we just return the computation result directly. Other statistical packages, like 'R', produce the same result, but on printing the result to screen, another format function is used and any p-value that is smaller than the machine epsilon (the smallest positive floating-point number 'x' such that '1 + x != 1') will be printed on screen as "&lt; xxx" (xxx is the value of the machine epsilon). Although the results may look different, they are in fact the same. </dd></dl>
+<p><a class="anchor" id="predict"></a></p><dl class="section user"><dt>Prediction Function</dt><dd>The prediction function is provided to estimate the conditional mean given a new predictor. It has the following syntax: <pre class="syntax">
+glm_predict(coef,
+            col_ind_var
+            link)
+</pre></dd></dl>
+<p><b>Arguments</b> </p><dl class="arglist">
+<dt>coef </dt>
+<dd><p class="startdd">DOUBLE PRECISION[]. Model coefficients obtained from <a class="el" href="glm_8sql__in.html#a3f8eb219013e05675626acb8cf4612cc">glm()</a>.</p>
+<p class="enddd"></p>
+</dd>
+<dt>col_ind_var </dt>
+<dd><p class="startdd">New predictor, as a DOUBLE array. This should be the same length as the array obtained by evaluation of the 'independent_varname' argument in <a class="el" href="glm_8sql__in.html#a3f8eb219013e05675626acb8cf4612cc">glm()</a>.</p>
+<p class="enddd"></p>
+</dd>
+<dt>link </dt>
+<dd>link function, as a string. This should match the link function the user inputted in <a class="el" href="glm_8sql__in.html#a3f8eb219013e05675626acb8cf4612cc">glm()</a>. </dd>
+</dl>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd><ol type="1">
+<li>Create the training data table. <pre class="example">
+CREATE TABLE warpbreaks(
+    id      serial,
+    breaks  integer,
+    wool    char(1),
+    tension char(1)
+);
+INSERT INTO warpbreaks(breaks, wool, tension) VALUES
+(26, 'A', 'L'),
+(30, 'A', 'L'),
+(54, 'A', 'L'),
+(25, 'A', 'L'),
+(70, 'A', 'L'),
+(52, 'A', 'L'),
+(51, 'A', 'L'),
+(26, 'A', 'L'),
+(67, 'A', 'L'),
+(18, 'A', 'M'),
+(21, 'A', 'M'),
+(29, 'A', 'M'),
+(17, 'A', 'M'),
+(12, 'A', 'M'),
+(18, 'A', 'M'),
+(35, 'A', 'M'),
+(30, 'A', 'M'),
+(36, 'A', 'M'),
+(36, 'A', 'H'),
+(21, 'A', 'H'),
+(24, 'A', 'H'),
+(18, 'A', 'H'),
+(10, 'A', 'H'),
+(43, 'A', 'H'),
+(28, 'A', 'H'),
+(15, 'A', 'H'),
+(26, 'A', 'H'),
+(27, 'B', 'L'),
+(14, 'B', 'L'),
+(29, 'B', 'L'),
+(19, 'B', 'L'),
+(29, 'B', 'L'),
+(31, 'B', 'L'),
+(41, 'B', 'L'),
+(20, 'B', 'L'),
+(44, 'B', 'L'),
+(42, 'B', 'M'),
+(26, 'B', 'M'),
+(19, 'B', 'M'),
+(16, 'B', 'M'),
+(39, 'B', 'M'),
+(28, 'B', 'M'),
+(21, 'B', 'M'),
+(39, 'B', 'M'),
+(29, 'B', 'M'),
+(20, 'B', 'H'),
+(21, 'B', 'H'),
+(24, 'B', 'H'),
+(17, 'B', 'H'),
+(13, 'B', 'H'),
+(15, 'B', 'H'),
+(15, 'B', 'H'),
+(16, 'B', 'H'),
+(28, 'B', 'H');
+SELECT create_indicator_variables('warpbreaks', 'warpbreaks_dummy', 'wool,tension');
+</pre></li>
+<li>Train a GLM model. <pre class="example">
+SELECT glm('warpbreaks_dummy',
+           'glm_model',
+           'breaks',
+           'ARRAY[1.0,"wool_B","tension_M", "tension_H"]',
+           'family=poisson, link=log');
+</pre></li>
+<li>View the regression results. <pre class="example">
+-- Set extended display on for easier reading of output
+\x on
+SELECT * FROM glm_model;
+</pre> Result: <pre class="result">
+coef               | {3.69196314494079,-0.205988442638621,-0.321320431600611,-0.51848849651156}
+log_likelihood     | -242.527983208979
+std_err            | {0.04541079434248,0.0515712427835191,0.0602659166951256,0.0639595193956924}
+z_stats            | {81.3014438174473,-3.99425011926316,-5.3317106786264,-8.10651020224019}
+p_values           | {0,6.48993254938271e-05,9.72918600322907e-08,5.20943463005751e-16}
+num_rows_processed | 54
+num_rows_skipped   | 0
+iteration          | 5
+</pre> Alternatively, unnest the arrays in the results for easier reading of output: <pre class="example">
+\x off
+SELECT unnest(coef) as coefficient,
+       unnest(std_err) as standard_error,
+       unnest(z_stats) as z_stat,
+       unnest(p_values) as pvalue
+FROM glm_model;
+</pre></li>
+<li>Predicting dependent variable using GLM model. (This example uses the original data table to perform the prediction. Typically a different test dataset with the same features as the original training dataset would be used for prediction.) <pre class="example">
+\x off
+-- Display predicted mean value on the original dataset
+SELECT
+    w.id,
+    madlib.glm_predict(
+        coef,
+        ARRAY[1, "wool_B", "tension_M", "tension_H"]::float8[],
+        'log') AS mu
+FROM warpbreaks_dummy w, glm_model m
+ORDER BY w.id;
+</pre> <pre class="example">
+-- Display predicted counts (which are predicted mean values rounded to the nearest integral value) on the original dataset
+SELECT
+    w.id,
+    madlib.glm_predict_poisson(
+        coef,
+        ARRAY[1, "wool_B", "tension_M", "tension_H"]::float8[],
+        'log') AS poisson_count
+FROM warpbreaks_dummy w, glm_model m
+ORDER BY w.id;
+</pre></li>
+</ol>
+</dd></dl>
+<p><b>Example for Gaussian family:</b></p>
+<ol type="1">
+<li>Create a testing data table <pre class="example">
+CREATE TABLE abalone (
+    id integer,
+    sex text,
+    length double precision,
+    diameter double precision,
+    height double precision,
+    whole double precision,
+    shucked double precision,
+    viscera double precision,
+    shell double precision,
+    rings integer
+);
+INSERT INTO abalone VALUES
+(3151, 'F', 0.655000000000000027, 0.505000000000000004, 0.165000000000000008, 1.36699999999999999, 0.583500000000000019, 0.351499999999999979, 0.396000000000000019, 10),
+(2026, 'F', 0.550000000000000044, 0.469999999999999973, 0.149999999999999994, 0.920499999999999985, 0.381000000000000005, 0.243499999999999994, 0.267500000000000016, 10),
+(3751, 'I', 0.434999999999999998, 0.375, 0.110000000000000001, 0.41549999999999998, 0.170000000000000012, 0.0759999999999999981, 0.14499999999999999, 8),
+(720, 'I', 0.149999999999999994, 0.100000000000000006, 0.0250000000000000014, 0.0149999999999999994, 0.00449999999999999966, 0.00400000000000000008, 0.0050000000000000001, 2),
+(1635, 'F', 0.574999999999999956, 0.469999999999999973, 0.154999999999999999, 1.1160000000000001, 0.509000000000000008, 0.237999999999999989, 0.340000000000000024, 10),
+(2648, 'I', 0.5, 0.390000000000000013, 0.125, 0.582999999999999963, 0.293999999999999984, 0.132000000000000006, 0.160500000000000004, 8),
+(1796, 'F', 0.57999999999999996, 0.429999999999999993, 0.170000000000000012, 1.47999999999999998, 0.65349999999999997, 0.32400000000000001, 0.41549999999999998, 10),
+(209, 'F', 0.525000000000000022, 0.41499999999999998, 0.170000000000000012, 0.832500000000000018, 0.275500000000000023, 0.168500000000000011, 0.309999999999999998, 13),
+(1451, 'I', 0.455000000000000016, 0.33500000000000002, 0.135000000000000009, 0.501000000000000001, 0.274000000000000021, 0.0995000000000000051, 0.106499999999999997, 7),
+(1108, 'I', 0.510000000000000009, 0.380000000000000004, 0.115000000000000005, 0.515499999999999958, 0.214999999999999997, 0.113500000000000004, 0.166000000000000009, 8),
+(3675, 'F', 0.594999999999999973, 0.450000000000000011, 0.165000000000000008, 1.08099999999999996, 0.489999999999999991, 0.252500000000000002, 0.279000000000000026, 12),
+(2108, 'F', 0.675000000000000044, 0.550000000000000044, 0.179999999999999993, 1.68849999999999989, 0.562000000000000055, 0.370499999999999996, 0.599999999999999978, 15),
+(3312, 'F', 0.479999999999999982, 0.380000000000000004, 0.135000000000000009, 0.507000000000000006, 0.191500000000000004, 0.13650000000000001, 0.154999999999999999, 12),
+(882, 'M', 0.655000000000000027, 0.520000000000000018, 0.165000000000000008, 1.40949999999999998, 0.585999999999999965, 0.290999999999999981, 0.405000000000000027, 9),
+(3402, 'M', 0.479999999999999982, 0.395000000000000018, 0.149999999999999994, 0.681499999999999995, 0.214499999999999996, 0.140500000000000014, 0.2495, 18),
+(829, 'I', 0.409999999999999976, 0.325000000000000011, 0.100000000000000006, 0.394000000000000017, 0.20799999999999999, 0.0655000000000000027, 0.105999999999999997, 6),
+(1305, 'M', 0.535000000000000031, 0.434999999999999998, 0.149999999999999994, 0.716999999999999971, 0.347499999999999976, 0.14449999999999999, 0.194000000000000006, 9),
+(3613, 'M', 0.599999999999999978, 0.46000000000000002, 0.179999999999999993, 1.1399999999999999, 0.422999999999999987, 0.257500000000000007, 0.364999999999999991, 10),
+(1068, 'I', 0.340000000000000024, 0.265000000000000013, 0.0800000000000000017, 0.201500000000000012, 0.0899999999999999967, 0.0475000000000000006, 0.0550000000000000003, 5),
+(2446, 'M', 0.5, 0.380000000000000004, 0.135000000000000009, 0.583500000000000019, 0.22950000000000001, 0.126500000000000001, 0.179999999999999993, 12),
+(1393, 'M', 0.635000000000000009, 0.474999999999999978, 0.170000000000000012, 1.19350000000000001, 0.520499999999999963, 0.269500000000000017, 0.366499999999999992, 10),
+(359, 'M', 0.744999999999999996, 0.584999999999999964, 0.214999999999999997, 2.49900000000000011, 0.92649999999999999, 0.471999999999999975, 0.699999999999999956, 17),
+(549, 'F', 0.564999999999999947, 0.450000000000000011, 0.160000000000000003, 0.79500000000000004, 0.360499999999999987, 0.155499999999999999, 0.23000000000000001, 12),
+(1154, 'F', 0.599999999999999978, 0.474999999999999978, 0.160000000000000003, 1.02649999999999997, 0.484999999999999987, 0.2495, 0.256500000000000006, 9),
+(1790, 'F', 0.54500000000000004, 0.385000000000000009, 0.149999999999999994, 1.11850000000000005, 0.542499999999999982, 0.244499999999999995, 0.284499999999999975, 9),
+(3703, 'F', 0.665000000000000036, 0.540000000000000036, 0.195000000000000007, 1.76400000000000001, 0.850500000000000034, 0.361499999999999988, 0.469999999999999973, 11),
+(1962, 'F', 0.655000000000000027, 0.515000000000000013, 0.179999999999999993, 1.41199999999999992, 0.619500000000000051, 0.248499999999999999, 0.496999999999999997, 11),
+(1665, 'I', 0.604999999999999982, 0.469999999999999973, 0.14499999999999999, 0.802499999999999991, 0.379000000000000004, 0.226500000000000007, 0.220000000000000001, 9),
+(635, 'M', 0.359999999999999987, 0.294999999999999984, 0.100000000000000006, 0.210499999999999993, 0.0660000000000000031, 0.0524999999999999981, 0.0749999999999999972, 9),
+(3901, 'M', 0.445000000000000007, 0.344999999999999973, 0.140000000000000013, 0.475999999999999979, 0.205499999999999988, 0.101500000000000007, 0.108499999999999999, 15),
+(2734, 'I', 0.41499999999999998, 0.33500000000000002, 0.100000000000000006, 0.357999999999999985, 0.169000000000000011, 0.067000000000000004, 0.104999999999999996, 7),
+(3856, 'M', 0.409999999999999976, 0.33500000000000002, 0.115000000000000005, 0.440500000000000003, 0.190000000000000002, 0.0850000000000000061, 0.135000000000000009, 8),
+(827, 'I', 0.395000000000000018, 0.28999999999999998, 0.0950000000000000011, 0.303999999999999992, 0.127000000000000002, 0.0840000000000000052, 0.076999999999999999, 6),
+(3381, 'I', 0.190000000000000002, 0.130000000000000004, 0.0449999999999999983, 0.0264999999999999993, 0.00899999999999999932, 0.0050000000000000001, 0.00899999999999999932, 5),
+(3972, 'I', 0.400000000000000022, 0.294999999999999984, 0.0950000000000000011, 0.252000000000000002, 0.110500000000000001, 0.0575000000000000025, 0.0660000000000000031, 6),
+(1155, 'M', 0.599999999999999978, 0.455000000000000016, 0.170000000000000012, 1.1915, 0.695999999999999952, 0.239499999999999991, 0.239999999999999991, 8),
+(3467, 'M', 0.640000000000000013, 0.5, 0.170000000000000012, 1.4544999999999999, 0.642000000000000015, 0.357499999999999984, 0.353999999999999981, 9),
+(2433, 'F', 0.609999999999999987, 0.484999999999999987, 0.165000000000000008, 1.08699999999999997, 0.425499999999999989, 0.232000000000000012, 0.380000000000000004, 11),
+(552, 'I', 0.614999999999999991, 0.489999999999999991, 0.154999999999999999, 0.988500000000000045, 0.41449999999999998, 0.195000000000000007, 0.344999999999999973, 13),
+(1425, 'F', 0.729999999999999982, 0.57999999999999996, 0.190000000000000002, 1.73750000000000004, 0.678499999999999992, 0.434499999999999997, 0.520000000000000018, 11),
+(2402, 'F', 0.584999999999999964, 0.41499999999999998, 0.154999999999999999, 0.69850000000000001, 0.299999999999999989, 0.145999999999999991, 0.195000000000000007, 12),
+(1748, 'F', 0.699999999999999956, 0.535000000000000031, 0.174999999999999989, 1.77299999999999991, 0.680499999999999994, 0.479999999999999982, 0.512000000000000011, 15),
+(3983, 'I', 0.57999999999999996, 0.434999999999999998, 0.149999999999999994, 0.891499999999999959, 0.362999999999999989, 0.192500000000000004, 0.251500000000000001, 6),
+(335, 'F', 0.739999999999999991, 0.599999999999999978, 0.195000000000000007, 1.97399999999999998, 0.597999999999999976, 0.408499999999999974, 0.709999999999999964, 16),
+(1587, 'I', 0.515000000000000013, 0.349999999999999978, 0.104999999999999996, 0.474499999999999977, 0.212999999999999995, 0.122999999999999998, 0.127500000000000002, 10),
+(2448, 'I', 0.275000000000000022, 0.204999999999999988, 0.0800000000000000017, 0.096000000000000002, 0.0359999999999999973, 0.0184999999999999991, 0.0299999999999999989, 6),
+(1362, 'F', 0.604999999999999982, 0.474999999999999978, 0.174999999999999989, 1.07600000000000007, 0.463000000000000023, 0.219500000000000001, 0.33500000000000002, 9),
+(2799, 'M', 0.640000000000000013, 0.484999999999999987, 0.149999999999999994, 1.09800000000000009, 0.519499999999999962, 0.222000000000000003, 0.317500000000000004, 10),
+(1413, 'F', 0.67000000000000004, 0.505000000000000004, 0.174999999999999989, 1.01449999999999996, 0.4375, 0.271000000000000019, 0.3745, 10),
+(1739, 'F', 0.67000000000000004, 0.540000000000000036, 0.195000000000000007, 1.61899999999999999, 0.739999999999999991, 0.330500000000000016, 0.465000000000000024, 11),
+(1152, 'M', 0.584999999999999964, 0.465000000000000024, 0.160000000000000003, 0.955500000000000016, 0.45950000000000002, 0.235999999999999988, 0.265000000000000013, 7),
+(2427, 'I', 0.564999999999999947, 0.434999999999999998, 0.154999999999999999, 0.782000000000000028, 0.271500000000000019, 0.16800000000000001, 0.284999999999999976, 14),
+(1777, 'M', 0.484999999999999987, 0.369999999999999996, 0.154999999999999999, 0.967999999999999972, 0.418999999999999984, 0.245499999999999996, 0.236499999999999988, 9),
+(3294, 'M', 0.574999999999999956, 0.455000000000000016, 0.184999999999999998, 1.15599999999999992, 0.552499999999999991, 0.242999999999999994, 0.294999999999999984, 13),
+(1403, 'M', 0.650000000000000022, 0.510000000000000009, 0.190000000000000002, 1.54200000000000004, 0.715500000000000025, 0.373499999999999999, 0.375, 9),
+(2256, 'M', 0.510000000000000009, 0.395000000000000018, 0.14499999999999999, 0.61850000000000005, 0.215999999999999998, 0.138500000000000012, 0.239999999999999991, 12),
+(3984, 'F', 0.584999999999999964, 0.450000000000000011, 0.125, 0.873999999999999999, 0.354499999999999982, 0.20749999999999999, 0.225000000000000006, 6),
+(1116, 'M', 0.525000000000000022, 0.405000000000000027, 0.119999999999999996, 0.755499999999999949, 0.3755, 0.155499999999999999, 0.201000000000000012, 9),
+(1366, 'M', 0.609999999999999987, 0.474999999999999978, 0.170000000000000012, 1.02649999999999997, 0.434999999999999998, 0.233500000000000013, 0.303499999999999992, 10),
+(3759, 'I', 0.525000000000000022, 0.400000000000000022, 0.140000000000000013, 0.605500000000000038, 0.260500000000000009, 0.107999999999999999, 0.209999999999999992, 9);
+</pre></li>
+<li>Train a model with family=gaussian and link=identity <pre class="example">
+SELECT madlib.glm(
+    'abalone',
+    'abalone_out',
+    'rings',
+    'ARRAY[1, length, diameter, height, whole, shucked, viscera, shell]',
+    'family=gaussian, link=identity');
+</pre></li>
+</ol>
+<p><b>Example for Gamma family:</b> (reuse the dataset in Gaussian case)</p>
+<ol type="1">
+<li>Reuse the test data set in Gaussian</li>
+<li>Train a model with family=gamma and link=inverse <pre class="example">
+SELECT madlib.glm(
+    'abalone',
+    'abalone_out',
+    'rings',
+    'ARRAY[1, length, diameter, height, whole, shucked, viscera, shell]',
+    'family=gamma, link=inverse');
+</pre></li>
+</ol>
+<p><b>Example for Inverse Gaussian family:</b> (reuse the dataset in Gaussian case)</p>
+<ol type="1">
+<li>Reuse the test data set in Gaussian</li>
+<li>Train a model with family=inverse_gaussian and link=sqr_inverse <pre class="example">
+SELECT madlib.glm(
+    'abalone',
+    'abalone_out',
+    'rings',
+    'ARRAY[1, length, diameter, height, whole, shucked, viscera, shell]',
+    'family=inverse_gaussian, link=sqr_inverse');
+</pre></li>
+</ol>
+<p><b>Example for Binomial family:</b> (reuse the dataset in Gaussian case)</p>
+<ol type="1">
+<li>Reuse the test data set in Gaussian</li>
+<li>Train a model with family=binomial and link=probit <pre class="example">
+SELECT madlib.glm(
+    'abalone',
+    'abalone_out',
+    'rings &lt; 10',
+    'ARRAY[1, length, diameter, height, whole, shucked, viscera, shell]',
+    'family=binomial, link=probit');
+</pre></li>
+<li>Predict output probabilities <pre class="example">
+SELECT madlib.glm_predict(
+    coef,
+    ARRAY[1, length, diameter, height, whole, shucked, viscera, shell]::float8[],
+    'probit')
+FROM abalone_out, abalone;
+</pre></li>
+<li>Predict output categories <pre class="example">
+SELECT madlib.glm_predict(
+SELECT madlib.glm_predict_binomial(
+    coef,
+    ARRAY[1, length, diameter, height, whole, shucked, viscera, shell]::float8[],
+    'probit')
+FROM abalone_out, abalone;
+</pre></li>
+</ol>
+<p><a class="anchor" id="notes"></a></p><dl class="section user"><dt>Notes</dt><dd>All table names can be optionally schema qualified (current_schemas() would be searched if a schema name is not provided) and all table and column names should follow case-sensitivity and quoting rules per the database. (For instance, 'mytable' and 'MyTable' both resolve to the same entity, i.e. 'mytable'. If mixed-case or multi-byte characters are desired for entity names then the string should be double-quoted; in this case the input would be '"MyTable"').</dd></dl>
+<p>Currently implementation uses Newton's method and, according to performance tests, when number of features are over 1000, this GLM function could be running slowly.</p>
+<p>Functions in <a class="el" href="group__grp__linreg.html">Linear Regression</a> is prefered to GLM with family=gaussian,link=identity, as the former require only a single pass over the training data. In addition, if user expects to use robust variance, clustered variance, or marginal effects on top of the trained model, functions in <a class="el" href="group__grp__linreg.html">Linear Regression</a> and <a class="el" href="group__grp__logreg.html">Logistic Regression</a> should be used.</p>
+<p><a class="anchor" id="related"></a></p><dl class="section user"><dt>Related Topics</dt><dd></dd></dl>
+<p>File <a class="el" href="glm_8sql__in.html" title="SQL functions for GLM (Poisson) ">glm.sql_in</a> documenting the training function</p>
+<p><a class="el" href="group__grp__linreg.html">Linear Regression</a></p>
+<p><a class="el" href="group__grp__logreg.html">Logistic Regression</a></p>
+<p><a class="el" href="group__grp__mlogreg.html">Multinomial Logistic Regression</a></p>
+<p><a class="el" href="group__grp__robust.html">Robust Variance</a></p>
+<p><a class="el" href="group__grp__clustered__errors.html">Clustered Variance</a></p>
+<p><a class="el" href="group__grp__validation.html">Cross Validation</a></p>
+<p><a class="el" href="group__grp__marginal.html">Marginal Effects</a></p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__gpu__configuration.html b/docs/rc/group__grp__gpu__configuration.html
new file mode 100644
index 0000000..4601a2b
--- /dev/null
+++ b/docs/rc/group__grp__gpu__configuration.html
@@ -0,0 +1,271 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: GPU Configuration</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__gpu__configuration.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">GPU Configuration<div class="ingroups"><a class="el" href="group__grp__early__stage.html">Early Stage Development</a> &raquo; <a class="el" href="group__grp__dl.html">Deep Learning</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<dl class="section warning"><dt>Warning</dt><dd><em> This MADlib method is still in early stage development. Interface and implementation are subject to change. </em></dd></dl>
+<div class="toc"><b>Contents</b><ul>
+<li class="level1">
+<a href="#get_gpu_config">GPU Configuration</a> </li>
+<li class="level1">
+<a href="#example">Examples</a> </li>
+<li class="level1">
+<a href="#references">References</a> </li>
+<li class="level1">
+<a href="#related">Related Topics</a> </li>
+</ul>
+</div><p>This utility function reports the number and type of GPUs attached to hosts on the database cluster. This can be useful when determining which segments to use for training deep neural nets. For example, for economic reasons you may wish to set up a heterogeneous clusters with GPUs only on some of the hosts, not all of them. This utility can help you identify where the GPUS are and direct the compute to those locations only in subsequent training and evaluation steps.</p>
+<p><a class="anchor" id="get_gpu_config"></a></p><dl class="section user"><dt>GPU Confuguration</dt><dd></dd></dl>
+<pre class="syntax">
+gpu_configuration( output_table,
+                   source
+                   )
+</pre><p> <b>Arguments</b> </p><dl class="arglist">
+<dt>output_table </dt>
+<dd><p class="startdd">TEXT. Name of the output table to write out the GPU information. </p>
+<p class="enddd"></p>
+</dd>
+<dt>source (optional) </dt>
+<dd><p class="startdd">TEXT, default: 'tensorflow'. Source for determining GPU configuration. Using 'tensorflow' returns a description based on what TensorFlow reports. Using 'nvidia' returns a description based on what the Nvidia Systems Management Interface (nvidia-smi) reports [1]. Note that MADlib and Keras will use the TensorFlow information; the lower level nvidia-smi info is provided for convenience.</p>
+<dl class="section note"><dt>Note</dt><dd>If the command 'nvidia-smi -L' returns an error, we do not pass through the error message, but instead will show no GPUs for that host in the output table. You may want to run nvidia-smi from the command line to see error and informational messages.</dd></dl>
+</dd>
+</dl>
+<p><b>Output</b> <br />
+ The output table contains the following: </p><table class="output">
+<tr>
+<th>hostname </th><td>TEXT. Name of the host machine in the cluster. Does not include master or mirrors. For PostgreSQL this will always return 'localhost'.   </td></tr>
+<tr>
+<th>gpu_descr </th><td>TEXT. String reported by TensorFlow or nvidia-smi. The formats are different and shown in the examples below.   </td></tr>
+</table>
+<p><a class="anchor" id="example"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<ol type="1">
+<li>Get GPU configuration as per TensorFlow: <pre class="example">
+DROP TABLE IF EXISTS host_gpu_mapping_tf;
+SELECT * FROM madlib.gpu_configuration('host_gpu_mapping_tf');
+SELECT * FROM host_gpu_mapping_tf ORDER BY hostname, gpu_descr;
+</pre> <pre class="result">
+ hostname |                                        gpu_descr
+----------+------------------------------------------------------------------------------------------
+ phoenix0 | device: 0, name: Tesla P100-PCIE-16GB, pci bus id: 0000:00:04.0, compute capability: 6.0
+ phoenix0 | device: 1, name: Tesla P100-PCIE-16GB, pci bus id: 0000:00:05.0, compute capability: 6.0
+ phoenix0 | device: 2, name: Tesla P100-PCIE-16GB, pci bus id: 0000:00:06.0, compute capability: 6.0
+ phoenix0 | device: 3, name: Tesla P100-PCIE-16GB, pci bus id: 0000:00:07.0, compute capability: 6.0
+ phoenix1 | device: 0, name: Tesla P100-PCIE-16GB, pci bus id: 0000:00:04.0, compute capability: 6.0
+ phoenix1 | device: 1, name: Tesla P100-PCIE-16GB, pci bus id: 0000:00:05.0, compute capability: 6.0
+ phoenix3 | device: 0, name: Tesla P100-PCIE-16GB, pci bus id: 0000:00:04.0, compute capability: 6.0
+ phoenix3 | device: 1, name: Tesla P100-PCIE-16GB, pci bus id: 0000:00:05.0, compute capability: 6.0
+ phoenix3 | device: 2, name: Tesla P100-PCIE-16GB, pci bus id: 0000:00:06.0, compute capability: 6.0
+ phoenix3 | device: 3, name: Tesla P100-PCIE-16GB, pci bus id: 0000:00:07.0, compute capability: 6.0
+ phoenix4 | device: 0, name: Tesla P100-PCIE-16GB, pci bus id: 0000:00:04.0, compute capability: 6.0
+ phoenix4 | device: 1, name: Tesla P100-PCIE-16GB, pci bus id: 0000:00:05.0, compute capability: 6.0
+ phoenix4 | device: 2, name: Tesla P100-PCIE-16GB, pci bus id: 0000:00:06.0, compute capability: 6.0
+ phoenix4 | device: 3, name: Tesla P100-PCIE-16GB, pci bus id: 0000:00:07.0, compute capability: 6.0
+(14 rows)
+</pre> In this heterogeneous cluster there are 4 GPUs attached to hosts 0, 3 and 4. There are 2 GPUs attached to host 1 and no GPUs attached to host 2.</li>
+<li>Get GPU configuration as per nvidia-smi: <pre class="example">
+DROP TABLE IF EXISTS host_gpu_mapping_nvidia;
+SELECT * FROM madlib.gpu_configuration('host_gpu_mapping_nvidia', -- output table
+                                       'nvidia'                   -- source for GPU info
+                                       );
+SELECT * FROM host_gpu_mapping_nvidia ORDER BY hostname, gpu_descr;
+</pre> <pre class="result">
+ hostname |                                  gpu_descr
+----------+------------------------------------------------------------------------------
+ phoenix0 | GPU 0: Tesla P100-PCIE-16GB (UUID: GPU-f2ccc77e-2501-f6ee-4754-069dda256fb2)
+ phoenix0 | GPU 1: Tesla P100-PCIE-16GB (UUID: GPU-b1fc40ca-c7c6-bc86-f20f-6e9a62cda3f8)
+ phoenix0 | GPU 2: Tesla P100-PCIE-16GB (UUID: GPU-d93bb21b-96f9-7c1d-3bab-cdd92b7bbc9d)
+ phoenix0 | GPU 3: Tesla P100-PCIE-16GB (UUID: GPU-2d79c4a8-479e-2f33-39f8-3ba80b63f830)
+ phoenix1 | GPU 0: Tesla P100-PCIE-16GB (UUID: GPU-0af6bb1e-5b5b-4988-ad3a-a917e9584702)
+ phoenix1 | GPU 1: Tesla P100-PCIE-16GB (UUID: GPU-d824c976-a8aa-ef26-a13c-9a9a7fe86bfd)
+ phoenix3 | GPU 0: Tesla P100-PCIE-16GB (UUID: GPU-3681d0b6-1ec6-0453-fd81-29d88e549cd9)
+ phoenix3 | GPU 1: Tesla P100-PCIE-16GB (UUID: GPU-d4b1f2e7-b238-ac9a-bbfe-918adeb69472)
+ phoenix3 | GPU 2: Tesla P100-PCIE-16GB (UUID: GPU-42a32ef1-a60c-e599-c8cf-0e669111ab6f)
+ phoenix3 | GPU 3: Tesla P100-PCIE-16GB (UUID: GPU-1cce09c4-6856-8031-be0b-8e8bbf9a10f3)
+ phoenix4 | GPU 0: Tesla P100-PCIE-16GB (UUID: GPU-a71bdc18-fdd5-ba25-617e-19b23cc8e827)
+ phoenix4 | GPU 1: Tesla P100-PCIE-16GB (UUID: GPU-f9d13688-7fe6-a029-24d1-985a5659f18f)
+ phoenix4 | GPU 2: Tesla P100-PCIE-16GB (UUID: GPU-06a7f54b-c07a-e87a-20d6-09bd99b19531)
+ phoenix4 | GPU 3: Tesla P100-PCIE-16GB (UUID: GPU-af3b32f3-8bd9-cb75-a8fb-25253b9da926)
+(14 rows)
+</pre></li>
+<li>To get a fuller picture at the segment level, combine with the Greenplum catalog table 'gp_segment_configuration' which contains information about segment instance configuration [2]. Here is an example of this table filtering out master and mirrors: <pre class="example">
+SELECT * FROM gp_segment_configuration WHERE role='p' AND content&gt;=0 ORDER BY hostname, dbid;
+</pre> <pre class="result">
+ dbid | content | role | preferred_role | mode | status | port  | hostname | address  | replication_port
+------+---------+------+----------------+------+--------+-------+----------+----------+------------------
+    2 |       0 | p    | p              | c    | u      | 40000 | phoenix0 | phoenix0 |            70000
+    3 |       1 | p    | p              | c    | u      | 40001 | phoenix0 | phoenix0 |            70001
+    4 |       2 | p    | p              | c    | u      | 40002 | phoenix0 | phoenix0 |            70002
+    5 |       3 | p    | p              | c    | u      | 40003 | phoenix0 | phoenix0 |            70003
+    6 |       4 | p    | p              | c    | u      | 40000 | phoenix1 | phoenix1 |            70000
+    7 |       5 | p    | p              | c    | u      | 40001 | phoenix1 | phoenix1 |            70001
+    8 |       6 | p    | p              | c    | u      | 40002 | phoenix1 | phoenix1 |            70002
+    9 |       7 | p    | p              | c    | u      | 40003 | phoenix1 | phoenix1 |            70003
+   10 |       8 | p    | p              | c    | u      | 40000 | phoenix2 | phoenix2 |            70000
+   11 |       9 | p    | p              | c    | u      | 40001 | phoenix2 | phoenix2 |            70001
+   12 |      10 | p    | p              | c    | u      | 40002 | phoenix2 | phoenix2 |            70002
+   13 |      11 | p    | p              | c    | u      | 40003 | phoenix2 | phoenix2 |            70003
+   14 |      12 | p    | p              | c    | u      | 40000 | phoenix3 | phoenix3 |            70000
+   15 |      13 | p    | p              | c    | u      | 40001 | phoenix3 | phoenix3 |            70001
+   16 |      14 | p    | p              | c    | u      | 40002 | phoenix3 | phoenix3 |            70002
+   17 |      15 | p    | p              | c    | u      | 40003 | phoenix3 | phoenix3 |            70003
+   18 |      16 | p    | p              | c    | u      | 40000 | phoenix4 | phoenix4 |            70000
+   19 |      17 | p    | p              | c    | u      | 40001 | phoenix4 | phoenix4 |            70001
+   20 |      18 | p    | p              | c    | u      | 40002 | phoenix4 | phoenix4 |            70002
+   21 |      19 | p    | p              | c    | u      | 40003 | phoenix4 | phoenix4 |            70003
+(20 rows)
+</pre> Now join this table with the GPU resources table to create a table containing a list of all segments on hosts with GPUs attached: <pre class="example">
+DROP TABLE IF EXISTS segments_to_use;
+CREATE TABLE segments_to_use AS
+  SELECT DISTINCT dbid, hostname FROM gp_segment_configuration JOIN host_gpu_mapping_tf USING (hostname)
+  WHERE role='p' AND content&gt;=0;
+SELECT * FROM segments_to_use ORDER BY hostname, dbid;
+</pre> <pre class="result">
+ dbid | hostname
+------+----------
+    2 | phoenix0
+    3 | phoenix0
+    4 | phoenix0
+    5 | phoenix0
+    6 | phoenix1
+    7 | phoenix1
+    8 | phoenix1
+    9 | phoenix1
+   14 | phoenix3
+   15 | phoenix3
+   16 | phoenix3
+   17 | phoenix3
+   18 | phoenix4
+   19 | phoenix4
+   20 | phoenix4
+   21 | phoenix4
+(16 rows)
+</pre></li>
+</ol>
+<p><a class="anchor" id="references"></a></p><dl class="section user"><dt>References</dt><dd></dd></dl>
+<p>[1] Nvidia Systems Management Interface (nvidia-smi) <a href="https://developer.nvidia.com/nvidia-system-management-interface">https://developer.nvidia.com/nvidia-system-management-interface</a></p>
+<p>[2] Greenplum 'gp_segment_configuration' table <a href="https://gpdb.docs.pivotal.io/latest/ref_guide/system_catalogs/gp_segment_configuration.html">https://gpdb.docs.pivotal.io/latest/ref_guide/system_catalogs/gp_segment_configuration.html</a></p>
+<p><a class="anchor" id="related"></a></p><dl class="section user"><dt>Related Topics</dt><dd></dd></dl>
+<p>See <a class="el" href="madlib__keras__gpu__info_8sql__in.html" title="SQL functions for GPU configuration. ">madlib_keras_gpu_info.sql_in</a> </p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:59 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__graph.html b/docs/rc/group__grp__graph.html
new file mode 100644
index 0000000..3651cf8
--- /dev/null
+++ b/docs/rc/group__grp__graph.html
@@ -0,0 +1,157 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Graph</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__graph.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#groups">Modules</a>  </div>
+  <div class="headertitle">
+<div class="title">Graph</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Graph algorithms and measures associated with graphs. </p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group__grp__apsp"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__apsp.html">All Pairs Shortest Path</a></td></tr>
+<tr class="memdesc:group__grp__apsp"><td class="mdescLeft">&#160;</td><td class="mdescRight">Finds the shortest paths between every vertex pair in a given graph. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__bfs"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__bfs.html">Breadth-First Search</a></td></tr>
+<tr class="memdesc:group__grp__bfs"><td class="mdescLeft">&#160;</td><td class="mdescRight">Finds the nodes reachable from a given source vertex using a breadth-first approach. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__hits"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__hits.html">HITS</a></td></tr>
+<tr class="memdesc:group__grp__hits"><td class="mdescLeft">&#160;</td><td class="mdescRight">Find the HITS scores(authority and hub) of all vertices in a directed graph. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__graph__measures"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__graph__measures.html">Measures</a></td></tr>
+<tr class="memdesc:group__grp__graph__measures"><td class="mdescLeft">&#160;</td><td class="mdescRight">A collection of metrics computed on a graph. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__pagerank"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__pagerank.html">PageRank</a></td></tr>
+<tr class="memdesc:group__grp__pagerank"><td class="mdescLeft">&#160;</td><td class="mdescRight">Find the PageRank of all vertices in a directed graph. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__sssp"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__sssp.html">Single Source Shortest Path</a></td></tr>
+<tr class="memdesc:group__grp__sssp"><td class="mdescLeft">&#160;</td><td class="mdescRight">Finds the shortest path from a single source vertex to every other vertex in a given graph. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__wcc"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__wcc.html">Weakly Connected Components</a></td></tr>
+<tr class="memdesc:group__grp__wcc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Find all weakly connected components of a graph. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__graph.js b/docs/rc/group__grp__graph.js
new file mode 100644
index 0000000..40f61f1
--- /dev/null
+++ b/docs/rc/group__grp__graph.js
@@ -0,0 +1,10 @@
+var group__grp__graph =
+[
+    [ "All Pairs Shortest Path", "group__grp__apsp.html", null ],
+    [ "Breadth-First Search", "group__grp__bfs.html", null ],
+    [ "HITS", "group__grp__hits.html", null ],
+    [ "Measures", "group__grp__graph__measures.html", "group__grp__graph__measures" ],
+    [ "PageRank", "group__grp__pagerank.html", null ],
+    [ "Single Source Shortest Path", "group__grp__sssp.html", null ],
+    [ "Weakly Connected Components", "group__grp__wcc.html", null ]
+];
\ No newline at end of file
diff --git a/docs/rc/group__grp__graph__avg__path__length.html b/docs/rc/group__grp__graph__avg__path__length.html
new file mode 100644
index 0000000..7513f12
--- /dev/null
+++ b/docs/rc/group__grp__graph__avg__path__length.html
@@ -0,0 +1,238 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Average Path Length</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__graph__avg__path__length.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Average Path Length<div class="ingroups"><a class="el" href="group__grp__graph.html">Graph</a> &raquo; <a class="el" href="group__grp__graph__measures.html">Measures</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li>
+<a href="#avg_path_length">Average Path Length</a> </li>
+<li>
+<a href="#examples">Examples</a> </li>
+</ul>
+</div><p>This function computes the average of the shortest paths between each pair of vertices. Average path length is based on "reachable target vertices", so it ignores infinite-length paths between vertices that are not connected. This means the function will average the path lengths in each connected component. If the user requires the average path length of a particular component, the weakly_connected_components function may be used to isolate the relevant vertices.</p>
+<dl class="section note"><dt>Note</dt><dd>This function assumes a valid output from a prior APSP run - both the APSP table and the associated output summary table. APSP is a computationally expensive algorithm because it finds the shortest path between all nodes in the graph. The worst case run-time for this implementation is O(V^2 * E) where V is the number of vertices and E is the number of edges. In practice, run-time will be generally be much less than this, depending on the graph.</dd></dl>
+<p><a class="anchor" id="avg_path_length"></a></p><dl class="section user"><dt>Average Path Length</dt><dd><pre class="syntax">
+graph_avg_path_length( apsp_table,
+                       output_table
+                     )
+</pre></dd></dl>
+<p><b>Arguments</b> </p><dl class="arglist">
+<dt>apsp_table </dt>
+<dd><p class="startdd">TEXT. Name of the output table generated by a prior run of all pairs shortest path (APSP). </p>
+<p class="enddd"></p>
+</dd>
+<dt>out_table </dt>
+<dd>TEXT. Name of the table to store the average path length. It contains a row for every group, and the average path value.  </dd>
+</dl>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<ol type="1">
+<li>Create vertex and edge tables to represent the graph: <pre class="syntax">
+DROP TABLE IF EXISTS vertex, edge;
+CREATE TABLE vertex(
+        id INTEGER,
+        name TEXT
+        );
+CREATE TABLE edge(
+        src_id INTEGER,
+        dest_id INTEGER,
+        edge_weight FLOAT8
+        );
+INSERT INTO vertex VALUES
+(0, 'A'),
+(1, 'B'),
+(2, 'C'),
+(3, 'D'),
+(4, 'E'),
+(5, 'F'),
+(6, 'G'),
+(7, 'H');
+INSERT INTO edge VALUES
+(0, 1, 1.0),
+(0, 2, 1.0),
+(0, 4, 10.0),
+(1, 2, 2.0),
+(1, 3, 10.0),
+(2, 3, 1.0),
+(2, 5, 1.0),
+(2, 6, 3.0),
+(3, 0, 1.0),
+(4, 0, -2.0),
+(5, 6, 1.0),
+(6, 7, 1.0);
+</pre></li>
+<li>Calculate the all-pair shortest paths: <pre class="syntax">
+DROP TABLE IF EXISTS out_apsp, out_apsp_summary;
+SELECT madlib.graph_apsp('vertex',      -- Vertex table
+                         'id',          -- Vertix id column (NULL means use default naming)
+                         'edge',        -- Edge table
+                         'src=src_id, dest=dest_id, weight=edge_weight',
+                                        -- Edge arguments (NULL means use default naming)
+                         'out_apsp');        -- Output table of shortest paths
+</pre></li>
+<li>Compute the average path length measure: <pre class="syntax">
+DROP TABLE IF EXISTS out_avg_path_length;
+SELECT madlib.graph_avg_path_length('out_apsp', 'out_avg_path_length');
+SELECT * FROM out_avg_path_length;
+</pre> <pre class="result">
+ avg_path_length
+------------------
+ 2.973684210526316
+(1 row)
+</pre></li>
+<li>Create a graph with 2 groups and find APSP for each group: <pre class="syntax">
+DROP TABLE IF EXISTS edge_gr;
+CREATE TABLE edge_gr AS
+(
+  SELECT *, 0 AS grp FROM edge
+  UNION
+  SELECT *, 1 AS grp FROM edge WHERE src_id &lt; 6 AND dest_id &lt; 6
+);
+INSERT INTO edge_gr VALUES
+(4,5,-20,1);
+</pre></li>
+<li>Find APSP for all groups: <pre class="syntax">
+DROP TABLE IF EXISTS out_gr, out_gr_summary;
+SELECT madlib.graph_apsp(
+                         'vertex',      -- Vertex table
+                         NULL,          -- Vertex id column (NULL means use default naming)
+                         'edge_gr',     -- Edge table
+                         'src=src_id, dest=dest_id, weight=edge_weight',
+                         'out_gr',      -- Output table of shortest paths
+                         'grp'          -- Grouping columns
+);
+</pre></li>
+<li>Find the average path length in every group <pre class="syntax">
+DROP TABLE IF EXISTS out_gr_path;
+SELECT madlib.graph_avg_path_length('out_gr', 'out_gr_path');
+SELECT * FROM out_gr_path ORDER BY grp;
+</pre> <pre class="result">
+ grp |  avg_path_length
+----&mdash;+-------------------&mdash;
+   0 |  2.973684210526316
+   1 |               0.56
+(2 rows)
+</pre> </li>
+</ol>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__graph__closeness.html b/docs/rc/group__grp__graph__closeness.html
new file mode 100644
index 0000000..c13e2b5
--- /dev/null
+++ b/docs/rc/group__grp__graph__closeness.html
@@ -0,0 +1,274 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Closeness</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__graph__closeness.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Closeness<div class="ingroups"><a class="el" href="group__grp__graph.html">Graph</a> &raquo; <a class="el" href="group__grp__graph__measures.html">Measures</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li>
+<a href="#closeness">Closeness</a> </li>
+<li>
+<a href="#examples">Examples</a> </li>
+</ul>
+</div><p>The Closeness function returns various closeness centrality measures and the k-degree for given subset of vertices. The closeness measures are the inverse of the sum, the inverse of the average, and the sum of inverses of the shortest distances to all reachable target vertices (excluding the source vertex).</p>
+<dl class="section note"><dt>Note</dt><dd>The closeness measures require a valid output from a prior APSP run - both the APSP table and the associated output summary table. APSP is a computationally expensive algorithm because it finds the shortest path between all nodes in the graph. The worst case run-time for this implementation is O(V^2 E) where V is the number of vertices and E is the number of edges. In practice, run-time will be generally be much less than this, depending on the graph.</dd></dl>
+<p><a class="anchor" id="closeness"></a></p><dl class="section user"><dt>Closeness</dt><dd><pre class="syntax">
+graph_closeness( apsp_table,
+                 output_table,
+                 vertex_filter_expr
+               )
+</pre></dd></dl>
+<p><b>Arguments</b> </p><dl class="arglist">
+<dt>apsp_table </dt>
+<dd><p class="startdd">TEXT. Name of the output table generated by a prior run of all pairs shortest path (APSP). </p>
+<p class="enddd"></p>
+</dd>
+<dt>out_table </dt>
+<dd><p class="startdd">TEXT. Name of the table to store the closeness measures. It contains a row for every vertex of every group and have the following columns (in addition to the grouping columns):</p><ul>
+<li>inverse_sum_dist: Inverse of the sum of shortest distances to all reachable vertices.</li>
+<li>inverse_average_dist: Inverse of the average of shortest distances to all reachable vertices.</li>
+<li>sum_inverse_dist: Sum of the inverse of shortest distances to all reachable vertices.</li>
+<li>k_degree: Total number of reachable vertices. </li>
+</ul>
+<p class="enddd"></p>
+</dd>
+<dt>vertex_filter_expr (optional) </dt>
+<dd><p class="startdd">TEXT, default = NULL. Valid PostgreSQL expression that describes the vertices to generate closeness measures for. If this parameter is not specified, closeness measures are generated for all vertices in the apsp table. You can think of this input parameter as being like a WHERE clause.</p>
+<p>Some example inputs:</p><ul>
+<li>If you want a short list of vertices, say 1, 2 and 3: <pre>vertex_id IN (1, 2, 3)</pre></li>
+<li>If you want a range of vertices between 1000 and 2000: <pre>vertix_id BETWEEN 1000 AND 2000</pre></li>
+<li>If you want a set of vertices from a separate table satisfying to a condition <pre>EXISTS (SELECT vertex_id FROM vertices_of_interest
+             WHERE vertex_id &gt; 5000 AND condition = 'xyz')
+</pre></li>
+</ul>
+<p class="enddd"></p>
+</dd>
+</dl>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<ol type="1">
+<li>Create vertex and edge tables to represent the graph: <pre class="syntax">
+DROP TABLE IF EXISTS vertex, edge;
+CREATE TABLE vertex(
+        id INTEGER,
+        name TEXT
+        );
+CREATE TABLE edge(
+        src_id INTEGER,
+        dest_id INTEGER,
+        edge_weight FLOAT8
+        );
+INSERT INTO vertex VALUES
+(0, 'A'),
+(1, 'B'),
+(2, 'C'),
+(3, 'D'),
+(4, 'E'),
+(5, 'F'),
+(6, 'G'),
+(7, 'H');
+INSERT INTO edge VALUES
+(0, 1, 1.0),
+(0, 2, 1.0),
+(0, 4, 10.0),
+(1, 2, 2.0),
+(1, 3, 10.0),
+(2, 3, 1.0),
+(2, 5, 1.0),
+(2, 6, 3.0),
+(3, 0, 1.0),
+(4, 0, -2.0),
+(5, 6, 1.0),
+(6, 7, 1.0);
+</pre></li>
+<li>Calculate the all-pair shortest paths: <pre class="syntax">
+DROP TABLE IF EXISTS out_apsp, out_apsp_summary;
+SELECT madlib.graph_apsp('vertex',      -- Vertex table
+                         'id',          -- Vertix id column (NULL means use default naming)
+                         'edge',        -- Edge table
+                         'src=src_id, dest=dest_id, weight=edge_weight',
+                                        -- Edge arguments (NULL means use default naming)
+                         'out_apsp');        -- Output table of shortest paths
+</pre></li>
+<li>Compute the closeness measure for all nodes: <pre class="syntax">
+DROP TABLE IF EXISTS out_closeness;
+SELECT madlib.graph_closeness('out_apsp', 'out_closeness');
+SELECT * FROM out_closeness;
+</pre> <pre class="result">
+ src_id |  inverse_sum_dist  | inverse_avg_dist  | sum_inverse_dist | k_degree
+--------+--------------------+-------------------+------------------+----------
+      1 | 0.0285714285714286 |               0.2 | 1.93809523809524 |        7
+      3 | 0.0357142857142857 |              0.25 | 2.87424242424242 |        7
+      4 |                 -1 |                -7 |               -1 |        7
+      0 | 0.0434782608695652 | 0.304347826086957 | 3.68333333333333 |        7
+      6 |                  1 |                 1 |                1 |        1
+      2 | 0.0416666666666667 | 0.291666666666667 |             3.75 |        7
+      5 |  0.333333333333333 | 0.666666666666667 |              1.5 |        2
+      7 |             [NULL] |            [NULL] |                0 |        0
+(8 rows)
+</pre></li>
+<li>Create a graph with 2 groups and find APSP for each group: <pre class="syntax">
+DROP TABLE IF EXISTS edge_gr;
+CREATE TABLE edge_gr AS
+(
+  SELECT *, 0 AS grp FROM edge
+  UNION
+  SELECT *, 1 AS grp FROM edge WHERE src_id &lt; 6 AND dest_id &lt; 6
+);
+INSERT INTO edge_gr VALUES
+(4,5,-20,1);
+</pre></li>
+<li>Find APSP for all groups: <pre class="syntax">
+DROP TABLE IF EXISTS out_gr, out_gr_summary;
+SELECT madlib.graph_apsp(
+                         'vertex',      -- Vertex table
+                         NULL,          -- Vertex id column (NULL means use default naming)
+                         'edge_gr',     -- Edge table
+                         'src=src_id, dest=dest_id, weight=edge_weight',
+                         'out_gr',      -- Output table of shortest paths
+                         'grp'          -- Grouping columns
+);
+</pre></li>
+<li>Compute closeness measure for vertex 0 to vertex 5 in every group <pre class="syntax">
+DROP TABLE IF EXISTS out_gr_path;
+SELECT madlib.graph_closeness('out_gr', 'out_gr_closeness', 'src_id &gt;= 0 and src_id &lt;=5');
+SELECT * FROM out_gr_closeness ORDER BY grp;
+</pre> <pre class="result">
+ grp | src_id |  inverse_sum_dist   |  inverse_avg_dist  | sum_inverse_dist  | k_degree
+----&mdash;+-------&mdash;+--------------------&mdash;+-------------------&mdash;+------------------&mdash;+---------&mdash;
+   0 |      0 |  0.0434782608695652 |  0.304347826086957 |  3.68333333333333 |        7
+   0 |      5 |   0.333333333333333 |  0.666666666666667 |               1.5 |        2
+   0 |      4 |                  -1 |                 -7 |                -1 |        7
+   0 |      3 |  0.0357142857142857 |               0.25 |  2.87424242424242 |        7
+   0 |      1 |  0.0285714285714286 |                0.2 |  1.93809523809524 |        7
+   0 |      2 |  0.0416666666666667 |  0.291666666666667 |              3.75 |        7
+   1 |      3 |   0.142857142857143 |  0.714285714285714 |  1.97979797979798 |        5
+   1 |      5 |              [NULL] |             [NULL] |                 0 |        0
+   1 |      0 |                0.25 |               1.25 |               2.5 |        5
+   1 |      1 |  0.0588235294117647 |  0.294117647058824 | 0.988095238095238 |        5
+   1 |      2 |                 0.1 |                0.5 |  1.79166666666667 |        5
+   1 |      4 | -0.0416666666666667 | -0.208333333333333 |             -2.55 |        5
+(12 rows)
+</pre> </li>
+</ol>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__graph__diameter.html b/docs/rc/group__grp__graph__diameter.html
new file mode 100644
index 0000000..ab5c34c
--- /dev/null
+++ b/docs/rc/group__grp__graph__diameter.html
@@ -0,0 +1,240 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Graph Diameter</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__graph__diameter.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Graph Diameter<div class="ingroups"><a class="el" href="group__grp__graph.html">Graph</a> &raquo; <a class="el" href="group__grp__graph__measures.html">Measures</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li>
+<a href="#diameter">Diameter</a> </li>
+<li>
+<a href="#examples">Examples</a> </li>
+</ul>
+</div><p>Diameter is defined as the longest of all shortest paths in a graph.</p>
+<dl class="section note"><dt>Note</dt><dd>This function assumes a valid output from a prior APSP run - both the APSP table and the associated output summary table. APSP is a computationally expensive algorithm because it finds the shortest path between all nodes in the graph. The worst case run-time for this implementation is O(V^2 * E) where V is the number of vertices and E is the number of edges. In practice, run-time will be generally be much less than this, depending on the graph.</dd></dl>
+<p><a class="anchor" id="diameter"></a></p><dl class="section user"><dt>Diameter</dt><dd><pre class="syntax">
+graph_diameter( apsp_table,
+                output_table
+               )
+</pre></dd></dl>
+<p><b>Arguments</b> </p><dl class="arglist">
+<dt>apsp_table </dt>
+<dd><p class="startdd">TEXT. Name of the output table generated by a prior run of all pairs shortest path (APSP). </p>
+<p class="enddd"></p>
+</dd>
+<dt>out_table </dt>
+<dd><p class="startdd">TEXT. Name of the table to store the diameter. It contains a row for every group, the diameter value and the two vertices that are the farthest apart. </p>
+<p class="enddd"></p>
+</dd>
+</dl>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<ol type="1">
+<li>Create vertex and edge tables to represent the graph: <pre class="syntax">
+DROP TABLE IF EXISTS vertex, edge;
+CREATE TABLE vertex(
+        id INTEGER,
+        name TEXT
+        );
+CREATE TABLE edge(
+        src_id INTEGER,
+        dest_id INTEGER,
+        edge_weight FLOAT8
+        );
+INSERT INTO vertex VALUES
+(0, 'A'),
+(1, 'B'),
+(2, 'C'),
+(3, 'D'),
+(4, 'E'),
+(5, 'F'),
+(6, 'G'),
+(7, 'H');
+INSERT INTO edge VALUES
+(0, 1, 1.0),
+(0, 2, 1.0),
+(0, 4, 10.0),
+(1, 2, 2.0),
+(1, 3, 10.0),
+(2, 3, 1.0),
+(2, 5, 1.0),
+(2, 6, 3.0),
+(3, 0, 1.0),
+(4, 0, -2.0),
+(5, 6, 1.0),
+(6, 7, 1.0);
+</pre></li>
+<li>Calculate the all-pair shortest paths: <pre class="syntax">
+DROP TABLE IF EXISTS out_apsp, out_apsp_summary;
+SELECT madlib.graph_apsp('vertex',      -- Vertex table
+                         'id',          -- Vertix id column (NULL means use default naming)
+                         'edge',        -- Edge table
+                         'src=src_id, dest=dest_id, weight=edge_weight',
+                                        -- Edge arguments (NULL means use default naming)
+                         'out_apsp');        -- Output table of shortest paths
+</pre></li>
+<li>Compute the diameter measure for the graph: <pre class="syntax">
+DROP TABLE IF EXISTS out_diameter;
+SELECT madlib.graph_diameter('out_apsp', 'out_diameter');
+SELECT * FROM out_diameter;
+</pre> <pre class="result">
+diameter | diameter_end_vertices
+---------+-----------------------
+      14 | {{1,4}}
+(1 row)
+</pre></li>
+<li>Create a graph with 2 groups and find APSP for each group: <pre class="syntax">
+DROP TABLE IF EXISTS edge_gr;
+CREATE TABLE edge_gr AS
+(
+  SELECT *, 0 AS grp FROM edge
+  UNION
+  SELECT *, 1 AS grp FROM edge WHERE src_id &lt; 6 AND dest_id &lt; 6
+);
+INSERT INTO edge_gr VALUES
+(4,5,-20,1);
+</pre></li>
+<li>Find APSP for all groups: <pre class="syntax">
+DROP TABLE IF EXISTS out_gr, out_gr_summary;
+SELECT madlib.graph_apsp(
+                         'vertex',      -- Vertex table
+                         NULL,          -- Vertex id column (NULL means use default naming)
+                         'edge_gr',     -- Edge table
+                         'src=src_id, dest=dest_id, weight=edge_weight',
+                         'out_gr',      -- Output table of shortest paths
+                         'grp'          -- Grouping columns
+);
+</pre></li>
+<li>Find the diameter of graph in every group <pre class="syntax">
+DROP TABLE IF EXISTS out_gr_path;
+SELECT madlib.graph_diameter('out_gr', 'out_gr_diameter');
+SELECT * FROM out_gr_diameter ORDER BY grp;
+</pre> <pre class="result">
+grp | diameter | diameter_end_vertices
+---&mdash;+---------&mdash;+----------------------&mdash;
+  0 |       14 | {{1,4}}
+  1 |       14 | {{1,4}}
+(2 rows)
+</pre> </li>
+</ol>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__graph__measures.html b/docs/rc/group__grp__graph__measures.html
new file mode 100644
index 0000000..58bcf31
--- /dev/null
+++ b/docs/rc/group__grp__graph__measures.html
@@ -0,0 +1,148 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Measures</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__graph__measures.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#groups">Modules</a>  </div>
+  <div class="headertitle">
+<div class="title">Measures<div class="ingroups"><a class="el" href="group__grp__graph.html">Graph</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>A collection of metrics computed on a graph. </p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group__grp__graph__avg__path__length"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__graph__avg__path__length.html">Average Path Length</a></td></tr>
+<tr class="memdesc:group__grp__graph__avg__path__length"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes the average shortest-path length of a graph. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__graph__closeness"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__graph__closeness.html">Closeness</a></td></tr>
+<tr class="memdesc:group__grp__graph__closeness"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes the closeness centrality value of each node in the graph. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__graph__diameter"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__graph__diameter.html">Graph Diameter</a></td></tr>
+<tr class="memdesc:group__grp__graph__diameter"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes the diameter of a graph. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__graph__vertex__degrees"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__graph__vertex__degrees.html">In-Out Degree</a></td></tr>
+<tr class="memdesc:group__grp__graph__vertex__degrees"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes the degrees for each vertex. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__graph__measures.js b/docs/rc/group__grp__graph__measures.js
new file mode 100644
index 0000000..6272fba
--- /dev/null
+++ b/docs/rc/group__grp__graph__measures.js
@@ -0,0 +1,7 @@
+var group__grp__graph__measures =
+[
+    [ "Average Path Length", "group__grp__graph__avg__path__length.html", null ],
+    [ "Closeness", "group__grp__graph__closeness.html", null ],
+    [ "Graph Diameter", "group__grp__graph__diameter.html", null ],
+    [ "In-Out Degree", "group__grp__graph__vertex__degrees.html", null ]
+];
\ No newline at end of file
diff --git a/docs/rc/group__grp__graph__vertex__degrees.html b/docs/rc/group__grp__graph__vertex__degrees.html
new file mode 100644
index 0000000..174bebe
--- /dev/null
+++ b/docs/rc/group__grp__graph__vertex__degrees.html
@@ -0,0 +1,266 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: In-Out Degree</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__graph__vertex__degrees.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">In-Out Degree<div class="ingroups"><a class="el" href="group__grp__graph.html">Graph</a> &raquo; <a class="el" href="group__grp__graph__measures.html">Measures</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li>
+<a href="#degrees">In-out degrees</a> </li>
+<li>
+<a href="#examples">Examples</a> </li>
+</ul>
+</div><p>This function computes the degree of each node. The node degree is the number of edges adjacent to that node. The node in-degree is the number of edges pointing in to the node and node out-degree is the number of edges pointing out of the node.</p>
+<p><a class="anchor" id="degrees"></a></p><dl class="section user"><dt>In-out degrees</dt><dd><pre class="syntax">
+graph_vertex_degrees(
+    vertex_table,
+    vertex_id,
+    edge_table,
+    edge_args,
+    out_table,
+    grouping_cols
+)
+</pre></dd></dl>
+<p><b>Arguments</b> </p><dl class="arglist">
+<dt>vertex_table </dt>
+<dd><p class="startdd">TEXT. Name of the table containing the vertex data for the graph. Must contain the column specified in the 'vertex_id' parameter below.</p>
+<p class="enddd"></p>
+</dd>
+<dt>vertex_id </dt>
+<dd><p class="startdd">TEXT, default = 'id'. Name of the column in 'vertex_table' containing vertex ids. The vertex ids are of type INTEGER with no duplicates. They do not need to be contiguous.</p>
+<p class="enddd"></p>
+</dd>
+<dt>edge_table </dt>
+<dd><p class="startdd">TEXT. Name of the table containing the edge data. The edge table must contain columns for source vertex, destination vertex and edge weight. Column naming convention is described below in the 'edge_args' parameter.</p>
+<p class="enddd"></p>
+</dd>
+<dt>edge_args </dt>
+<dd><p class="startdd">TEXT. A comma-delimited string containing multiple named arguments of the form "name=value". The following parameters are supported for this string argument:</p><ul>
+<li>src (INTEGER): Name of the column containing the source vertex ids in the edge table. Default column name is 'src'.</li>
+<li>dest (INTEGER): Name of the column containing the destination vertex ids in the edge table. Default column name is 'dest'.</li>
+<li>weight (FLOAT8): Name of the column containing the edge weights in the edge table. Default column name is 'weight'.</li>
+</ul>
+<p class="enddd"></p>
+</dd>
+<dt>out_table </dt>
+<dd><p class="startdd">TEXT. Name of the table to store the result. It contains a row for every vertex of every group and has the following columns (in addition to the grouping columns):</p><ul>
+<li>vertex: The id for the source vertex. Will use the input vertex column 'id' for column naming.</li>
+<li>indegree: Number of incoming edges to the vertex.</li>
+<li>outdegree: Number of outgoing edges from the vertex.</li>
+</ul>
+<p class="enddd"></p>
+</dd>
+<dt>grouping_cols </dt>
+<dd>TEXT, default = NULL. List of columns used to group the input into discrete subgraphs. These columns must exist in the edge table. When this value is null, no grouping is used and a single result is generated.  </dd>
+</dl>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<ol type="1">
+<li>Create vertex and edge tables to represent the graph: <pre class="syntax">
+DROP TABLE IF EXISTS vertex, edge;
+CREATE TABLE vertex(
+        id INTEGER,
+        name TEXT
+        );
+CREATE TABLE edge(
+        src_id INTEGER,
+        dest_id INTEGER,
+        edge_weight FLOAT8
+        );
+INSERT INTO vertex VALUES
+(0, 'A'),
+(1, 'B'),
+(2, 'C'),
+(3, 'D'),
+(4, 'E'),
+(5, 'F'),
+(6, 'G'),
+(7, 'H');
+INSERT INTO edge VALUES
+(0, 1, 1.0),
+(0, 2, 1.0),
+(0, 4, 10.0),
+(1, 2, 2.0),
+(1, 3, 10.0),
+(2, 3, 1.0),
+(2, 5, 1.0),
+(2, 6, 3.0),
+(3, 0, 1.0),
+(4, 0, -2.0),
+(5, 6, 1.0),
+(6, 7, 1.0);
+</pre></li>
+<li>Calculate the in-out degrees for each node: <pre class="syntax">
+DROP TABLE IF EXISTS degrees;
+SELECT madlib.graph_vertex_degrees(
+    'vertex',      -- Vertex table
+    'id',          -- Vertix id column (NULL means use default naming)
+    'edge',        -- Edge table
+    'src=src_id, dest=dest_id, weight=edge_weight',
+    'degrees');        -- Output table of shortest paths
+SELECT * FROM degrees ORDER BY id;
+</pre> <pre class="result">
+ id | indegree | outdegree
+----+----------+-----------
+  0 |        2 |         3
+  1 |        1 |         2
+  2 |        2 |         3
+  3 |        2 |         1
+  4 |        1 |         1
+  5 |        1 |         1
+  6 |        2 |         1
+  7 |        1 |         0
+</pre></li>
+<li>Create a graph with 2 groups and find degrees for each group: <pre class="syntax">
+DROP TABLE IF EXISTS edge_gr;
+CREATE TABLE edge_gr AS
+(
+  SELECT *, 0 AS grp FROM edge
+  UNION
+  SELECT *, 1 AS grp FROM edge WHERE src_id &lt; 6 AND dest_id &lt; 6
+);
+INSERT INTO edge_gr VALUES
+(4,5,-20,1);
+</pre></li>
+<li>Find in-out degrees for all groups: <pre class="syntax">
+DROP TABLE IF EXISTS out_gr;
+SELECT madlib.graph_vertex_degrees(
+    'vertex',      -- Vertex table
+    NULL,          -- Vertex id column (NULL means use default naming)
+    'edge_gr',     -- Edge table
+    'src=src_id, dest=dest_id, weight=edge_weight',
+    'out_gr',      -- Output table of shortest paths
+    'grp'          -- Grouping columns
+);
+SELECT * FROM out_gr WHERE id &lt; 2 ORDER BY grp, id;
+</pre> <pre class="result">
+ grp | id | indegree |   outdegree
+----&mdash;+---&mdash;+---------&mdash;+----------&mdash;
+   0 |  0 |        2 |         3
+   0 |  1 |        1 |         2
+   1 |  0 |        2 |         3
+   1 |  1 |        1 |         2
+(4 rows)
+</pre> </li>
+</ol>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__hits.html b/docs/rc/group__grp__hits.html
new file mode 100644
index 0000000..806d0d6
--- /dev/null
+++ b/docs/rc/group__grp__hits.html
@@ -0,0 +1,400 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: HITS</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__hits.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">HITS<div class="ingroups"><a class="el" href="group__grp__graph.html">Graph</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li>
+<a href="#hits">HITS</a> </li>
+<li>
+<a href="#notes">Notes</a> </li>
+<li>
+<a href="#examples">Examples</a> </li>
+<li>
+<a href="#literature">Literature</a> </li>
+</ul>
+</div><p>Given a graph, the HITS (Hyperlink-Induced Topic Search) algorithm outputs the authority score and hub score of every vertex, where authority estimates the value of the content of the page and hub estimates the value of its links to other pages. This algorithm was originally developed to rate web pages [1].</p>
+<p><a class="anchor" id="hits"></a></p><dl class="section user"><dt>HITS</dt><dd><pre class="syntax">
+hits( vertex_table,
+      vertex_id,
+      edge_table,
+      edge_args,
+      out_table,
+      max_iter,
+      threshold,
+      grouping_cols
+    )
+</pre></dd></dl>
+<p><b>Arguments</b> </p><dl class="arglist">
+<dt>vertex_table </dt>
+<dd><p class="startdd">TEXT. Name of the table containing the vertex data for the graph. Must contain the column specified in the 'vertex_id' parameter below.</p>
+<p class="enddd"></p>
+</dd>
+<dt>vertex_id </dt>
+<dd><p class="startdd">TEXT, default = 'id'. Name of the column in 'vertex_table' containing vertex ids. The vertex ids are of type INTEGER with no duplicates. They do not need to be contiguous.</p>
+<p class="enddd"></p>
+</dd>
+<dt>edge_table </dt>
+<dd><p class="startdd">TEXT. Name of the table containing the edge data. The edge table must contain columns for source vertex and destination vertex.</p>
+<p class="enddd"></p>
+</dd>
+<dt>edge_args </dt>
+<dd><p class="startdd">TEXT. A comma-delimited string containing multiple named arguments of the form "name=value". The following parameters are supported for this string argument:</p><ul>
+<li>src (INTEGER): Name of the column containing the source vertex ids in the edge table. Default column name is 'src'.</li>
+<li>dest (INTEGER): Name of the column containing the destination vertex ids in the edge table. Default column name is 'dest'.</li>
+</ul>
+<p class="enddd"></p>
+</dd>
+<dt>out_table </dt>
+<dd><p class="startdd">TEXT. Name of the table to store the result of HITS. It will contain a row for every vertex from 'vertex_table' with the following columns:</p><ul>
+<li>vertex_id : The id of a vertex. Will use the input parameter 'vertex_id' for column naming.</li>
+<li>authority : The vertex authority score.</li>
+<li>hub : The vertex hub score.</li>
+<li>grouping_cols : Grouping column values (if any) associated with the vertex_id. </li>
+</ul>
+<p>A summary table is also created that contains information regarding the number of iterations required for convergence. It is named by adding the suffix '_summary' to the 'out_table' parameter.</p>
+<p class="enddd"></p>
+</dd>
+<dt>max_iter (optional)  </dt>
+<dd><p class="startdd">INTEGER, default: 100. The maximum number of iterations allowed. Each iteration consists of both authority and hub phases.</p>
+<p class="enddd"></p>
+</dd>
+<dt>threshold (optional)  </dt>
+<dd><p class="startdd">FLOAT8, default: (1/number of vertices * 1000). Threshold must be set to a value between 0 and 1, inclusive of end points. If the difference between two consecutive iterations of authority AND two consecutive iterations of hub is smaller than 'threshold', then the computation stops. That is, both authority and hub value differences must be below the specified threshold for the algorithm to stop. If you set the threshold to 0, then you will force the algorithm to run for the full number of iterations specified in 'max_iter'. </p>
+<p class="enddd"></p>
+</dd>
+<dt>grouping_cols (optional) </dt>
+<dd>TEXT, default: NULL. A single column or a list of comma-separated columns that divides the input data into discrete groups, resulting in one distribution per group. When this value is NULL, no grouping is used and a single model is generated for all data. <dl class="section note"><dt>Note</dt><dd>Expressions are not currently supported for 'grouping_cols'. </dd></dl>
+</dd>
+</dl>
+<dl class="section note"><dt>Note</dt><dd>On a Greenplum cluster, the edge table should be distributed by the source vertex id column for better performance.</dd></dl>
+<p><a class="anchor" id="notes"></a></p><dl class="section user"><dt>Notes</dt><dd></dd></dl>
+<p>This algorithm supports multigraph and each duplicated edge is considered for counting when calculating authority and hub scores.</p>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<ol type="1">
+<li>Create vertex and edge tables to represent the graph: <pre class="syntax">
+DROP TABLE IF EXISTS vertex, edge;
+CREATE TABLE vertex(
+        id INTEGER
+        );
+CREATE TABLE edge(
+        src INTEGER,
+        dest INTEGER,
+        user_id INTEGER
+        );
+INSERT INTO vertex VALUES
+(0),
+(1),
+(2),
+(3),
+(4),
+(5),
+(6);
+INSERT INTO edge VALUES
+(0, 1, 1),
+(0, 2, 1),
+(0, 4, 1),
+(1, 2, 1),
+(1, 3, 1),
+(2, 3, 1),
+(2, 5, 1),
+(2, 6, 1),
+(3, 0, 1),
+(4, 0, 1),
+(5, 6, 1),
+(6, 3, 1);
+</pre></li>
+<li>Running HITS with default values for optional parameters: <pre class="syntax">
+DROP TABLE IF EXISTS hits_out, hits_out_summary;
+SELECT madlib.hits(
+             'vertex',             -- Vertex table
+             'id',                 -- Vertex id column
+             'edge',               -- Edge table
+             'src=src, dest=dest', -- Comma delimited string of edge arguments
+             'hits_out');          -- Output table of HITS
+SELECT * FROM hits_out ORDER BY id;
+</pre> <pre class="result">
+ id |      authority       |         hub
+----+----------------------+----------------------
+  0 |    8.43871829093e-07 |    0.338306115082665
+  1 |    0.158459587238244 |    0.527865350448059
+  2 |    0.405627969689677 |    0.675800764727558
+  3 |    0.721775835521825 |    3.95111934817e-07
+  4 |    0.158459587238244 |    3.95111934817e-07
+  5 |    0.316385413093048 |    0.189719957843216
+  6 |    0.405199928761102 |    0.337944978189241
+(7 rows)
+</pre> <pre class="syntax">
+SELECT * FROM hits_out_summary;
+</pre> <pre class="result">
+ __iterations__
+-----------------+
+              17
+(1 row)
+</pre></li>
+<li>Running HITS with max_iter of 3 results in different authority and hub scores: <pre class="syntax">
+DROP TABLE IF EXISTS hits_out, hits_out_summary;
+SELECT madlib.hits(
+             'vertex',             -- Vertex table
+             'id',                 -- Vertex id column
+             'edge',               -- Edge table
+             'src=src, dest=dest', -- Comma delimited string of edge arguments
+             'hits_out',           -- Output table
+              3);                  -- Max iteration
+SELECT * FROM hits_out ORDER BY id;
+</pre> <pre class="result">
+ id |     authority     |        hub
+----+-------------------+--------------------
+  0 |   0.08653327387778 | 0.375721659592363
+  1 |   0.18388320699029 | 0.533118571043218
+  2 |   0.43266636938891 | 0.654974244424525
+  3 |   0.70308285025699 | 0.040618557793769
+  4 |   0.18388320699029 | 0.040618557793769
+  5 |   0.30286645857224 | 0.182783510071961
+  6 |   0.38939973245002 | 0.330025782074373
+(7 rows)
+</pre> <pre class="syntax">
+SELECT * FROM hits_out_summary;
+</pre> <pre class="result">
+ __iterations__
+-----------------+
+              3
+(1 row)
+</pre></li>
+<li>Running HITS with a low threshold of 0.00001 results in more iterations for convergence: <pre class="syntax">
+DROP TABLE IF EXISTS hits_out, hits_out_summary;
+SELECT madlib.hits(
+             'vertex',             -- Vertex table
+             'id',                 -- Vertex id column
+             'edge',               -- Edge table
+             'src=src, dest=dest', -- Comma delimited string of edge arguments
+             'hits_out',           -- Output table
+             NULL,                 -- Default max_iter
+             0.00001);             -- Threshold
+SELECT * FROM hits_out ORDER BY id;
+</pre> <pre class="result">
+ id |      authority       |         hub
+----+----------------------+---------------------
+  0 |    1.15243075426e-09 |     0.33800946769422
+  1 |    0.158264459912827 |    0.527792117750177
+  2 |    0.405384672299625 |    0.675965453766535
+  3 |     0.72186275724613 |    5.39583282614e-10
+  4 |    0.158264459912827 |    5.39583282614e-10
+  5 |    0.316493740997913 |    0.189793242747412
+  6 |    0.405356461070609 |    0.337985666133163
+(7 rows)
+</pre> <pre class="syntax">
+SELECT * FROM hits_out_summary;
+</pre> <pre class="result">
+ __iterations__
+-----------------+
+              25
+(1 row)
+</pre></li>
+<li>Running HITS with both max_iter and threshold: <pre class="syntax">
+DROP TABLE IF EXISTS hits_out, hits_out_summary;
+SELECT madlib.hits(
+             'vertex',             -- Vertex table
+             'id',                 -- Vertex id column
+             'edge',               -- Edge table
+             'src=src, dest=dest', -- Comma delimited string of edge arguments
+             'hits_out',           -- Output table
+             20,                   -- Default max_iter
+             0.00001);             -- Threshold
+SELECT * FROM hits_out ORDER BY id;
+</pre> <pre class="result">
+ id |      authority       |         hub
+----+----------------------+---------------------
+  0 |    7.11260011825e-08 |    0.33810307986005
+  1 |    0.158326035587958 |   0.527815233930963
+  2 |    0.405461453180491 |   0.675913495026452
+  3 |    0.721835343230399 |   3.33021322089e-08
+  4 |    0.158326035587958 |   3.33021322089e-08
+  5 |    0.316459563893809 |   0.189770119973925
+  6 |    0.405307074424261 |   0.337972831786458
+(7 rows)
+</pre> <pre class="syntax">
+SELECT * FROM hits_out_summary;
+</pre> <pre class="result">
+ __iterations__
+-----------------+
+             20
+(1 row)
+</pre> The algorithm stopped at 20 iterations even though the convergence for threshold of 0.00001 is at 25 iterations. This is because max_iter was set to 20.</li>
+<li>Running HITS with grouping column and default values for max_iter and threshold. Add more rows to the edge table to create different graphs based on the user_id column. <pre class="syntax">
+INSERT INTO edge VALUES
+(0, 1, 2),
+(0, 2, 2),
+(0, 4, 2),
+(1, 2, 2),
+(1, 3, 2),
+(2, 3, 2),
+(3, 0, 2),
+(4, 0, 2),
+(5, 6, 2),
+(6, 3, 2);
+DROP TABLE IF EXISTS hits_out, hits_out_summary;
+SELECT madlib.hits(
+             'vertex',             -- Vertex table
+             'id',                 -- Vertex id column
+             'edge',               -- Edge table
+             'src=src, dest=dest', -- Comma delimited string of edge arguments
+             'hits_out',           -- Output table
+             NULL,                 -- Default max_iter
+             NULL,                 -- Threshold
+             'user_id');           -- Grouping column
+SELECT * FROM hits_out ORDER BY user_id, id;
+</pre> <pre class="result">
+ user_id | id |      authority       |         hub
+---------+----+----------------------+----------------------
+       1 |  0 |    8.43871829093e-07 |    0.338306115082665
+       1 |  1 |    0.158459587238244 |    0.527865350448059
+       1 |  2 |    0.405627969689677 |    0.675800764727558
+       1 |  3 |    0.721775835521825 |    3.95111934817e-07
+       1 |  4 |    0.158459587238244 |    3.95111934817e-07
+       1 |  5 |    0.316385413093048 |    0.189719957843216
+       1 |  6 |    0.405199928761102 |    0.337944978189241
+       2 |  0 |    1.60841750444e-05 |    0.632262085114062
+       2 |  1 |    0.316079985713431 |    0.632529390899584
+       2 |  2 |    0.632364174872359 |    0.316347297480213
+       2 |  3 |    0.632694582987791 |    8.04208767442e-06
+       2 |  4 |    0.316079985713431 |    8.04208767442e-06
+       2 |  5 |                    0 |    1.22712519446e-10
+       2 |  6 |    2.45425034248e-10 |    0.316347297480213
+(14 rows)
+</pre> <pre class="syntax">
+SELECT * FROM hits_out_summary order by user_id;
+</pre> <pre class="result">
+ user_id | __iterations__
+---------+----------------
+       1 |             17
+       2 |             16
+(2 rows)
+</pre></li>
+</ol>
+<p><a class="anchor" id="literature"></a></p><dl class="section user"><dt>Literature</dt><dd></dd></dl>
+<p>[1] Kleinerg, Jon M., "Authoritative Sources in a Hyperlinked
+Environment", Journal of the ACM, Sept. 1999. <a href="https://www.cs.cornell.edu/home/kleinber/auth.pdf">https://www.cs.cornell.edu/home/kleinber/auth.pdf</a> </p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__indicator.html b/docs/rc/group__grp__indicator.html
new file mode 100644
index 0000000..411ab87
--- /dev/null
+++ b/docs/rc/group__grp__indicator.html
@@ -0,0 +1,250 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Create Indicator Variables</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__indicator.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Create Indicator Variables<div class="ingroups"><a class="el" href="group__grp__deprecated.html">Deprecated Modules</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<dl class="section warning"><dt>Warning</dt><dd><em> This version of encoding categorical variables has been deprecated. The new module with more capability can be found here <a class="el" href="group__grp__encode__categorical.html">Encoding Categorical Variables</a></em></dd></dl>
+<div class="toc"><b>Contents</b> <ul>
+<li>
+<a href="#categorical">Coding systems for categorical variables</a> </li>
+<li>
+<a href="#examples">Examples</a> </li>
+</ul>
+</div><p><a class="anchor" id="categorical"></a></p><dl class="section user"><dt>Coding systems for categorical variables</dt><dd>Categorical variables require special attention in regression analysis because, unlike dichotomous or continuous variables, they cannot be entered into the regression equation just as they are. For example, if you have a variable called race that is coded 1 = Hispanic, 2 = Asian, 3 = Black, 4 = White, then entering race in your regression will look at the linear effect of race, which is probably not what you intended. Instead, categorical variables like this need to be recoded into a series of indicator variables which can then be entered into the regression model. There are a variety of coding systems (also called as contrasts) that can be used when coding categorical variables. including dummy, effects, orthogonal, and helmert coding.</dd></dl>
+<p>We currently only support the dummy coding technique. Dummy coding is used when a researcher wants to compare other groups of the predictor variable with one specific group of the predictor variable. Often, the specific group to compare with is called the reference group.</p>
+<pre class="syntax">
+create_indicator_variables(
+    source_table,
+    output_table,
+    categorical_cols,
+    keep_null,
+    distributed_by
+    )
+</pre><p> <b>Arguments</b> </p><dl class="arglist">
+<dt>source_table </dt>
+<dd>VARCHAR. Name of the source table, containing data for categorical variables. </dd>
+<dt>output_table </dt>
+<dd>VARCHAR. Name of result table. The output table has the same columns as the original table, adding new indicator variable columns for each categorical column. The column name for the indicator variable is <em>'categorical column name'</em>_<em>'categorical value'</em>.  </dd>
+<dt>categorical_cols  </dt>
+<dd>VARCHAR. Comma-separated string of column names of categorical variables that need to be dummy-coded. </dd>
+<dt>keep_null (optional) </dt>
+<dd>BOOLEAN. default: FALSE. Whether 'NULL' should be treated as one of the categories of the categorical variable. If True, then an indicator variable is created corresponding to the NULL value. If False, then all indicator variables for that record will be set to NULL.  </dd>
+<dt>distributed_by (optional) </dt>
+<dd>VARCHAR. default: NULL. Columns to use for the distribution policy of the output table. When NULL, the distribution policy of 'source_table' will be used. This argument is not available for POSTGRESQL platforms. </dd>
+</dl>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<ol type="1">
+<li>Use a subset of the abalone dataset. <pre class="example">
+DROP TABLE IF EXISTS abalone;
+CREATE TABLE abalone (
+    sex character varying,
+    length double precision,
+    diameter double precision,
+    height double precision
+);
+COPY abalone (sex, length, diameter, height) FROM stdin WITH DELIMITER '|' NULL as '@';
+M| 0.455 |   0.365 | 0.095
+F| 0.53  |   0.42  | 0.135
+M| 0.35  |   0.265 | 0.09
+F| 0.53  |   0.415 | 0.15
+M| 0.44  |   0.365 | 0.125
+F| 0.545 |   0.425 | 0.125
+I| 0.33  |   0.255 | 0.08
+F| 0.55  |   0.44  | 0.15
+I| 0.425 |   0.30  | 0.095
+F| 0.525 |   0.38  | 0.140
+M| 0.475 |   0.37  | 0.125
+F| 0.535 |   0.405 | 0.145
+M| 0.43  |   0.358 | 0.11
+F| 0.47  |   0.355 | 0.100
+M| 0.49  |   0.38  | 0.135
+F| 0.44  |   0.340 | 0.100
+M| 0.5   |   0.400 | 0.13
+F| 0.565 |   0.44  | 0.155
+I| 0.355 |   0.280 | 0.085
+F| 0.550 |   0.415 | 0.135
+| 0.475 |   0.37  | 0.125
+\.
+</pre></li>
+<li>Create new table with dummy-coded indicator variables <pre class="example">
+drop table if exists abalone_out;
+select madlib.create_indicator_variables ('abalone', 'abalone_out', 'sex');
+select * from abalone_out;
+</pre> <pre class="result">
+ sex  | length | diameter | height | sex_F  | sex_I  | sex_M
+&#160; -----+--------+----------+--------+--------+--------+-------
+ F    |   0.53 |     0.42 |  0.135 |      1 |      0 |     0
+ F    |   0.53 |    0.415 |   0.15 |      1 |      0 |     0
+ F    |  0.545 |    0.425 |  0.125 |      1 |      0 |     0
+ F    |   0.55 |     0.44 |   0.15 |      1 |      0 |     0
+ F    |  0.525 |     0.38 |   0.14 |      1 |      0 |     0
+ F    |  0.535 |    0.405 |  0.145 |      1 |      0 |     0
+ F    |   0.47 |    0.355 |    0.1 |      1 |      0 |     0
+ F    |   0.44 |     0.34 |    0.1 |      1 |      0 |     0
+ F    |  0.565 |     0.44 |  0.155 |      1 |      0 |     0
+ F    |   0.55 |    0.415 |  0.135 |      1 |      0 |     0
+ M    |  0.455 |    0.365 |  0.095 |      0 |      0 |     1
+ M    |   0.35 |    0.265 |   0.09 |      0 |      0 |     0
+ M    |   0.44 |    0.365 |  0.125 |      0 |      0 |     0
+ I    |   0.33 |    0.255 |   0.08 |      0 |      1 |     0
+ I    |  0.425 |      0.3 |  0.095 |      0 |      1 |     0
+ M    |  0.475 |     0.37 |  0.125 |      0 |      0 |     0
+ M    |   0.43 |    0.358 |   0.11 |      0 |      0 |     0
+ M    |   0.49 |     0.38 |  0.135 |      0 |      0 |     0
+ M    |    0.5 |      0.4 |   0.13 |      0 |      0 |     0
+ I    |  0.355 |     0.28 |  0.085 |      0 |      1 |     0
+ NULL |   0.55 |    0.415 |  0.135 |   NULL |   NULL |  NULL
+</pre></li>
+<li>Create indicator variable for 'NULL' value (note the additional column '"sex_NULL"') <pre class="example">
+drop table if exists abalone_out;
+select madlib.create_indicator_variables'abalone', 'abalone_out', 'sex', True);
+select * from abalone_out;
+</pre> <pre class="result">
+ sex  | length | diameter | height | sex_F  | sex_I  | sex_M | sex_NULL
+&#160; ---&mdash;+-----&mdash;+-------&mdash;+-----&mdash;+-----&mdash;+-----&mdash;+----&mdash;+----&mdash;
+ F    |   0.53 |     0.42 |  0.135 |      1 |      0 |     0 |     0
+ F    |   0.53 |    0.415 |   0.15 |      1 |      0 |     0 |     0
+ F    |  0.545 |    0.425 |  0.125 |      1 |      0 |     0 |     0
+ F    |   0.55 |     0.44 |   0.15 |      1 |      0 |     0 |     0
+ F    |  0.525 |     0.38 |   0.14 |      1 |      0 |     0 |     0
+ F    |  0.535 |    0.405 |  0.145 |      1 |      0 |     0 |     0
+ F    |   0.47 |    0.355 |    0.1 |      1 |      0 |     0 |     0
+ F    |   0.44 |     0.34 |    0.1 |      1 |      0 |     0 |     0
+ F    |  0.565 |     0.44 |  0.155 |      1 |      0 |     0 |     0
+ F    |   0.55 |    0.415 |  0.135 |      1 |      0 |     0 |     0
+ M    |  0.455 |    0.365 |  0.095 |      0 |      0 |     1 |     0
+ M    |   0.35 |    0.265 |   0.09 |      0 |      0 |     0 |     0
+ M    |   0.44 |    0.365 |  0.125 |      0 |      0 |     0 |     0
+ I    |   0.33 |    0.255 |   0.08 |      0 |      1 |     0 |     0
+ I    |  0.425 |      0.3 |  0.095 |      0 |      1 |     0 |     0
+ M    |  0.475 |     0.37 |  0.125 |      0 |      0 |     0 |     0
+ M    |   0.43 |    0.358 |   0.11 |      0 |      0 |     0 |     0
+ M    |   0.49 |     0.38 |  0.135 |      0 |      0 |     0 |     0
+ M    |    0.5 |      0.4 |   0.13 |      0 |      0 |     0 |     0
+ I    |  0.355 |     0.28 |  0.085 |      0 |      1 |     0 |     0
+ NULL |   0.55 |    0.415 |  0.135 |      0 |      0 |     0 |     1
+</pre> </li>
+</ol>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__inf__stats.html b/docs/rc/group__grp__inf__stats.html
new file mode 100644
index 0000000..dacbd5a
--- /dev/null
+++ b/docs/rc/group__grp__inf__stats.html
@@ -0,0 +1,139 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Inferential Statistics</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__inf__stats.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#groups">Modules</a>  </div>
+  <div class="headertitle">
+<div class="title">Inferential Statistics<div class="ingroups"><a class="el" href="group__grp__stats.html">Statistics</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Methods to compute inferential statistics of a dataset. </p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group__grp__stats__tests"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__stats__tests.html">Hypothesis Tests</a></td></tr>
+<tr class="memdesc:group__grp__stats__tests"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provides functions to perform statistical hypothesis tests. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__inf__stats.js b/docs/rc/group__grp__inf__stats.js
new file mode 100644
index 0000000..7bfc14a
--- /dev/null
+++ b/docs/rc/group__grp__inf__stats.js
@@ -0,0 +1,4 @@
+var group__grp__inf__stats =
+[
+    [ "Hypothesis Tests", "group__grp__stats__tests.html", null ]
+];
\ No newline at end of file
diff --git a/docs/rc/group__grp__input__preprocessor__dl.html b/docs/rc/group__grp__input__preprocessor__dl.html
new file mode 100644
index 0000000..d835f54
--- /dev/null
+++ b/docs/rc/group__grp__input__preprocessor__dl.html
@@ -0,0 +1,676 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Preprocessor for Images</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__input__preprocessor__dl.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Preprocessor for Images<div class="ingroups"><a class="el" href="group__grp__early__stage.html">Early Stage Development</a> &raquo; <a class="el" href="group__grp__dl.html">Deep Learning</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<dl class="section warning"><dt>Warning</dt><dd><em> This MADlib method is still in early stage development. Interface and implementation are subject to change. </em></dd></dl>
+<div class="toc"><b>Contents</b><ul>
+<li class="level1">
+<a href="#training_preprocessor_dl">Preprocessor for Training Image Data</a> </li>
+<li class="level1">
+<a href="#validation_preprocessor_dl">Preprocessor for Validation Image Data</a> </li>
+<li class="level1">
+<a href="#output">Output Tables</a> </li>
+<li class="level1">
+<a href="#example">Examples</a> </li>
+<li class="level1">
+<a href="#references">References</a> </li>
+<li class="level1">
+<a href="#related">Related Topics</a> </li>
+</ul>
+</div><p>This preprocessor is a utility that prepares image data for use by frameworks like Keras and TensorFlow that support mini-batching as an optimization option. The advantage of using mini-batching is that it can perform better than stochastic gradient descent because it uses more than one training example at a time, typically resulting in faster and smoother convergence [1].</p>
+<p>Images can be represented as an array of numbers where each element represents grayscale, RGB or other channel values for each pixel in the image. It is standard practice to normalize the image data before training. The normalizing constant in this module is parameterized, so it can be set depending on the format of image data used.</p>
+<p>There are two versions of the preprocessor: <a class="el" href="input__data__preprocessor_8sql__in.html#a11a26c03a879a4c7e40e3ba07ca39a22">training_preprocessor_dl()</a> preprocesses input image data to be used for training a deep learning model, while <a class="el" href="input__data__preprocessor_8sql__in.html#a744eb29240e53401353c50635ff60451">validation_preprocessor_dl()</a> preprocesses validation image data used for model evaluation.</p>
+<p><a class="anchor" id="training_preprocessor_dl"></a></p><dl class="section user"><dt>Preprocessor for Training Image Data</dt><dd></dd></dl>
+<pre class="syntax">
+training_preprocessor_dl(source_table,
+                         output_table,
+                         dependent_varname,
+                         independent_varname,
+                         buffer_size,
+                         normalizing_const,
+                         num_classes,
+                         distribution_rules
+                        )
+</pre><p><b>Arguments</b> </p><dl class="arglist">
+<dt>source_table </dt>
+<dd><p class="startdd">TEXT. Name of the table containing training dataset. Can also be a view. </p>
+<p class="enddd"></p>
+</dd>
+<dt>output_table </dt>
+<dd><p class="startdd">TEXT. Name of the output table from the training preprocessor which will be used as input to algorithms that support mini-batching. Note that the arrays packed into the output table are shuffled and normalized, by dividing each element in the independent variable array by the optional 'normalizing_const' parameter. For performance reasons, packed arrays are converted to PostgreSQL bytea format, which is a variable-length binary string.</p>
+<p>In the case a validation data set is used (see later on this page), this output table is also used as an input to the validation preprocessor so that the validation and training image data are both preprocessed in an identical manner. </p>
+<p class="enddd"></p>
+</dd>
+<dt>dependent_varname </dt>
+<dd>TEXT. Name of the dependent variable column. <dl class="section note"><dt>Note</dt><dd>The mini-batch preprocessor automatically 1-hot encodes dependent variables of all types. The exception is numeric array types (integer and float), where we assume these are already 1-hot encoded, so these will just be passed through as is. </dd></dl>
+</dd>
+<dt>independent_varname </dt>
+<dd><p class="startdd">TEXT. Name of the independent variable column. The column must be a numeric array type. </p>
+<p class="enddd"></p>
+</dd>
+<dt>buffer_size (optional) </dt>
+<dd>INTEGER, default: computed. Buffer size is the number of rows from the source table that are packed into one row of the preprocessor output table. In the case of images, the source table will have one image per row, and the output table will have multiple images per row. The default value is computed considering the sizes of the source table and images and the number of segments in the database cluster. <dl class="section note"><dt>Note</dt><dd>Using the default for 'buffer_size' will produce buffers that are relatively large, which generally results in the fastest fit() runtime with Keras. Setting a smaller buffer size may cause the preprocessor to run faster (although this is not guaranteed, since it depends on database cluster size, data set, and other factors). But since preprocessing is usually a one-time operation and fit() is called many times, by default buffer sizes are optimized to make fit() as fast as possible. Note that specifying a 'buffer_size' does not guarantee that exact value will be used. Actual buffer size is adjusted to avoid data skew, which adversely impacts fit() runtime. </dd></dl>
+</dd>
+<dt>normalizing_const (optional) </dt>
+<dd><p class="startdd">REAL, default: 1.0. The normalizing constant to divide each value in the 'independent_varname' array by. For example, you would use 255 for this value if the image data is in the form 0-255. </p>
+<p class="enddd"></p>
+</dd>
+<dt>num_classes (optional) </dt>
+<dd><p class="startdd">INTEGER, default: NULL. Number of class labels for 1-hot encoding. If NULL, the 1-hot encoded array length will be equal to the number of distinct class values found in the input table. </p>
+<p class="enddd"></p>
+</dd>
+<dt>distribution_rules (optional) </dt>
+<dd><p class="startdd">TEXT, default: 'all_segments'. Specifies how to distribute the 'output_table'. This is important for how the fit function will use resources on the cluster. The default 'all_segments' means the 'output_table' will be distributed to all segments in the database cluster.</p>
+<p>If you specify 'gpu_segments' then the 'output_table' will be distributed to all segments that are on hosts that have GPUs attached. This will make maximum use of GPU resources when training a deep learning model.</p>
+<p class="enddd">You can also specify the name of a resources table containing the segments to be used for training. This table must contain a column called 'dbid' that specifies the segment id from the 'gp_segment_configuration' table [2]. Refer to the utility function <a href="group__grp__gpu__configuration.html">GPU Configuration</a> for more information on how to identify segments attached to hosts that are GPU enabled.  </p>
+</dd>
+</dl>
+<p><a class="anchor" id="validation_preprocessor_dl"></a></p><dl class="section user"><dt>Preprocessor for Validation Image Data</dt><dd><pre class="syntax">
+validation_preprocessor_dl(source_table,
+                           output_table,
+                           dependent_varname,
+                           independent_varname,
+                           training_preprocessor_table,
+                           buffer_size,
+                           distribution_rules
+                          )
+</pre></dd></dl>
+<p><b>Arguments</b> </p><dl class="arglist">
+<dt>source_table </dt>
+<dd><p class="startdd">TEXT. Name of the table containing validation dataset. Can also be a view. </p>
+<p class="enddd"></p>
+</dd>
+<dt>output_table </dt>
+<dd><p class="startdd">TEXT. Name of the output table from the validation preprocessor which will be used as input to algorithms that support mini-batching. The arrays packed into the output table are normalized using the same normalizing constant from the training preprocessor as specified in the 'training_preprocessor_table' parameter described below. Validation data is not shuffled. For performance reasons, packed arrays are converted to PostgreSQL bytea format, which is a variable-length binary string. </p>
+<p class="enddd"></p>
+</dd>
+<dt>dependent_varname </dt>
+<dd>TEXT. Name of the dependent variable column. <dl class="section note"><dt>Note</dt><dd>The mini-batch preprocessor automatically 1-hot encodes dependent variables of all types. The exception is numeric array types (integer and float), where we assume these are already 1-hot encoded, so these will just be passed through as is. </dd></dl>
+</dd>
+<dt>independent_varname </dt>
+<dd><p class="startdd">TEXT. Name of the independent variable column. The column must be a numeric array type. </p>
+<p class="enddd"></p>
+</dd>
+<dt>training_preprocessor_table </dt>
+<dd><p class="startdd">TEXT. The output table obtained by running <a class="el" href="input__data__preprocessor_8sql__in.html#a11a26c03a879a4c7e40e3ba07ca39a22">training_preprocessor_dl()</a>. Validation data is preprocessed in the same way as training data, i.e., same normalizing constant and dependent variable class values. </p>
+<p class="enddd"></p>
+</dd>
+<dt>buffer_size (optional) </dt>
+<dd>INTEGER, default: computed. Buffer size is the number of rows from the source table that are packed into one row of the preprocessor output table. In the case of images, the source table will have one image per row, and the output table will have multiple images per row. The default value is computed considering the sizes of the source table and images and the number of segments in the database cluster. <dl class="section note"><dt>Note</dt><dd>Using the default for 'buffer_size' will produce buffers that are relatively large, which generally results in the fastest fit() runtime with Keras. Setting a smaller buffer size may cause the preprocessor to run faster (although this is not guaranteed, since it depends on database cluster size, data set, and other factors). But since preprocessing is usually a one-time operation and fit() is called many times, by default buffer sizes are optimized to make fit() as fast as possible. Note that specifying a 'buffer_size' does not guarantee that exact value will be used. Actual buffer size is adjusted to avoid data skew, which adversely impacts fit() runtime. </dd></dl>
+</dd>
+<dt>distribution_rules (optional) </dt>
+<dd><p class="startdd">TEXT, default: 'all_segments'. Specifies how to distribute the 'output_table'. This is important for how the fit function will use resources on the cluster. The default 'all_segments' means the 'output_table' will be distributed to all segments in the database cluster.</p>
+<p>If you specify 'gpu_segments' then the 'output_table' will be distributed to all segments that are on hosts that have GPUs attached. This will make maximum use of GPU resources when training a deep learning model.</p>
+<p>You can also specify the name of a resources table containing the segments to be used for training. This table must contain a column called 'dbid' that specifies the segment id from the 'gp_segment_configuration' table [2]. Refer to the utility function <a href="group__grp__gpu__configuration.html">GPU Configuration</a> for more information on how to identify segments attached to hosts that are GPU enabled. </p>
+<p class="enddd"></p>
+</dd>
+</dl>
+<p><a class="anchor" id="output"></a></p><dl class="section user"><dt>Output Tables</dt><dd><br />
+ The output tables produced by both <a class="el" href="input__data__preprocessor_8sql__in.html#a11a26c03a879a4c7e40e3ba07ca39a22">training_preprocessor_dl()</a> and <a class="el" href="input__data__preprocessor_8sql__in.html#a744eb29240e53401353c50635ff60451">validation_preprocessor_dl()</a> contain the following columns: <table class="output">
+<tr>
+<th>independent_var </th><td>BYTEA. Packed array of independent variables in PostgreSQL bytea format. Arrays of independent variables packed into the output table are normalized by dividing each element in the independent variable array by the optional 'normalizing_const' parameter. Training data is shuffled, but validation data is not.   </td></tr>
+<tr>
+<th>dependent_var </th><td>BYTEA. Packed array of dependent variables in PostgreSQL bytea format. The dependent variable is always one-hot encoded as an integer array. For now, we are assuming that input_preprocessor_dl() will be used only for classification problems using deep learning. So the dependent variable is one-hot encoded, unless it's already a numeric array in which case we assume it's already one-hot encoded and just cast it to an integer array.   </td></tr>
+<tr>
+<th>independent_var_shape </th><td>INTEGER[]. Shape of the independent variable array after preprocessing. The first element is the number of images packed per row, and subsequent elements will depend on how the image is described (e.g., channels first or last).   </td></tr>
+<tr>
+<th>dependent_var_shape </th><td>INTEGER[]. Shape of the dependent variable array after preprocessing. The first element is the number of images packed per row, and the second element is the number of class values.   </td></tr>
+<tr>
+<th>buffer_id </th><td>INTEGER. Unique id for each row in the packed table.   </td></tr>
+</table>
+</dd></dl>
+<p>A summary table named &lt;output_table&gt;_summary is also created, which has the following columns (the columns are the same for both <a class="el" href="input__data__preprocessor_8sql__in.html#a744eb29240e53401353c50635ff60451">validation_preprocessor_dl()</a> and <a class="el" href="input__data__preprocessor_8sql__in.html#a11a26c03a879a4c7e40e3ba07ca39a22">training_preprocessor_dl()</a> ): </p><table class="output">
+<tr>
+<th>source_table </th><td>Name of the source table.  </td></tr>
+<tr>
+<th>output_table </th><td>Name of output table generated by preprocessor.  </td></tr>
+<tr>
+<th>dependent_varname </th><td>Dependent variable from the source table.  </td></tr>
+<tr>
+<th>independent_varname </th><td>Independent variable from the source table.  </td></tr>
+<tr>
+<th>dependent_vartype </th><td>Type of the dependent variable from the source table.  </td></tr>
+<tr>
+<th>class_values </th><td>The dependent level values that one-hot encoding maps to.  </td></tr>
+<tr>
+<th>buffer_size </th><td>Buffer size used in preprocessing step.  </td></tr>
+<tr>
+<th>normalizing_const </th><td>The value used to normalize the input image data.  </td></tr>
+<tr>
+<th>num_classes </th><td>Number of dependent levels the one-hot encoding is created for. NULLs are padded at the end if the number of distinct class levels found in the input data is less than the 'num_classes' parameter specified in <a class="el" href="input__data__preprocessor_8sql__in.html#a11a26c03a879a4c7e40e3ba07ca39a22">training_preprocessor_dl()</a>.  </td></tr>
+<tr>
+<th>distribution_rules </th><td>This is the list of segment id's in the form of 'dbid' describing how the 'output_table' is distributed, as per the 'distribution_rules' input parameter. If the 'distribution_rules' parameter is set to 'all_segments', then this will also be set to 'all_segments'.  </td></tr>
+<tr>
+<th>__internal_gpu_config__ </th><td>For internal use. (Note: this is the list of segment id's where data is distributed in the form of 'content' id, which is different from 'dbid' [2].)  </td></tr>
+</table>
+<p><a class="anchor" id="example"></a></p><dl class="section user"><dt>Examples</dt><dd><ol type="1">
+<li>Create an artificial 2x2 resolution color image data set with 3 possible classifications. The RGB values are per-pixel arrays: <pre class="example">
+DROP TABLE IF EXISTS image_data;
+CREATE TABLE image_data AS (
+    SELECT ARRAY[
+        ARRAY[
+            ARRAY[(random() * 256)::integer, -- pixel (1,1)
+                (random() * 256)::integer,
+                (random() * 256)::integer],
+            ARRAY[(random() * 256)::integer, -- pixel (2,1)
+                (random() * 256)::integer,
+                (random() * 256)::integer]
+        ],
+        ARRAY[
+            ARRAY[(random() * 256)::integer, -- pixel (1,2)
+                (random() * 256)::integer,
+                (random() * 256)::integer],
+            ARRAY[(random() * 256)::integer, -- pixel (2,1)
+                (random() * 256)::integer,
+                (random() * 256)::integer]
+        ]
+    ] as rgb, ('{cat,dog,bird}'::text[])[ceil(random()*3)] as species
+    FROM generate_series(1, 52)
+);
+SELECT * FROM image_data;
+</pre> <pre class="result">
+                             rgb                              | species
+--------------------------------------------------------------+---------
+ {{{124,198,44},{91,47,130}},{{24,175,69},{196,189,166}}}     | dog
+ {{{111,202,129},{198,249,254}},{{141,37,88},{187,167,113}}}  | dog
+ {{{235,53,39},{145,167,209}},{{197,147,222},{55,218,53}}}    | dog
+ {{{231,48,125},{248,233,151}},{{63,125,230},{33,24,70}}}     | dog
+ {{{92,146,121},{163,241,110}},{{75,88,72},{218,90,12}}}      | bird
+ {{{88,114,59},{202,211,152}},{{92,76,58},{77,186,134}}}      | dog
+ {{{2,96,255},{14,48,19}},{{240,55,115},{137,255,245}}}       | dog
+ {{{165,122,98},{16,115,240}},{{4,106,116},{108,242,210}}}    | dog
+ {{{155,207,101},{214,167,24}},{{118,240,228},{199,230,21}}}  | dog
+ {{{94,212,15},{48,66,170}},{{255,167,128},{166,191,246}}}    | dog
+ {{{169,69,131},{16,98,225}},{{228,113,17},{38,27,17}}}       | bird
+ {{{156,183,139},{146,77,46}},{{80,202,230},{146,84,239}}}    | dog
+ {{{190,210,147},{227,31,66}},{{229,251,84},{51,118,240}}}    | bird
+ {{{253,175,200},{237,151,107}},{{207,56,162},{133,39,35}}}   | cat
+ {{{146,185,108},{14,10,105}},{{188,210,86},{83,61,36}}}      | dog
+ {{{223,169,177},{3,200,250}},{{112,91,16},{193,32,151}}}     | cat
+ {{{249,145,240},{144,153,58}},{{131,156,230},{56,50,75}}}    | dog
+ {{{212,186,229},{52,251,197}},{{230,121,201},{35,215,119}}}  | cat
+ {{{234,94,23},{114,196,94}},{{242,249,90},{223,24,109}}}     | bird
+ {{{111,36,145},{77,135,123}},{{171,158,237},{111,252,222}}}  | dog
+ {{{90,74,240},{231,133,95}},{{11,21,173},{146,144,88}}}      | cat
+ {{{170,52,237},{13,114,71}},{{87,99,46},{220,194,56}}}       | bird
+ {{{8,17,92},{64,2,203}},{{10,131,145},{4,129,30}}}           | cat
+ {{{217,218,207},{74,68,186}},{{127,107,76},{38,60,16}}}      | bird
+ {{{193,34,83},{203,99,58}},{{251,224,50},{228,118,113}}}     | dog
+ {{{146,218,155},{32,159,243}},{{146,218,189},{101,114,25}}}  | bird
+ {{{179,160,74},{204,81,246}},{{50,189,39},{60,42,185}}}      | cat
+ {{{13,82,174},{198,151,84}},{{65,249,100},{179,234,104}}}    | cat
+ {{{162,190,124},{184,66,138}},{{10,240,80},{161,68,145}}}    | dog
+ {{{164,144,199},{53,42,111}},{{122,174,128},{220,143,100}}}  | cat
+ {{{160,138,104},{177,86,3}},{{104,226,149},{181,16,229}}}    | dog
+ {{{246,119,211},{229,249,119}},{{117,192,172},{159,47,38}}}  | cat
+ {{{175,1,220},{18,78,124}},{{156,181,45},{242,185,148}}}     | bird
+ {{{50,113,246},{101,213,180}},{{56,103,151},{87,169,124}}}   | cat
+ {{{73,109,147},{22,81,197}},{{135,71,42},{91,251,98}}}       | bird
+ {{{206,61,255},{25,151,211}},{{211,124,7},{206,64,237}}}     | cat
+ {{{201,71,34},{182,142,43}},{{198,172,171},{230,1,23}}}      | bird
+ {{{142,158,2},{223,45,205}},{{118,177,223},{232,178,141}}}   | cat
+ {{{86,190,128},{195,172,14}},{{97,173,237},{142,123,99}}}    | cat
+ {{{26,72,148},{79,226,156}},{{96,62,220},{99,9,230}}}        | bird
+ {{{154,234,103},{184,18,65}},{{146,225,139},{214,156,10}}}   | cat
+ {{{244,169,103},{218,143,2}},{{196,246,186},{214,55,76}}}    | bird
+ {{{20,226,7},{96,153,200}},{{130,236,147},{229,38,142}}}     | bird
+ {{{172,102,107},{50,11,109}},{{145,9,123},{193,28,107}}}     | bird
+ {{{143,243,247},{132,104,137}},{{94,3,169},{253,246,59}}}    | bird
+ {{{78,74,228},{51,200,218}},{{170,155,190},{164,18,51}}}     | dog
+ {{{163,226,161},{56,182,239}},{{129,154,35},{73,116,205}}}   | bird
+ {{{74,243,3},{172,182,149}},{{101,34,163},{111,138,95}}}     | cat
+ {{{224,178,126},{4,61,93}},{{174,238,96},{118,232,208}}}     | bird
+ {{{55,236,249},{7,189,242}},{{151,173,130},{49,232,5}}}      | bird
+ {{{9,16,30},{128,32,85}},{{108,25,91},{41,11,243}}}          | bird
+ {{{141,35,191},{146,240,141}},{{207,239,166},{102,194,121}}} | bird
+(52 rows)
+</pre></li>
+<li>Run the preprocessor for training image data: <pre class="example">
+DROP TABLE IF EXISTS image_data_packed, image_data_packed_summary;
+SELECT madlib.training_preprocessor_dl('image_data',         -- Source table
+                                        'image_data_packed',  -- Output table
+                                        'species',            -- Dependent variable
+                                        'rgb',                -- Independent variable
+                                        NULL,                 -- Buffer size
+                                        255                   -- Normalizing constant
+                                        );
+</pre> For small datasets like in this example, buffer size is mainly determined by the number of segments in the database. For a Greenplum database with 2 segments, there will be 2 rows with a buffer size of 26. For PostgresSQL, there would be only one row with a buffer size of 52 since it is a single node database. For larger data sets, other factors go into computing buffers size besides number of segments. Here is the packed output table of training data for our simple example: <pre class="example">
+SELECT independent_var_shape, dependent_var_shape, buffer_id FROM image_data_packed ORDER BY buffer_id;
+</pre> <pre class="result">
+ independent_var_shape | dependent_var_shape | buffer_id
+-----------------------+---------------------+-----------
+ {26,2,2,3}            | {26,3}              |         0
+ {26,2,2,3}            | {26,3}              |         1
+(2 rows)
+</pre> Review the output summary table: <pre class="example">
+\x on
+SELECT * FROM image_data_packed_summary;
+</pre> <pre class="result">
+-[ RECORD 1 ]-----------+------------------
+source_table            | image_data
+output_table            | image_data_packed
+dependent_varname       | species
+independent_varname     | rgb
+dependent_vartype       | text
+class_values            | {bird,cat,dog}
+buffer_size             | 26
+normalizing_const       | 255
+num_classes             | 3
+distribution_rules      | all_segments
+__internal_gpu_config__ | all_segments
+</pre></li>
+<li>Run the preprocessor for the validation dataset. In this example, we use the same images for validation to demonstrate, but normally validation data is different than training data: <pre class="example">
+DROP TABLE IF EXISTS val_image_data_packed, val_image_data_packed_summary;
+SELECT madlib.validation_preprocessor_dl(
+      'image_data',             -- Source table
+      'val_image_data_packed',  -- Output table
+      'species',                -- Dependent variable
+      'rgb',                    -- Independent variable
+      'image_data_packed',      -- From training preprocessor step
+      NULL                      -- Buffer size
+      );
+</pre> We could choose to use a different buffer size compared to the training_preprocessor_dl run (but generally don't need to). Other parameters such as num_classes and normalizing_const that were passed to training_preprocessor_dl are automatically inferred using the image_data_packed param that is passed. Here is the packed output table of validation data for our simple example: <pre class="example">
+SELECT independent_var_shape, dependent_var_shape, buffer_id FROM val_image_data_packed ORDER BY buffer_id;
+</pre> <pre class="result">
+ independent_var_shape | dependent_var_shape | buffer_id
+-----------------------+---------------------+-----------
+ {26,2,2,3}            | {26,3}              |         0
+ {26,2,2,3}            | {26,3}              |         1
+(2 rows)
+</pre> Review the output summary table: <pre class="example">
+\x on
+SELECT * FROM val_image_data_packed_summary;
+</pre> <pre class="result">
+-[ RECORD 1 ]-----------+----------------------
+source_table            | image_data
+output_table            | val_image_data_packed
+dependent_varname       | species
+independent_varname     | rgb
+dependent_vartype       | text
+class_values            | {bird,cat,dog}
+buffer_size             | 26
+normalizing_const       | 255
+num_classes             | 3
+distribution_rules      | all_segments
+__internal_gpu_config__ | all_segments
+</pre></li>
+<li>Load data in another format. Create an artificial 2x2 resolution color image data set with 3 possible classifications. The RGB values are unrolled into a flat array: <pre class="example">
+DROP TABLE IF EXISTS image_data;
+CREATE TABLE image_data AS (
+SELECT ARRAY[
+        (random() * 256)::integer, -- R values
+        (random() * 256)::integer,
+        (random() * 256)::integer,
+        (random() * 256)::integer,
+        (random() * 256)::integer, -- G values
+        (random() * 256)::integer,
+        (random() * 256)::integer,
+        (random() * 256)::integer,
+        (random() * 256)::integer, -- B values
+        (random() * 256)::integer,
+        (random() * 256)::integer,
+        (random() * 256)::integer
+    ] as rgb, ('{cat,dog,bird}'::text[])[ceil(random()*3)] as species
+FROM generate_series(1, 52)
+);
+SELECT * FROM image_data;
+</pre> <pre class="result">
+                       rgb                        | species
+--------------------------------------------------+---------
+ {26,150,191,113,235,57,145,143,44,145,85,25}     | dog
+ {240,43,225,15,220,136,186,209,49,130,55,111}    | bird
+ {25,191,37,77,193,62,249,228,97,33,81,7}         | cat
+ {141,223,46,195,201,19,207,78,160,130,157,89}    | cat
+ {39,249,168,164,223,193,99,4,14,37,66,7}         | cat
+ {159,250,127,44,151,254,11,211,247,137,79,233}   | cat
+ {19,230,76,253,42,175,230,143,184,133,27,215}    | cat
+ {199,224,144,5,64,19,200,186,109,218,108,70}     | bird
+ {148,136,4,41,185,104,203,253,113,151,166,76}    | bird
+ {230,132,114,213,210,139,91,199,240,142,203,75}  | bird
+ {166,188,96,217,135,70,93,249,27,47,132,118}     | bird
+ {118,120,222,236,110,83,240,47,19,206,222,51}    | bird
+ {230,3,26,47,93,144,167,59,123,21,142,107}       | cat
+ {250,224,62,136,112,142,88,187,24,1,168,216}     | bird
+ {52,144,231,12,76,1,162,11,114,141,69,3}         | cat
+ {166,172,246,169,200,102,62,57,239,75,165,88}    | dog
+ {151,50,112,227,199,97,47,4,43,123,116,133}      | bird
+ {39,185,96,127,80,248,177,191,218,120,32,9}      | dog
+ {25,172,34,34,40,109,166,23,60,216,246,54}       | bird
+ {163,39,89,170,95,230,137,141,169,82,159,121}    | dog
+ {131,143,183,138,151,90,177,240,4,16,214,141}    | dog
+ {99,233,100,9,159,140,30,202,29,169,120,62}      | bird
+ {99,162,69,10,204,169,219,20,106,170,111,16}     | bird
+ {16,246,27,32,187,226,0,75,231,64,94,175}        | bird
+ {25,135,244,101,50,4,91,77,36,22,47,37}          | dog
+ {22,101,191,197,96,138,78,198,155,138,193,51}    | bird
+ {236,22,110,30,181,20,218,21,236,97,91,73}       | dog
+ {160,57,34,212,239,197,233,174,164,97,88,153}    | cat
+ {226,170,192,123,242,224,190,51,163,192,91,105}  | bird
+ {149,174,12,72,112,1,37,153,118,201,79,121}      | bird
+ {34,250,232,222,218,221,234,201,138,66,186,58}   | bird
+ {162,55,85,159,247,234,77,3,50,189,4,87}         | dog
+ {122,32,164,243,0,198,237,232,164,199,197,142}   | dog
+ {80,209,75,138,169,236,193,254,140,184,232,217}  | bird
+ {112,148,114,137,13,107,105,75,243,218,218,75}   | dog
+ {241,76,61,202,76,112,90,51,125,166,52,30}       | bird
+ {75,132,239,207,49,224,250,19,238,214,154,169}   | dog
+ {203,43,222,58,231,5,243,71,131,67,63,52}        | cat
+ {229,12,133,142,179,80,185,145,138,160,149,125}  | bird
+ {64,251,61,153,13,100,145,181,8,112,118,107}     | dog
+ {128,223,60,248,126,124,243,188,20,0,31,166}     | bird
+ {39,22,43,146,138,174,33,65,56,184,155,234}      | dog
+ {177,247,133,154,159,37,148,30,81,43,29,92}      | bird
+ {56,127,199,118,105,120,109,239,18,12,20,166}    | cat
+ {101,209,72,193,207,91,166,27,88,209,203,62}     | dog
+ {131,195,122,90,18,178,217,217,40,66,81,149}     | cat
+ {203,137,103,17,60,251,152,64,36,81,168,239}     | cat
+ {239,97,10,20,194,32,121,129,228,217,11,50}      | dog
+ {117,4,193,192,223,176,33,232,196,226,8,61}      | dog
+ {162,21,190,223,120,170,245,230,200,170,250,163} | bird
+ {32,67,65,195,2,39,198,28,86,35,172,254}         | dog
+ {39,19,236,146,87,140,203,121,96,187,62,73}      | dog
+(52 rows)
+</pre></li>
+<li>Run the preprocessor for training image data: <pre class="example">
+DROP TABLE IF EXISTS image_data_packed, image_data_packed_summary;
+SELECT madlib.training_preprocessor_dl('image_data',         -- Source table
+                                        'image_data_packed',  -- Output table
+                                        'species',            -- Dependent variable
+                                        'rgb',                -- Independent variable
+                                        NULL,                 -- Buffer size
+                                        255                   -- Normalizing constant
+                                        );
+</pre> Here is a sample of the packed output table: <pre class="example">
+SELECT independent_var_shape, dependent_var_shape, buffer_id FROM image_data_packed ORDER BY buffer_id;
+</pre> <pre class="result">
+ independent_var_shape | dependent_var_shape | buffer_id
+-----------------------+---------------------+-----------
+ {26,12}               | {26,3}              |         0
+ {26,12}               | {26,3}              |         1
+(2 rows)
+</pre></li>
+<li>Run the preprocessor for the validation dataset. In this example, we use the same images for validation to demonstrate, but normally validation data is different than training data: <pre class="example">
+DROP TABLE IF EXISTS val_image_data_packed, val_image_data_packed_summary;
+SELECT madlib.validation_preprocessor_dl(
+    'image_data',             -- Source table
+    'val_image_data_packed',  -- Output table
+    'species',                -- Dependent variable
+    'rgb',                    -- Independent variable
+    'image_data_packed',      -- From training preprocessor step
+    NULL                      -- Buffer size
+    );
+</pre> Here is a sample of the packed output summary table: <pre class="example">
+SELECT independent_var_shape, dependent_var_shape, buffer_id FROM val_image_data_packed ORDER BY buffer_id;
+</pre> <pre class="result">
+ independent_var_shape | dependent_var_shape | buffer_id
+-----------------------+---------------------+-----------
+ {26,12}               | {26,3}              |         0
+ {26,12}               | {26,3}              |         1
+(2 rows)
+</pre></li>
+<li>Generally the default buffer size will work well, but if you have occasion to change it: <pre class="example">
+DROP TABLE IF EXISTS image_data_packed, image_data_packed_summary;
+SELECT madlib.training_preprocessor_dl('image_data',         -- Source table
+                                       'image_data_packed',  -- Output table
+                                       'species',            -- Dependent variable
+                                       'rgb',                -- Independent variable
+                                        10,                   -- Buffer size
+                                        255                   -- Normalizing constant
+                                        );
+SELECT independent_var_shape, dependent_var_shape, buffer_id FROM image_data_packed ORDER BY buffer_id;
+</pre> <pre class="result">
+ independent_var_shape | dependent_var_shape | buffer_id
+-----------------------+---------------------+-----------
+ {8,12}                | {8,3}               |         0
+ {9,12}                | {9,3}               |         1
+ {9,12}                | {9,3}               |         2
+ {9,12}                | {9,3}               |         3
+ {9,12}                | {9,3}               |         4
+ {8,12}                | {8,3}               |         5
+(6 rows)
+</pre> Review the output summary table: <pre class="example">
+\x on
+SELECT * FROM image_data_packed_summary;
+</pre> <pre class="result">
+-[ RECORD 1 ]-----------+------------------
+source_table            | image_data
+output_table            | image_data_packed
+dependent_varname       | species
+independent_varname     | rgb
+dependent_vartype       | text
+class_values            | {bird,cat,dog}
+buffer_size             | 10
+normalizing_const       | 255
+num_classes             | 3
+distribution_rules      | all_segments
+__internal_gpu_config__ | all_segments
+</pre></li>
+<li>Run the preprocessor for image data with num_classes greater than 3 (distinct class values found in table): <pre class="example">
+DROP TABLE IF EXISTS image_data_packed, image_data_packed_summary;
+SELECT madlib.training_preprocessor_dl('image_data',         -- Source table
+                                        'image_data_packed',  -- Output table
+                                        'species',            -- Dependent variable
+                                        'rgb',                -- Independent variable
+                                        NULL,                 -- Buffer size
+                                        255,                  -- Normalizing constant
+                                        5                     -- Number of desired class values
+                                        );
+</pre> Here is a sample of the packed output table with the padded 1-hot vector: <pre class="example">
+SELECT independent_var_shape, dependent_var_shape, buffer_id FROM image_data_packed ORDER BY buffer_id;
+</pre> <pre class="result">
+ independent_var_shape | dependent_var_shape | buffer_id
+-----------------------+---------------------+-----------
+ {26,12}               | {26,5}              |         0
+ {26,12}               | {26,5}              |         1
+(2 rows)
+</pre> Review the output summary table: <pre class="example">
+\x on
+SELECT * FROM image_data_packed_summary;
+</pre> <pre class="result">
+-[ RECORD 1 ]-----------+-------------------------
+source_table            | image_data
+output_table            | image_data_packed
+dependent_varname       | species
+independent_varname     | rgb
+dependent_vartype       | text
+class_values            | {bird,cat,dog,NULL,NULL}
+buffer_size             | 26
+normalizing_const       | 255
+num_classes             | 5
+distribution_rules      | all_segments
+__internal_gpu_config__ | all_segments
+</pre></li>
+<li>Using distribution rules to specify how to distribute the 'output_table'. This is important for how the fit function will use resources on the cluster. To distribute to all segments on hosts with GPUs attached: <pre class="example">
+DROP TABLE IF EXISTS image_data_packed, image_data_packed_summary;
+SELECT madlib.training_preprocessor_dl('image_data',          -- Source table
+                                        'image_data_packed',  -- Output table
+                                        'species',            -- Dependent variable
+                                        'rgb',                -- Independent variable
+                                        NULL,                 -- Buffer size
+                                        255,                  -- Normalizing constant
+                                        NULL,                 -- Number of classes
+                                        'gpu_segments'        -- Distribution rules
+                                        );
+\x on
+SELECT * FROM image_data_packed_summary;
+</pre> <pre class="result">
+-[ RECORD 1 ]-----------+------------------
+source_table            | image_data
+output_table            | image_data_packed
+dependent_varname       | species
+independent_varname     | rgb
+dependent_vartype       | text
+class_values            | {bird,cat,dog}
+buffer_size             | 26
+normalizing_const       | 255
+num_classes             | 3
+distribution_rules      | {2,3,4,5}
+__internal_gpu_config__ | {0,1,2,3}
+</pre> To distribute to only specified segments, create a distribution table with a column called 'dbid' that lists the segments you want: <pre class="example">
+DROP TABLE IF EXISTS segments_to_use;
+CREATE TABLE segments_to_use(
+    dbid INTEGER,
+    hostname TEXT
+);
+INSERT INTO segments_to_use VALUES
+(2, 'hostname-01'),
+(3, 'hostname-01');
+DROP TABLE IF EXISTS image_data_packed, image_data_packed_summary;
+SELECT madlib.training_preprocessor_dl('image_data',          -- Source table
+                                        'image_data_packed',  -- Output table
+                                        'species',            -- Dependent variable
+                                        'rgb',                -- Independent variable
+                                        NULL,                 -- Buffer size
+                                        255,                  -- Normalizing constant
+                                        NULL,                 -- Number of classes
+                                        'segments_to_use'     -- Distribution rules
+                                        );
+\x on
+SELECT * FROM image_data_packed_summary;
+</pre> <pre class="result">
+-[ RECORD 1 ]-----------+------------------
+source_table            | image_data
+output_table            | image_data_packed
+dependent_varname       | species
+independent_varname     | rgb
+dependent_vartype       | text
+class_values            | {bird,cat,dog}
+buffer_size             | 26
+normalizing_const       | 255
+num_classes             | 3
+distribution_rules      | {2,3}
+__internal_gpu_config__ | {0,1}
+</pre></li>
+</ol>
+</dd></dl>
+<p><a class="anchor" id="references"></a></p><dl class="section user"><dt>References</dt><dd></dd></dl>
+<p>[1] "Neural Networks for Machine Learning", Lectures 6a and 6b on mini-batch gradient descent, Geoffrey Hinton with Nitish Srivastava and Kevin Swersky, <a href="http://www.cs.toronto.edu/~tijmen/csc321/slides/lecture_slides_lec6.pdf">http://www.cs.toronto.edu/~tijmen/csc321/slides/lecture_slides_lec6.pdf</a></p>
+<p>[2] Greenplum 'gp_segment_configuration' table <a href="https://gpdb.docs.pivotal.io/latest/ref_guide/system_catalogs/gp_segment_configuration.html">https://gpdb.docs.pivotal.io/latest/ref_guide/system_catalogs/gp_segment_configuration.html</a></p>
+<p><a class="anchor" id="related"></a></p><dl class="section user"><dt>Related Topics</dt><dd></dd></dl>
+<p><a class="el" href="input__data__preprocessor_8sql__in.html#a11a26c03a879a4c7e40e3ba07ca39a22">training_preprocessor_dl()</a></p>
+<p><a class="el" href="input__data__preprocessor_8sql__in.html#a744eb29240e53401353c50635ff60451">validation_preprocessor_dl()</a></p>
+<p><a class="el" href="madlib__keras__gpu__info_8sql__in.html#a6137bdc8ae8450e34402b2284e433163">gpu_configuration()</a> </p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__keras.html b/docs/rc/group__grp__keras.html
new file mode 100644
index 0000000..be9102f
--- /dev/null
+++ b/docs/rc/group__grp__keras.html
@@ -0,0 +1,1173 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Keras</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__keras.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Keras<div class="ingroups"><a class="el" href="group__grp__early__stage.html">Early Stage Development</a> &raquo; <a class="el" href="group__grp__dl.html">Deep Learning</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b><ul>
+<li class="level1">
+<a href="#keras_fit">Fit</a> </li>
+<li class="level1">
+<a href="#keras_evaluate">Evaluate</a> </li>
+<li class="level1">
+<a href="#keras_predict">Predict</a> </li>
+<li class="level1">
+<a href="#keras_predict_byom">Predict BYOM</a> </li>
+<li class="level1">
+<a href="#example">Examples</a> </li>
+<li class="level1">
+<a href="#notes">Notes</a> </li>
+<li class="level1">
+<a href="#background">Technical Background</a> </li>
+<li class="level1">
+<a href="#literature">Literature</a> </li>
+<li class="level1">
+<a href="#related">Related Topics</a> </li>
+</ul>
+</div><dl class="section warning"><dt>Warning</dt><dd><em> This MADlib method is still in early stage development. Interface and implementation are subject to change. </em></dd></dl>
+<p>This module allows you to use SQL to call deep learning models designed in Keras [1], which is a high-level neural network API written in Python. Keras was developed for fast experimentation. It can run on top of different backends and the one that is currently supported by MADlib is TensorFlow [2]. The implementation in MADlib is distributed and designed to train a single model across multiple segments (workers) in Greenplum database. (PostgreSQL is also supported.) Alternatively, to train multiple models at the same time for model architecture search or hyperparameter tuning, you can use <a href="group__grp__keras__run__model__selection.html">Model Selection</a>.</p>
+<p>The main use case is image classification using sequential models, which are made up of a linear stack of layers. This includes multilayer perceptrons (MLPs) and convolutional neural networks (CNNs). Regression is not currently supported.</p>
+<p>Before using Keras in MADlib you will need to mini-batch your training and evaluation datasets by calling the <a href="group__grp__input__preprocessor__dl.html">Preprocessor for Images</a> which is a utility that prepares image data for use by models that support mini-batch as an optimization option. This is a one-time operation and you would only need to re-run the preprocessor if your input data has changed. The advantage of using mini-batching is that it can perform better than stochastic gradient descent because it uses more than one training example at a time, typically resulting faster and smoother convergence [3].</p>
+<p>You can also do inference on models that have not been trained in MADlib, but rather imported from an external source. This is in the section called "Predict BYOM" below, where "BYOM" stands for "Bring Your Own Model."</p>
+<p>Note that the following MADlib functions are targeting a specific Keras version (2.2.4) with a specific TensorFlow kernel version (1.14). Using a newer or older version may or may not work as intended.</p>
+<dl class="section note"><dt>Note</dt><dd>CUDA GPU memory cannot be released until the process holding it is terminated. When a MADlib deep learning function is called with GPUs, Greenplum internally creates a process (called a slice) which calls TensorFlow to do the computation. This process holds the GPU memory until one of the following two things happen: query finishes and user logs out of the Postgres client/session; or, query finishes and user waits for the timeout set by gp_vmem_idle_resource_timeout. The default value for this timeout is 18 sec [8]. So the recommendation is: log out/reconnect to the session after every GPU query; or wait for gp_vmem_idle_resource_timeout before you run another GPU query (you can also set it to a lower value).</dd></dl>
+<p><a class="anchor" id="keras_fit"></a></p><dl class="section user"><dt>Fit</dt><dd>The fit (training) function has the following format:</dd></dl>
+<pre class="syntax">
+madlib_keras_fit(
+    source_table,
+    model,
+    model_arch_table,
+    model_id,
+    compile_params,
+    fit_params,
+    num_iterations,
+    use_gpus,
+    validation_table,
+    metrics_compute_frequency,
+    warm_start,
+    name,
+    description
+    )
+</pre><p><b>Arguments</b> </p><dl class="arglist">
+<dt>source_table </dt>
+<dd><p class="startdd">TEXT. Name of the table containing the training data. This is the name of the output table from the image preprocessor. Independent and dependent variables are specified in the preprocessor step which is why you do not need to explictly state them here as part of the fit function.</p>
+<p class="enddd"></p>
+</dd>
+<dt>model </dt>
+<dd><p class="startdd">TEXT. Name of the output table containing the model. Details of the output table are shown below. </p>
+<p class="enddd"></p>
+</dd>
+<dt>model_arch_table </dt>
+<dd><p class="startdd">TEXT. Name of the table containing the model architecture and (optionally) initial weights to use for training. </p>
+<p class="enddd"></p>
+</dd>
+<dt>model_id </dt>
+<dd><p class="startdd">INTEGER. This is the id in 'model_arch_table' containing the model architecture and (optionally) initial weights to use for training. </p>
+<p class="enddd"></p>
+</dd>
+<dt>compile_params </dt>
+<dd><p class="startdd">TEXT. Parameters passed to the compile method of the Keras model class [4]. These parameters will be passed through as is so they must conform to the Keras API definition. As an example, you might use something like: <em>loss='categorical_crossentropy', optimizer='adam', metrics=['acc']</em>. The mandatory parameters that must be specified are 'optimizer' and 'loss'. Others are optional and will use the default values as per Keras if not specified here. Also, when specifying 'loss' and 'metrics' do <em>not</em> include the module and submodule prefixes like <em>loss='losses.categorical_crossentropy'</em> or <em>optimizer='keras.optmizers.adam'</em>.</p>
+<dl class="section note"><dt>Note</dt><dd>The following loss function is not supported: <em>sparse_categorical_crossentropy</em>. The following metrics are not supported: <em>sparse_categorical_accuracy, top_k_categorical_accuracy, sparse_top_k_categorical_accuracy</em> and custom metrics.</dd></dl>
+<p class="enddd"></p>
+</dd>
+<dt>fit_params  </dt>
+<dd><p class="startdd">TEXT. Parameters passed to the fit method of the Keras model class [4]. These will be passed through as is so they must conform to the Keras API definition. As an example, you might use something like: <em>batch_size=128, epochs=4</em>. There are no mandatory parameters so if you specify NULL, it will use all default values as per Keras. </p>
+<p class="enddd"></p>
+</dd>
+<dt>num_iterations </dt>
+<dd><p class="startdd">INTEGER. Number of iterations to train. </p>
+<p class="enddd"></p>
+</dd>
+<dt>use_gpus (optional) </dt>
+<dd><p class="startdd">BOOLEAN, default: FALSE (i.e., CPU). Determines whether GPUs are to be used for training the neural network. Set to TRUE to use GPUs.</p>
+<dl class="section note"><dt>Note</dt><dd>This parameter must not conflict with how the distribution rules are set in the preprocessor function. For example, if you set a distribution rule to use certain segments on hosts that do not have GPUs attached, you will get an error if you set ‘use_gpus’ to TRUE. Also, we have seen some memory related issues when segments share GPU resources. For example, if you have 1 GPU per segment host and your cluster has 4 segments per segment host, it means that all 4 segments will share the same GPU on each host. The current recommended configuration is 1 GPU per segment. </dd></dl>
+</dd>
+<dt>validation_table (optional) </dt>
+<dd><p class="startdd">TEXT, default: none. Name of the table containing the validation dataset. Note that the validation dataset must be preprocessed in the same way as the training dataset, so this is the name of the output table from running the image preprocessor on the validation dataset. Using a validation dataset can mean a longer training time, depending on its size. This can be controlled using the 'metrics_compute_frequency' paremeter described below.</p>
+<p class="enddd"></p>
+</dd>
+<dt>metrics_compute_frequency (optional) </dt>
+<dd><p class="startdd">INTEGER, default: once at the end of training after 'num_iterations'. Frequency to compute per-iteration metrics for the training dataset and validation dataset (if specified). There can be considerable cost to computing metrics every iteration, especially if the training dataset is large. This parameter is a way of controlling the frequency of those computations. For example, if you specify 5, then metrics will be computed every 5 iterations as well as at the end of training after 'num_iterations'. If you use the default, metrics will be computed only once after 'num_iterations' have completed. </p>
+<p class="enddd"></p>
+</dd>
+<dt>warm_start (optional) </dt>
+<dd><p class="startdd">BOOLEAN, default: FALSE. Initalize weights with the coefficients from the last call of the fit function. If set to TRUE, weights will be initialized from the model table generated by the previous training run.</p>
+<dl class="section note"><dt>Note</dt><dd>The warm start feature works based on the name of the model output table from a previous training run. When using warm start, do not drop the model output table or the model output summary table before calling the fit function, since these are needed to obtain the weights from the previous run. If you are not using warm start, the model output table and the model output table summary must be dropped in the usual way before calling the training function. </dd></dl>
+</dd>
+<dt>name (optional) </dt>
+<dd><p class="startdd">TEXT, default: NULL. Free text string to identify a name, if desired. </p>
+<p class="enddd"></p>
+</dd>
+<dt>description (optional) </dt>
+<dd>TEXT, default: NULL. Free text string to provide a description, if desired.  </dd>
+</dl>
+<p><b>Output tables</b> <br />
+ The model table produced by fit contains the following columns: </p><table class="output">
+<tr>
+<th>model_weights </th><td>BYTEA8. Byte array containing the weights of the neural net.  </td></tr>
+<tr>
+<th>model_arch </th><td>TEXT. A JSON representation of the model architecture used in training.  </td></tr>
+</table>
+<p>A summary table named &lt;model&gt;_summary is also created, which has the following columns: </p><table class="output">
+<tr>
+<th>source_table </th><td>Source table used for training.  </td></tr>
+<tr>
+<th>model </th><td>Model output table produced by training.  </td></tr>
+<tr>
+<th>independent_varname </th><td>Independent variables column from the original source table in the image preprocessing step.  </td></tr>
+<tr>
+<th>dependent_varname </th><td>Dependent variable column from the original source table in the image preprocessing step.  </td></tr>
+<tr>
+<th>model_arch_table </th><td>Name of the table containing the model architecture and (optionally) the initial model weights.  </td></tr>
+<tr>
+<th>model_id </th><td>The id of the model in the model architecture table used for training.  </td></tr>
+<tr>
+<th>compile_params </th><td>Compile parameters passed to Keras.  </td></tr>
+<tr>
+<th>fit_params </th><td>Fit parameters passed to Keras.  </td></tr>
+<tr>
+<th>num_iterations </th><td>Number of iterations of training completed.  </td></tr>
+<tr>
+<th>validation_table </th><td>Name of the table containing the validation dataset (if specified).  </td></tr>
+<tr>
+<th>metrics_compute_frequency </th><td>Frequency that per-iteration metrics are computed for the training dataset and validation dataset.  </td></tr>
+<tr>
+<th>name </th><td>Name of the training run (free text).  </td></tr>
+<tr>
+<th>description </th><td>Description of the training run (free text).  </td></tr>
+<tr>
+<th>model_type </th><td>General identifier for type of model trained. Currently says 'madlib_keras'.  </td></tr>
+<tr>
+<th>model_size </th><td>Size of the model in KB. Models are stored in 'bytea' data format which is used for binary strings in PostgreSQL type databases.  </td></tr>
+<tr>
+<th>start_training_time </th><td>Timestamp for start of training.  </td></tr>
+<tr>
+<th>end_training_time </th><td>Timestamp for end of training.  </td></tr>
+<tr>
+<th>metrics_elapsed_time </th><td>Array of elapsed time for metric computations as per the 'metrics_compute_frequency' parameter. Useful for drawing a curve showing loss, accuracy or other metrics as a function of time. For example, if 'metrics_compute_frequency=5' this would be an array of elapsed time for every 5th iteration, plus the last iteration.  </td></tr>
+<tr>
+<th>madlib_version </th><td>Version of MADlib used.  </td></tr>
+<tr>
+<th>num_classes </th><td>Count of distinct classes values used.  </td></tr>
+<tr>
+<th>class_values </th><td>Array of actual class values used.  </td></tr>
+<tr>
+<th>dependent_vartype </th><td>Data type of the dependent variable.  </td></tr>
+<tr>
+<th>normalizing_constant </th><td>Normalizing constant used from the image preprocessing step.  </td></tr>
+<tr>
+<th>metrics_type </th><td>Metric specified in the 'compile_params'.  </td></tr>
+<tr>
+<th>training_metrics_final </th><td>Final value of the training metric after all iterations have completed. The metric reported is the one specified in the 'metrics_type' parameter.  </td></tr>
+<tr>
+<th>training_loss_final </th><td>Final value of the training loss after all iterations have completed.  </td></tr>
+<tr>
+<th>training_metrics </th><td>Array of training metrics as per the 'metrics_compute_frequency' parameter. For example, if 'metrics_compute_frequency=5' this would be an array of metrics for every 5th iteration, plus the last iteration.  </td></tr>
+<tr>
+<th>training_loss </th><td>Array of training losses as per the 'metrics_compute_frequency' parameter. For example, if 'metrics_compute_frequency=5' this would be an array of losses for every 5th iteration, plus the last iteration.  </td></tr>
+<tr>
+<th>validation_metrics_final </th><td>Final value of the validation metric after all iterations have completed. The metric reported is the one specified in the 'metrics_type' parameter.  </td></tr>
+<tr>
+<th>validation_loss_final </th><td>Final value of the validation loss after all iterations have completed.  </td></tr>
+<tr>
+<th>validation_metrics </th><td>Array of validation metrics as per the 'metrics_compute_frequency' parameter. For example, if 'metrics_compute_frequency=5' this would be an array of metrics for every 5th iteration, plus the last iteration.  </td></tr>
+<tr>
+<th>validation_loss </th><td>Array of validation losses as per the 'metrics_compute_frequency' parameter. For example, if 'metrics_compute_frequency=5' this would be an array of losses for every 5th iteration, plus the last iteration.  </td></tr>
+<tr>
+<th>metrics_iters </th><td>Array indicating the iterations for which metrics are calculated, as derived from the parameters 'num_iterations' and 'metrics_compute_frequency'. For example, if 'num_iterations=5' and 'metrics_compute_frequency=2', then 'metrics_iters' value would be {2,4,5} indicating that metrics were computed at iterations 2, 4 and 5 (at the end). If 'num_iterations=5' and 'metrics_compute_frequency=1', then 'metrics_iters' value would be {1,2,3,4,5} indicating that metrics were computed at every iteration.  </td></tr>
+</table>
+<p><a class="anchor" id="keras_evaluate"></a></p><dl class="section user"><dt>Evaluate</dt><dd>The evaluation function has the following format:</dd></dl>
+<pre class="syntax">
+madlib_keras_evaluate(
+    model_table,
+    test_table,
+    output_table,
+    use_gpus,
+    mst_key
+    )
+</pre><p><b>Arguments</b> </p><dl class="arglist">
+<dt>model_table </dt>
+<dd><p class="startdd">TEXT. Name of the table containing the model to use for validation. </p>
+<p class="enddd"></p>
+</dd>
+<dt>test_table </dt>
+<dd><p class="startdd">TEXT. Name of the table containing the evaluation dataset. Note that test/validation data must be preprocessed in the same way as the training dataset, so this is the name of the output table from the image preprocessor. Independent and dependent variables are specified in the preprocessor step which is why you do not need to explictly state them here as part of the fit function.</p>
+<p class="enddd"></p>
+</dd>
+<dt>output_table </dt>
+<dd>TEXT. Name of table that validation output will be written to. Table contains: <table class="output">
+<tr>
+<th>loss </th><td>Loss value on evaluation dataset.  </td></tr>
+<tr>
+<th>metric </th><td>Metric value on evaluation dataset, where 'metrics_type' below identifies the type of metric.  </td></tr>
+<tr>
+<th>metrics_type </th><td><p class="starttd">Type of metric used that was used in the training step. </p>
+<p class="endtd"></p>
+</td></tr>
+</table>
+</dd>
+<dt>use_gpus (optional) </dt>
+<dd><p class="startdd">BOOLEAN, default: FALSE (i.e., CPU). Determines whether GPUs are to be used for training the neural network. Set to TRUE to use GPUs.</p>
+<dl class="section note"><dt>Note</dt><dd>This parameter must not conflict with how the distribution rules are set in the preprocessor function. For example, if you set a distribution rule to use certain segments on hosts that do not have GPUs attached, you will get an error if you set ‘use_gpus’ to TRUE. Also, we have seen some memory related issues when segments share GPU resources. For example, if you have 1 GPU per segment host and your cluster has 4 segments per segment host, it means that all 4 segments will share the same GPU on each host. The current recommended configuration is 1 GPU per segment. </dd></dl>
+</dd>
+<dt>mst_key (optional) </dt>
+<dd>INTEGER, default: NULL. ID that defines a unique tuple for model architecture-compile parameters-fit parameters in a model selection table. Do not use this if training one model at a time using <a class="el" href="madlib__keras_8sql__in.html#a2277a353d16623515fe4488b43fadaaa">madlib_keras_fit()</a>. See the <a href="group__grp__keras__run__model__selection.html">Model Selection</a> section for more details on model selection by training multiple models at a time.  </dd>
+</dl>
+<p><a class="anchor" id="keras_predict"></a></p><dl class="section user"><dt>Predict</dt><dd>The prediction function has the following format: <pre class="syntax">
+madlib_keras_predict(
+    model_table,
+    test_table,
+    id_col,
+    independent_varname,
+    output_table,
+    pred_type,
+    use_gpus,
+    mst_key
+    )
+</pre></dd></dl>
+<p><b>Arguments</b> </p><dl class="arglist">
+<dt>model_table </dt>
+<dd><p class="startdd">TEXT. Name of the table containing the model to use for prediction. </p>
+<p class="enddd"></p>
+</dd>
+<dt>test_table </dt>
+<dd><p class="startdd">TEXT. Name of the table containing the dataset to predict on. Note that test data is not preprocessed (unlike fit and evaluate) so put one test image per row for prediction. Also see the comment below for the 'independent_varname' parameter regarding normalization.</p>
+<p></p>
+<p class="enddd"></p>
+</dd>
+<dt>id_col </dt>
+<dd><p class="startdd">TEXT. Name of the id column in the test data table. </p>
+<p class="enddd"></p>
+</dd>
+<dt>independent_varname </dt>
+<dd><p class="startdd">TEXT. Column with independent variables in the test table. If a 'normalizing_const' is specified when preprocessing the training dataset, this same normalization will be applied to the independent variables used in predict. </p>
+<p class="enddd"></p>
+</dd>
+<dt>output_table </dt>
+<dd>TEXT. Name of the table that prediction output will be written to. Table contains: <table class="output">
+<tr>
+<th>id </th><td>Gives the 'id' for each prediction, corresponding to each row from the test_table.  </td></tr>
+<tr>
+<th>estimated_COL_NAME </th><td>(For pred_type='response') The estimated class for classification, where COL_NAME is the name of the column to be predicted from test data.   </td></tr>
+<tr>
+<th>prob_CLASS </th><td><p class="starttd">(For pred_type='prob' for classification) The probability of a given class. There will be one column for each class in the training data.  </p>
+<p class="endtd"></p>
+</td></tr>
+</table>
+</dd>
+<dt>pred_type (optional) </dt>
+<dd><p class="startdd">TEXT, default: 'response'. The type of output desired, where 'response' gives the actual prediction and 'prob' gives the probability value for each class. </p>
+<p class="enddd"></p>
+</dd>
+<dt>use_gpus (optional) </dt>
+<dd><p class="startdd">BOOLEAN, default: FALSE (i.e., CPU). Flag to enable GPU support for training neural network. The number of GPUs to use is determined by the parameters passed to the preprocessor.</p>
+<dl class="section note"><dt>Note</dt><dd>We have seen some memory related issues when segments share GPU resources. For example, if you provide 1 GPU and your database cluster is set up to have 4 segments per segment host, it means that all 4 segments on a segment host will share the same GPU. The current recommended configuration is 1 GPU per segment. </dd></dl>
+</dd>
+<dt>mst_key (optional) </dt>
+<dd>INTEGER, default: NULL. ID that defines a unique tuple for model architecture-compile parameters-fit parameters in a model selection table. Do not use this if training one model at a time using <a class="el" href="madlib__keras_8sql__in.html#a2277a353d16623515fe4488b43fadaaa">madlib_keras_fit()</a>. See the <a href="group__grp__keras__run__model__selection.html">Model Selection</a> section for more details on model selection by training multiple models at a time.  </dd>
+</dl>
+<p><a class="anchor" id="keras_predict_byom"></a></p><dl class="section user"><dt>Predict BYOM (bring your own model)</dt><dd>The predict BYOM function allows you to do inference on models that have not been trained on MADlib, but rather imported from elsewhere. It has the following format: <pre class="syntax">
+madlib_keras_predict_byom(
+    model_arch_table,
+    model_id,
+    test_table,
+    id_col,
+    independent_varname,
+    output_table,
+    pred_type,
+    use_gpus,
+    class_values,
+    normalizing_const
+    )
+</pre></dd></dl>
+<p><b>Arguments</b> </p><dl class="arglist">
+<dt>model_arch_table </dt>
+<dd><p class="startdd">TEXT. Name of the architecture table containing the model to use for prediction. The model weights and architecture can be loaded to this table by using the <a href="group__grp__keras__model__arch.html">load_keras_model</a> function. </p>
+<p class="enddd"></p>
+</dd>
+<dt>model_id </dt>
+<dd><p class="startdd">INTEGER. This is the id in 'model_arch_table' containing the model architecture and model weights to use for prediction. </p>
+<p class="enddd"></p>
+</dd>
+<dt>test_table </dt>
+<dd><p class="startdd">TEXT. Name of the table containing the dataset to predict on. Note that test data is not preprocessed (unlike fit and evaluate) so put one test image per row for prediction. Set the 'normalizing_const' below for the independent variable if necessary. </p>
+<p class="enddd"></p>
+</dd>
+<dt>id_col </dt>
+<dd><p class="startdd">TEXT. Name of the id column in the test data table. </p>
+<p class="enddd"></p>
+</dd>
+<dt>independent_varname </dt>
+<dd><p class="startdd">TEXT. Column with independent variables in the test table. Set the 'normalizing_const' below if necessary. </p>
+<p class="enddd"></p>
+</dd>
+<dt>output_table </dt>
+<dd>TEXT. Name of the table that prediction output will be written to. Table contains: <table class="output">
+<tr>
+<th>id </th><td>Gives the 'id' for each prediction, corresponding to each row from the 'test_table'.  </td></tr>
+<tr>
+<th>estimated_dependent_var </th><td>(For pred_type='response') Estimated class for classification. If the 'class_values' parameter is passed in as NULL, then we assume that the class labels are [0,1,2...,n-1] where n-1 is the number of classes in the model architecture.   </td></tr>
+<tr>
+<th>prob_CLASS </th><td><p class="starttd">(For pred_type='prob' for classification) Probability of a given class. If 'class_values' is passed in as NULL, we create one column called 'prob' which is an array of probabilities for each class. If 'class_values' is not NULL, then there will be one column for each class.  </p>
+<p class="endtd"></p>
+</td></tr>
+</table>
+</dd>
+<dt>pred_type (optional) </dt>
+<dd><p class="startdd">TEXT, default: 'response'. The type of output desired, where 'response' gives the actual prediction and 'prob' gives the probability value for each class. </p>
+<p class="enddd"></p>
+</dd>
+<dt>use_gpus (optional) </dt>
+<dd><p class="startdd">BOOLEAN, default: FALSE (i.e., CPU). Flag to enable GPU support for training neural network. The number of GPUs to use is determined by the parameters passed to the preprocessor.</p>
+<dl class="section note"><dt>Note</dt><dd>We have seen some memory related issues when segments share GPU resources. For example, if you provide 1 GPU and your database cluster is set up to have 4 segments per segment host, it means that all 4 segments on a segment host will share the same GPU. The current recommended configuration is 1 GPU per segment. </dd></dl>
+</dd>
+<dt>class_values (optional) </dt>
+<dd><p class="startdd">TEXT[], default: NULL. List of class labels that were used while training the model. See the 'output_table' column above for more details.</p>
+<dl class="section note"><dt>Note</dt><dd>If you specify the class values parameter, it must reflect how the dependent variable was 1-hot encoded for training. If you accidently pick another order that does not match the 1-hot encoding, the predictions would be wrong. </dd></dl>
+</dd>
+<dt>normalizing_const (optional) </dt>
+<dd>DOUBLE PRECISION, default: 1.0. The normalizing constant to divide each value in the 'independent_varname' array by. For example, you would use 255 for this value if the image data is in the form 0-255.  </dd>
+</dl>
+<p><a class="anchor" id="example"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<dl class="section note"><dt>Note</dt><dd>Deep learning works best on very large datasets, but that is not convenient for a quick introduction to the syntax. So in this example we use an MLP on the well known iris data set from <a href="https://archive.ics.uci.edu/ml/datasets/iris">https://archive.ics.uci.edu/ml/datasets/iris</a>. For more realistic examples with images please refer to the deep learning notebooks at <a href="https://github.com/apache/madlib-site/tree/asf-site/community-artifacts">https://github.com/apache/madlib-site/tree/asf-site/community-artifacts</a>.</dd></dl>
+<h4>Classification</h4>
+<ol type="1">
+<li>Create an input data set. <pre class="example">
+DROP TABLE IF EXISTS iris_data;
+CREATE TABLE iris_data(
+    id serial,
+    attributes numeric[],
+    class_text varchar
+);
+INSERT INTO iris_data(id, attributes, class_text) VALUES
+(1,ARRAY[5.1,3.5,1.4,0.2],'Iris-setosa'),
+(2,ARRAY[4.9,3.0,1.4,0.2],'Iris-setosa'),
+(3,ARRAY[4.7,3.2,1.3,0.2],'Iris-setosa'),
+(4,ARRAY[4.6,3.1,1.5,0.2],'Iris-setosa'),
+(5,ARRAY[5.0,3.6,1.4,0.2],'Iris-setosa'),
+(6,ARRAY[5.4,3.9,1.7,0.4],'Iris-setosa'),
+(7,ARRAY[4.6,3.4,1.4,0.3],'Iris-setosa'),
+(8,ARRAY[5.0,3.4,1.5,0.2],'Iris-setosa'),
+(9,ARRAY[4.4,2.9,1.4,0.2],'Iris-setosa'),
+(10,ARRAY[4.9,3.1,1.5,0.1],'Iris-setosa'),
+(11,ARRAY[5.4,3.7,1.5,0.2],'Iris-setosa'),
+(12,ARRAY[4.8,3.4,1.6,0.2],'Iris-setosa'),
+(13,ARRAY[4.8,3.0,1.4,0.1],'Iris-setosa'),
+(14,ARRAY[4.3,3.0,1.1,0.1],'Iris-setosa'),
+(15,ARRAY[5.8,4.0,1.2,0.2],'Iris-setosa'),
+(16,ARRAY[5.7,4.4,1.5,0.4],'Iris-setosa'),
+(17,ARRAY[5.4,3.9,1.3,0.4],'Iris-setosa'),
+(18,ARRAY[5.1,3.5,1.4,0.3],'Iris-setosa'),
+(19,ARRAY[5.7,3.8,1.7,0.3],'Iris-setosa'),
+(20,ARRAY[5.1,3.8,1.5,0.3],'Iris-setosa'),
+(21,ARRAY[5.4,3.4,1.7,0.2],'Iris-setosa'),
+(22,ARRAY[5.1,3.7,1.5,0.4],'Iris-setosa'),
+(23,ARRAY[4.6,3.6,1.0,0.2],'Iris-setosa'),
+(24,ARRAY[5.1,3.3,1.7,0.5],'Iris-setosa'),
+(25,ARRAY[4.8,3.4,1.9,0.2],'Iris-setosa'),
+(26,ARRAY[5.0,3.0,1.6,0.2],'Iris-setosa'),
+(27,ARRAY[5.0,3.4,1.6,0.4],'Iris-setosa'),
+(28,ARRAY[5.2,3.5,1.5,0.2],'Iris-setosa'),
+(29,ARRAY[5.2,3.4,1.4,0.2],'Iris-setosa'),
+(30,ARRAY[4.7,3.2,1.6,0.2],'Iris-setosa'),
+(31,ARRAY[4.8,3.1,1.6,0.2],'Iris-setosa'),
+(32,ARRAY[5.4,3.4,1.5,0.4],'Iris-setosa'),
+(33,ARRAY[5.2,4.1,1.5,0.1],'Iris-setosa'),
+(34,ARRAY[5.5,4.2,1.4,0.2],'Iris-setosa'),
+(35,ARRAY[4.9,3.1,1.5,0.1],'Iris-setosa'),
+(36,ARRAY[5.0,3.2,1.2,0.2],'Iris-setosa'),
+(37,ARRAY[5.5,3.5,1.3,0.2],'Iris-setosa'),
+(38,ARRAY[4.9,3.1,1.5,0.1],'Iris-setosa'),
+(39,ARRAY[4.4,3.0,1.3,0.2],'Iris-setosa'),
+(40,ARRAY[5.1,3.4,1.5,0.2],'Iris-setosa'),
+(41,ARRAY[5.0,3.5,1.3,0.3],'Iris-setosa'),
+(42,ARRAY[4.5,2.3,1.3,0.3],'Iris-setosa'),
+(43,ARRAY[4.4,3.2,1.3,0.2],'Iris-setosa'),
+(44,ARRAY[5.0,3.5,1.6,0.6],'Iris-setosa'),
+(45,ARRAY[5.1,3.8,1.9,0.4],'Iris-setosa'),
+(46,ARRAY[4.8,3.0,1.4,0.3],'Iris-setosa'),
+(47,ARRAY[5.1,3.8,1.6,0.2],'Iris-setosa'),
+(48,ARRAY[4.6,3.2,1.4,0.2],'Iris-setosa'),
+(49,ARRAY[5.3,3.7,1.5,0.2],'Iris-setosa'),
+(50,ARRAY[5.0,3.3,1.4,0.2],'Iris-setosa'),
+(51,ARRAY[7.0,3.2,4.7,1.4],'Iris-versicolor'),
+(52,ARRAY[6.4,3.2,4.5,1.5],'Iris-versicolor'),
+(53,ARRAY[6.9,3.1,4.9,1.5],'Iris-versicolor'),
+(54,ARRAY[5.5,2.3,4.0,1.3],'Iris-versicolor'),
+(55,ARRAY[6.5,2.8,4.6,1.5],'Iris-versicolor'),
+(56,ARRAY[5.7,2.8,4.5,1.3],'Iris-versicolor'),
+(57,ARRAY[6.3,3.3,4.7,1.6],'Iris-versicolor'),
+(58,ARRAY[4.9,2.4,3.3,1.0],'Iris-versicolor'),
+(59,ARRAY[6.6,2.9,4.6,1.3],'Iris-versicolor'),
+(60,ARRAY[5.2,2.7,3.9,1.4],'Iris-versicolor'),
+(61,ARRAY[5.0,2.0,3.5,1.0],'Iris-versicolor'),
+(62,ARRAY[5.9,3.0,4.2,1.5],'Iris-versicolor'),
+(63,ARRAY[6.0,2.2,4.0,1.0],'Iris-versicolor'),
+(64,ARRAY[6.1,2.9,4.7,1.4],'Iris-versicolor'),
+(65,ARRAY[5.6,2.9,3.6,1.3],'Iris-versicolor'),
+(66,ARRAY[6.7,3.1,4.4,1.4],'Iris-versicolor'),
+(67,ARRAY[5.6,3.0,4.5,1.5],'Iris-versicolor'),
+(68,ARRAY[5.8,2.7,4.1,1.0],'Iris-versicolor'),
+(69,ARRAY[6.2,2.2,4.5,1.5],'Iris-versicolor'),
+(70,ARRAY[5.6,2.5,3.9,1.1],'Iris-versicolor'),
+(71,ARRAY[5.9,3.2,4.8,1.8],'Iris-versicolor'),
+(72,ARRAY[6.1,2.8,4.0,1.3],'Iris-versicolor'),
+(73,ARRAY[6.3,2.5,4.9,1.5],'Iris-versicolor'),
+(74,ARRAY[6.1,2.8,4.7,1.2],'Iris-versicolor'),
+(75,ARRAY[6.4,2.9,4.3,1.3],'Iris-versicolor'),
+(76,ARRAY[6.6,3.0,4.4,1.4],'Iris-versicolor'),
+(77,ARRAY[6.8,2.8,4.8,1.4],'Iris-versicolor'),
+(78,ARRAY[6.7,3.0,5.0,1.7],'Iris-versicolor'),
+(79,ARRAY[6.0,2.9,4.5,1.5],'Iris-versicolor'),
+(80,ARRAY[5.7,2.6,3.5,1.0],'Iris-versicolor'),
+(81,ARRAY[5.5,2.4,3.8,1.1],'Iris-versicolor'),
+(82,ARRAY[5.5,2.4,3.7,1.0],'Iris-versicolor'),
+(83,ARRAY[5.8,2.7,3.9,1.2],'Iris-versicolor'),
+(84,ARRAY[6.0,2.7,5.1,1.6],'Iris-versicolor'),
+(85,ARRAY[5.4,3.0,4.5,1.5],'Iris-versicolor'),
+(86,ARRAY[6.0,3.4,4.5,1.6],'Iris-versicolor'),
+(87,ARRAY[6.7,3.1,4.7,1.5],'Iris-versicolor'),
+(88,ARRAY[6.3,2.3,4.4,1.3],'Iris-versicolor'),
+(89,ARRAY[5.6,3.0,4.1,1.3],'Iris-versicolor'),
+(90,ARRAY[5.5,2.5,4.0,1.3],'Iris-versicolor'),
+(91,ARRAY[5.5,2.6,4.4,1.2],'Iris-versicolor'),
+(92,ARRAY[6.1,3.0,4.6,1.4],'Iris-versicolor'),
+(93,ARRAY[5.8,2.6,4.0,1.2],'Iris-versicolor'),
+(94,ARRAY[5.0,2.3,3.3,1.0],'Iris-versicolor'),
+(95,ARRAY[5.6,2.7,4.2,1.3],'Iris-versicolor'),
+(96,ARRAY[5.7,3.0,4.2,1.2],'Iris-versicolor'),
+(97,ARRAY[5.7,2.9,4.2,1.3],'Iris-versicolor'),
+(98,ARRAY[6.2,2.9,4.3,1.3],'Iris-versicolor'),
+(99,ARRAY[5.1,2.5,3.0,1.1],'Iris-versicolor'),
+(100,ARRAY[5.7,2.8,4.1,1.3],'Iris-versicolor'),
+(101,ARRAY[6.3,3.3,6.0,2.5],'Iris-virginica'),
+(102,ARRAY[5.8,2.7,5.1,1.9],'Iris-virginica'),
+(103,ARRAY[7.1,3.0,5.9,2.1],'Iris-virginica'),
+(104,ARRAY[6.3,2.9,5.6,1.8],'Iris-virginica'),
+(105,ARRAY[6.5,3.0,5.8,2.2],'Iris-virginica'),
+(106,ARRAY[7.6,3.0,6.6,2.1],'Iris-virginica'),
+(107,ARRAY[4.9,2.5,4.5,1.7],'Iris-virginica'),
+(108,ARRAY[7.3,2.9,6.3,1.8],'Iris-virginica'),
+(109,ARRAY[6.7,2.5,5.8,1.8],'Iris-virginica'),
+(110,ARRAY[7.2,3.6,6.1,2.5],'Iris-virginica'),
+(111,ARRAY[6.5,3.2,5.1,2.0],'Iris-virginica'),
+(112,ARRAY[6.4,2.7,5.3,1.9],'Iris-virginica'),
+(113,ARRAY[6.8,3.0,5.5,2.1],'Iris-virginica'),
+(114,ARRAY[5.7,2.5,5.0,2.0],'Iris-virginica'),
+(115,ARRAY[5.8,2.8,5.1,2.4],'Iris-virginica'),
+(116,ARRAY[6.4,3.2,5.3,2.3],'Iris-virginica'),
+(117,ARRAY[6.5,3.0,5.5,1.8],'Iris-virginica'),
+(118,ARRAY[7.7,3.8,6.7,2.2],'Iris-virginica'),
+(119,ARRAY[7.7,2.6,6.9,2.3],'Iris-virginica'),
+(120,ARRAY[6.0,2.2,5.0,1.5],'Iris-virginica'),
+(121,ARRAY[6.9,3.2,5.7,2.3],'Iris-virginica'),
+(122,ARRAY[5.6,2.8,4.9,2.0],'Iris-virginica'),
+(123,ARRAY[7.7,2.8,6.7,2.0],'Iris-virginica'),
+(124,ARRAY[6.3,2.7,4.9,1.8],'Iris-virginica'),
+(125,ARRAY[6.7,3.3,5.7,2.1],'Iris-virginica'),
+(126,ARRAY[7.2,3.2,6.0,1.8],'Iris-virginica'),
+(127,ARRAY[6.2,2.8,4.8,1.8],'Iris-virginica'),
+(128,ARRAY[6.1,3.0,4.9,1.8],'Iris-virginica'),
+(129,ARRAY[6.4,2.8,5.6,2.1],'Iris-virginica'),
+(130,ARRAY[7.2,3.0,5.8,1.6],'Iris-virginica'),
+(131,ARRAY[7.4,2.8,6.1,1.9],'Iris-virginica'),
+(132,ARRAY[7.9,3.8,6.4,2.0],'Iris-virginica'),
+(133,ARRAY[6.4,2.8,5.6,2.2],'Iris-virginica'),
+(134,ARRAY[6.3,2.8,5.1,1.5],'Iris-virginica'),
+(135,ARRAY[6.1,2.6,5.6,1.4],'Iris-virginica'),
+(136,ARRAY[7.7,3.0,6.1,2.3],'Iris-virginica'),
+(137,ARRAY[6.3,3.4,5.6,2.4],'Iris-virginica'),
+(138,ARRAY[6.4,3.1,5.5,1.8],'Iris-virginica'),
+(139,ARRAY[6.0,3.0,4.8,1.8],'Iris-virginica'),
+(140,ARRAY[6.9,3.1,5.4,2.1],'Iris-virginica'),
+(141,ARRAY[6.7,3.1,5.6,2.4],'Iris-virginica'),
+(142,ARRAY[6.9,3.1,5.1,2.3],'Iris-virginica'),
+(143,ARRAY[5.8,2.7,5.1,1.9],'Iris-virginica'),
+(144,ARRAY[6.8,3.2,5.9,2.3],'Iris-virginica'),
+(145,ARRAY[6.7,3.3,5.7,2.5],'Iris-virginica'),
+(146,ARRAY[6.7,3.0,5.2,2.3],'Iris-virginica'),
+(147,ARRAY[6.3,2.5,5.0,1.9],'Iris-virginica'),
+(148,ARRAY[6.5,3.0,5.2,2.0],'Iris-virginica'),
+(149,ARRAY[6.2,3.4,5.4,2.3],'Iris-virginica'),
+(150,ARRAY[5.9,3.0,5.1,1.8],'Iris-virginica');
+</pre> Create a test/validation dataset from the training data: <pre class="example">
+DROP TABLE IF EXISTS iris_train, iris_test;
+-- Set seed so results are reproducible
+SELECT setseed(0);
+SELECT madlib.train_test_split('iris_data',     -- Source table
+                               'iris',          -- Output table root name
+                                0.8,            -- Train proportion
+                                NULL,           -- Test proportion (0.2)
+                                NULL,           -- Strata definition
+                                NULL,           -- Output all columns
+                                NULL,           -- Sample without replacement
+                                TRUE            -- Separate output tables
+                              );
+SELECT COUNT(*) FROM iris_train;
+</pre> <pre class="result">
+ count
+------+
+   120
+</pre></li>
+<li>Call the preprocessor for deep learning. For the training dataset: <pre class="example">
+\x off
+DROP TABLE IF EXISTS iris_train_packed, iris_train_packed_summary;
+SELECT madlib.training_preprocessor_dl('iris_train',         -- Source table
+                                       'iris_train_packed',  -- Output table
+                                       'class_text',         -- Dependent variable
+                                       'attributes'          -- Independent variable
+                                        );
+SELECT * FROM iris_train_packed_summary;
+</pre> <pre class="result">
+-[ RECORD 1 ]-------+---------------------------------------------
+source_table        | iris_train
+output_table        | iris_train_packed
+dependent_varname   | class_text
+independent_varname | attributes
+dependent_vartype   | character varying
+class_values        | {Iris-setosa,Iris-versicolor,Iris-virginica}
+buffer_size         | 60
+normalizing_const   | 1.0
+num_classes         | 3
+</pre> For the validation dataset: <pre class="example">
+DROP TABLE IF EXISTS iris_test_packed, iris_test_packed_summary;
+SELECT madlib.validation_preprocessor_dl('iris_test',          -- Source table
+                                         'iris_test_packed',   -- Output table
+                                         'class_text',         -- Dependent variable
+                                         'attributes',         -- Independent variable
+                                         'iris_train_packed'   -- From training preprocessor step
+                                          );
+SELECT * FROM iris_test_packed_summary;
+</pre> <pre class="result">
+-[ RECORD 1 ]-------+---------------------------------------------
+source_table        | iris_test
+output_table        | iris_test_packed
+dependent_varname   | class_text
+independent_varname | attributes
+dependent_vartype   | character varying
+class_values        | {Iris-setosa,Iris-versicolor,Iris-virginica}
+buffer_size         | 15
+normalizing_const   | 1.0
+num_classes         | 3
+</pre></li>
+<li>Define and load model architecture. Use Keras to define the model architecture: <pre class="example">
+import keras
+from keras.models import Sequential
+from keras.layers import Dense
+model_simple = Sequential()
+model_simple.add(Dense(10, activation='relu', input_shape=(4,)))
+model_simple.add(Dense(10, activation='relu'))
+model_simple.add(Dense(3, activation='softmax'))
+model_simple.summary()
+<pre class="fragment">_________________________________________________________________
+Layer (type)                 Output Shape              Param #
+=================================================================
+dense_1 (Dense)              (None, 10)                50
+_________________________________________________________________
+dense_2 (Dense)              (None, 10)                110
+_________________________________________________________________
+dense_3 (Dense)              (None, 3)                 33
+=================================================================
+Total params: 193
+Trainable params: 193
+Non-trainable params: 0
+</pre>
+</pre> Export the model to JSON: <pre class="example">
+model_simple.to_json()
+</pre> <pre class="result">
+'{"class_name": "Sequential", "keras_version": "2.1.6", "config": [{"class_name": "Dense", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "dense_1", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "dtype": "float32", "activation": "relu", "trainable": true, "kernel_regularizer": null, "bias_initializer": {"class_name": "Zeros", "config": {}}, "units": 10, "batch_input_shape": [null, 4], "use_bias": true, "activity_regularizer": null}}, {"class_name": "Dense", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "dense_2", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "activation": "relu", "trainable": true, "kernel_regularizer": null, "bias_initializer": {"class_name": "Zeros", "config": {}}, "units": 10, "use_bias": true, "activity_regularizer": null}}, {"class_name": "Dense", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "dense_3", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "activation": "softmax", "trainable": true, "kernel_regularizer": null, "bias_initializer": {"class_name": "Zeros", "config": {}}, "units": 3, "use_bias": true, "activity_regularizer": null}}], "backend": "tensorflow"}'
+</pre> Load into model architecture table: <pre class="example">
+DROP TABLE IF EXISTS model_arch_library;
+SELECT madlib.load_keras_model('model_arch_library',  -- Output table,
+$$
+{"class_name": "Sequential", "keras_version": "2.1.6", "config": [{"class_name": "Dense", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "dense_1", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "dtype": "float32", "activation": "relu", "trainable": true, "kernel_regularizer": null, "bias_initializer": {"class_name": "Zeros", "config": {}}, "units": 10, "batch_input_shape": [null, 4], "use_bias": true, "activity_regularizer": null}}, {"class_name": "Dense", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "dense_2", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "activation": "relu", "trainable": true, "kernel_regularizer": null, "bias_initializer": {"class_name": "Zeros", "config": {}}, "units": 10, "use_bias": true, "activity_regularizer": null}}, {"class_name": "Dense", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "dense_3", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "activation": "softmax", "trainable": true, "kernel_regularizer": null, "bias_initializer": {"class_name": "Zeros", "config": {}}, "units": 3, "use_bias": true, "activity_regularizer": null}}], "backend": "tensorflow"}
+$$
+::json,  -- JSON blob
+                               NULL,                  -- Weights
+                               'Sophie',              -- Name
+                               'A simple model'       -- Descr
+);
+</pre></li>
+<li>Train model and view summary table: <pre class="example">
+DROP TABLE IF EXISTS iris_model, iris_model_summary;
+SELECT madlib.madlib_keras_fit('iris_train_packed',   -- source table
+                               'iris_model',          -- model output table
+                               'model_arch_library',  -- model arch table
+                                1,                    -- model arch id
+                                $$ loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'] $$,  -- compile_params
+                                $$ batch_size=5, epochs=3 $$,  -- fit_params
+                                10                    -- num_iterations
+                              );
+SELECT * FROM iris_model_summary;
+</pre> <pre class="result">
+-[ RECORD 1 ]-------------+--------------------------------------------------------------------------
+source_table              | iris_train_packed
+model                     | iris_model
+dependent_varname         | class_text
+independent_varname       | attributes
+model_arch_table          | model_arch_library
+model_id                  | 1
+compile_params            |  loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']
+fit_params                |  batch_size=5, epochs=3
+num_iterations            | 10
+validation_table          |
+metrics_compute_frequency | 10
+name                      |
+description               |
+model_type                | madlib_keras
+model_size                | 0.7900390625
+start_training_time       | 2019-06-05 20:55:15.785034
+end_training_time         | 2019-06-05 20:55:25.373035
+metrics_elapsed_time      | {9.58799290657043}
+madlib_version            | 1.17.0
+num_classes               | 3
+class_values              | {Iris-setosa,Iris-versicolor,Iris-virginica}
+dependent_vartype         | character varying
+normalizing_const         | 1
+metrics_type              | {accuracy}
+training_metrics_final    | 0.766666650772
+training_loss_final       | 0.721103310585
+training_metrics          | {0.766666650772095}
+training_loss             | {0.721103310585022}
+validation_metrics_final  |
+validation_loss_final     |
+validation_metrics        |
+validation_loss           |
+metrics_iters             | {10}
+</pre></li>
+<li>Use the test dataset to evaluate the model we built above: <pre class="example">
+DROP TABLE IF EXISTS iris_validate;
+SELECT madlib.madlib_keras_evaluate('iris_model',       -- model
+                                   'iris_test_packed',  -- test table
+                                   'iris_validate'      -- output table
+                                   );
+SELECT * FROM iris_validate;
+</pre> <pre class="result">
+       loss        |      metric       | metrics_type
+-------------------+-------------------+--------------
+ 0.719491899013519 | 0.800000011920929 | {accuracy}
+(1 row)
+</pre></li>
+<li>Predict. We will use the validation dataset for prediction as well, which is not usual but serves to show the syntax. The prediction is in the 'estimated_class_text' column: <pre class="example">
+DROP TABLE IF EXISTS iris_predict;
+SELECT madlib.madlib_keras_predict('iris_model', -- model
+                                   'iris_test',  -- test_table
+                                   'id',  -- id column
+                                   'attributes', -- independent var
+                                   'iris_predict'  -- output table
+                                   );
+SELECT * FROM iris_predict ORDER BY id;
+</pre> <pre class="result">
+ id  | estimated_class_text
+-----+----------------------
+   4 | Iris-setosa
+   6 | Iris-setosa
+   8 | Iris-setosa
+  12 | Iris-setosa
+  13 | Iris-setosa
+  15 | Iris-setosa
+  24 | Iris-setosa
+  30 | Iris-setosa
+  38 | Iris-setosa
+  49 | Iris-setosa
+  60 | Iris-virginica
+  68 | Iris-versicolor
+  69 | Iris-versicolor
+  76 | Iris-versicolor
+  78 | Iris-versicolor
+  81 | Iris-versicolor
+  85 | Iris-virginica
+  90 | Iris-versicolor
+  91 | Iris-versicolor
+  94 | Iris-virginica
+ 104 | Iris-virginica
+ 106 | Iris-versicolor
+ 107 | Iris-virginica
+ 110 | Iris-virginica
+ 119 | Iris-versicolor
+ 127 | Iris-virginica
+ 129 | Iris-virginica
+ 134 | Iris-versicolor
+ 139 | Iris-virginica
+ 144 | Iris-virginica
+(30 rows)
+</pre> Count missclassifications: <pre class="example">
+SELECT COUNT(*) FROM iris_predict JOIN iris_test USING (id)
+WHERE iris_predict.estimated_class_text != iris_test.class_text;
+</pre> <pre class="result">
+ count
+-------+
+     6
+(1 row)
+</pre> Accuracy: <pre class="example">
+SELECT round(count(*)*100/(150*0.2),2) as test_accuracy_percent from
+    (select iris_test.class_text as actual, iris_predict.estimated_class_text as estimated
+     from iris_predict inner join iris_test
+     on iris_test.id=iris_predict.id) q
+WHERE q.actual=q.estimated;
+</pre> <pre class="result">
+ test_accuracy_percent
+-----------------------+
+                 80.00
+(1 row)
+</pre></li>
+<li>Predict BYOM. We will use the validation dataset for prediction as well, which is not usual but serves to show the syntax. See <a href="group__grp__keras__model__arch.html">load_keras_model</a> for details on how to load the model architecture and weights. In this example we will use weights we already have: <pre class="example">
+UPDATE model_arch_library
+SET model_weights = iris_model.model_weights
+FROM iris_model
+WHERE model_arch_library.model_id = 1;
+</pre> Now train using a model from the model architecture table directly without referencing the model table from the MADlib training. Note that if you specify the class values parameter as we do below, it must reflect how the dependent variable was 1-hot encoded for training. In this example the '<a class="el" href="input__data__preprocessor_8sql__in.html#a11a26c03a879a4c7e40e3ba07ca39a22">training_preprocessor_dl()</a>' in Step 2 above encoded in the order {'Iris-setosa', 'Iris-versicolor', 'Iris-virginica'} so this is the order we pass in the parameter. If we accidently pick another order that does not match the 1-hot encoding, the predictions would be wrong. <pre class="example">
+DROP TABLE IF EXISTS iris_predict_byom;
+SELECT madlib.madlib_keras_predict_byom('model_arch_library',  -- model arch table
+                                         1,                    -- model arch id
+                                        'iris_test',           -- test_table
+                                        'id',                  -- id column
+                                        'attributes',          -- independent var
+                                        'iris_predict_byom',   -- output table
+                                        'response',            -- prediction type
+                                         FALSE,                -- use GPUs
+                                         ARRAY['Iris-setosa', 'Iris-versicolor', 'Iris-virginica'], -- class values
+                                         1.0                   -- normalizing const
+                                   );
+SELECT * FROM iris_predict_byom ORDER BY id;
+</pre> The prediction is in the 'estimated_dependent_var' column: <pre class="result">
+ id  | estimated_dependent_var
+-----+----------------------
+   4 | Iris-setosa
+   6 | Iris-setosa
+   8 | Iris-setosa
+  12 | Iris-setosa
+  13 | Iris-setosa
+  15 | Iris-setosa
+  24 | Iris-setosa
+  30 | Iris-setosa
+  38 | Iris-setosa
+  49 | Iris-setosa
+  60 | Iris-virginica
+  68 | Iris-versicolor
+  69 | Iris-versicolor
+  76 | Iris-versicolor
+  78 | Iris-versicolor
+  81 | Iris-versicolor
+  85 | Iris-virginica
+  90 | Iris-versicolor
+  91 | Iris-versicolor
+  94 | Iris-virginica
+ 104 | Iris-virginica
+ 106 | Iris-versicolor
+ 107 | Iris-virginica
+ 110 | Iris-virginica
+ 119 | Iris-versicolor
+ 127 | Iris-virginica
+ 129 | Iris-virginica
+ 134 | Iris-versicolor
+ 139 | Iris-virginica
+ 144 | Iris-virginica
+(30 rows)
+ </pre> Count missclassifications: <pre class="example">
+SELECT COUNT(*) FROM iris_predict_byom JOIN iris_test USING (id)
+WHERE iris_predict_byom.estimated_dependent_var != iris_test.class_text;
+</pre> <pre class="result">
+ count
+-------+
+     6
+(1 row)
+</pre> Accuracy: <pre class="example">
+SELECT round(count(*)*100/(150*0.2),2) as test_accuracy_percent from
+    (select iris_test.class_text as actual, iris_predict_byom.estimated_dependent_var as estimated
+     from iris_predict_byom inner join iris_test
+     on iris_test.id=iris_predict_byom.id) q
+WHERE q.actual=q.estimated;
+</pre> <pre class="result">
+ test_accuracy_percent
+-----------------------+
+                 80.00
+(1 row)
+</pre></li>
+</ol>
+<h4>Classification with Other Parameters</h4>
+<ol type="1">
+<li>Validation dataset. Now use a validation dataset and compute metrics every 3rd iteration using the 'metrics_compute_frequency' parameter. This can help reduce run time if you do not need metrics computed at every iteration. <pre class="example">
+DROP TABLE IF EXISTS iris_model, iris_model_summary;
+SELECT madlib.madlib_keras_fit('iris_train_packed',   -- source table
+                               'iris_model',          -- model output table
+                               'model_arch_library',  -- model arch table
+                                1,                    -- model arch id
+                                $$ loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'] $$,  -- compile_params
+                                $$ batch_size=5, epochs=3 $$,  -- fit_params
+                                10,                   -- num_iterations
+                                FALSE,                -- use GPUs
+                                'iris_test_packed',   -- validation dataset
+                                3,                    -- metrics compute frequency
+                                FALSE,                -- warm start
+                               'Sophie L.',           -- name
+                               'Simple MLP for iris dataset'  -- description
+                              );
+SELECT * FROM iris_model_summary;
+</pre> <pre class="result">
+-[ RECORD 1 ]-------------+--------------------------------------------------------------------------
+source_table              | iris_train_packed
+model                     | iris_model
+dependent_varname         | class_text
+independent_varname       | attributes
+model_arch_table          | model_arch_library
+model_id                  | 1
+compile_params            |  loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']
+fit_params                |  batch_size=5, epochs=3
+num_iterations            | 10
+validation_table          | iris_test_packed
+metrics_compute_frequency | 3
+name                      | Sophie L.
+description               | Simple MLP for iris dataset
+model_type                | madlib_keras
+model_size                | 0.7900390625
+start_training_time       | 2019-06-05 20:58:23.224629
+end_training_time         | 2019-06-05 20:58:35.477499
+metrics_elapsed_time      | {4.69859290122986,8.2062520980835,10.8104848861694,12.2528700828552}
+madlib_version            | 1.17.0
+num_classes               | 3
+class_values              | {Iris-setosa,Iris-versicolor,Iris-virginica}
+dependent_vartype         | character varying
+normalizing_const         | 1
+metrics_type              | {accuracy}
+training_metrics_final    | 0.941666662693
+training_loss_final       | 0.40586027503
+training_metrics          | {0.699999988079071,0.800000011920929,0.899999976158142,0.941666662693024}
+training_loss             | {0.825238645076752,0.534248650074005,0.427499741315842,0.405860275030136}
+validation_metrics_final  | 0.866666674614
+validation_loss_final     | 0.409001916647
+validation_metrics        | {0.733333349227905,0.733333349227905,0.866666674613953,0.866666674613953}
+validation_loss           | {0.827081918716431,0.536275088787079,0.431326270103455,0.409001916646957}
+metrics_iters             | {3,6,9,10}
+</pre></li>
+<li>Predict probabilities for each class: <pre class="example">
+DROP TABLE IF EXISTS iris_predict;
+SELECT madlib.madlib_keras_predict('iris_model',      -- model
+                                   'iris_test',       -- test_table
+                                   'id',              -- id column
+                                   'attributes',      -- independent var
+                                   'iris_predict',    -- output table
+                                   'prob'             -- response type
+                                   );
+SELECT * FROM iris_predict ORDER BY id;
+</pre> <pre class="result">
+ id  | prob_Iris-setosa | prob_Iris-versicolor | prob_Iris-virginica
+-----+------------------+----------------------+---------------------
+   4 |        0.9241953 |          0.059390426 |          0.01641435
+   6 |        0.9657151 |           0.02809224 |        0.0061926916
+   8 |        0.9543316 |           0.03670931 |         0.008959154
+  12 |       0.93851465 |          0.048681837 |         0.012803554
+  13 |       0.93832576 |           0.04893658 |         0.012737647
+  15 |       0.98717564 |           0.01091238 |        0.0019119986
+  24 |        0.9240628 |          0.060805064 |         0.015132156
+  30 |       0.92063266 |          0.062279057 |         0.017088294
+  38 |        0.9353765 |          0.051353406 |         0.013270103
+  49 |        0.9709265 |          0.023811856 |         0.005261566
+  60 |      0.034395564 |            0.5260507 |          0.43955377
+  68 |      0.031360663 |           0.53689945 |          0.43173987
+  69 |     0.0098787155 |           0.46121457 |          0.52890676
+  76 |      0.031186827 |            0.5644549 |          0.40435827
+  78 |       0.00982633 |           0.48929632 |           0.5008774
+  81 |       0.03658528 |           0.53248984 |           0.4309249
+  85 |      0.015423619 |           0.48452598 |           0.5000504
+  90 |      0.026857043 |            0.5155698 |          0.45757324
+  91 |      0.013675574 |           0.47155368 |           0.5147708
+  94 |      0.073440716 |            0.5418821 |           0.3846772
+ 104 |     0.0021637122 |            0.3680499 |          0.62978643
+ 106 |    0.00052832486 |           0.30891812 |           0.6905536
+ 107 |      0.007315576 |           0.40949163 |           0.5831927
+ 110 |     0.0022259138 |            0.4058138 |          0.59196025
+ 119 |    0.00018505375 |           0.24510723 |           0.7547077
+ 127 |      0.009542585 |           0.46958733 |          0.52087003
+ 129 |     0.0019719477 |           0.36288205 |            0.635146
+ 134 |     0.0056418083 |           0.43401477 |          0.56034344
+ 139 |       0.01067015 |            0.4755573 |          0.51377255
+ 144 |     0.0018909549 |           0.37689638 |           0.6212126
+(30 rows)
+</pre></li>
+<li>Warm start. Next, use the warm_start parameter to continue learning, using the coefficients from the run above. Note that we don't drop the model table or model summary table: <pre class="example">
+SELECT madlib.madlib_keras_fit('iris_train_packed',   -- source table
+                               'iris_model',          -- model output table
+                               'model_arch_library',  -- model arch table
+                                1,                    -- model arch id
+                                $$ loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'] $$,  -- compile_params
+                                $$ batch_size=5, epochs=3 $$,  -- fit_params
+                                5,                   -- num_iterations
+                                FALSE,               -- use GPUs
+                                'iris_test_packed',   -- validation dataset
+                                1,                    -- metrics compute frequency
+                                TRUE,                 -- warm start
+                               'Sophie L.',           -- name
+                               'Simple MLP for iris dataset'  -- description
+                              );
+SELECT * FROM iris_model_summary;
+</pre> <pre class="result">
+-[ RECORD 1 ]-------------+--------------------------------------------------------------------------------------------
+source_table              | iris_train_packed
+model                     | iris_model
+dependent_varname         | class_text
+independent_varname       | attributes
+model_arch_table          | model_arch_library
+model_id                  | 1
+compile_params            |  loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']
+fit_params                |  batch_size=5, epochs=3
+num_iterations            | 5
+validation_table          | iris_test_packed
+metrics_compute_frequency | 1
+name                      | Sophie L.
+description               | Simple MLP for iris dataset
+model_type                | madlib_keras
+model_size                | 0.7900390625
+start_training_time       | 2019-06-05 20:59:43.971792
+end_training_time         | 2019-06-05 20:59:51.654586
+metrics_elapsed_time      | {2.89326310157776,4.14273309707642,5.24781513214111,6.34498596191406,7.68279695510864}
+madlib_version            | 1.17.0
+num_classes               | 3
+class_values              | {Iris-setosa,Iris-versicolor,Iris-virginica}
+dependent_vartype         | character varying
+normalizing_const         | 1
+metrics_type              | {accuracy}
+training_metrics_final    | 0.933333337307
+training_loss_final       | 0.334455043077
+training_metrics          | {0.933333337306976,0.933333337306976,0.975000023841858,0.975000023841858,0.933333337306976}
+training_loss             | {0.386842548847198,0.370587915182114,0.357161343097687,0.344598710536957,0.334455043077469}
+validation_metrics_final  | 0.866666674614
+validation_loss_final     | 0.34414178133
+validation_metrics        | {0.866666674613953,0.866666674613953,0.933333337306976,0.866666674613953,0.866666674613953}
+validation_loss           | {0.391442179679871,0.376414686441422,0.362262904644012,0.351912915706635,0.344141781330109}
+metrics_iters             | {1,2,3,4,5}
+</pre> Note that the loss and accuracy values pick up from where the previous run left off.</li>
+</ol>
+<h4>Transfer Learning</h4>
+<p>Here we want to start with initial weights from a pre-trained model rather than training from scratch. We also want to use a model architecture with the earlier feature layer(s) frozen to save on training time. The example below is somewhat contrived but gives you the idea of the steps.</p>
+<ol type="1">
+<li>Define and load a model architecture with the 1st hidden layer frozen:</li>
+</ol>
+<pre class="example">
+model_transfer = Sequential()
+model_transfer.add(Dense(10, activation='relu', input_shape=(4,), trainable=False))
+model_transfer.add(Dense(10, activation='relu'))
+model_transfer.add(Dense(3, activation='softmax'))
+model_simple.summary()
+<pre class="fragment">_________________________________________________________________
+Layer (type)                 Output Shape              Param #
+=================================================================
+dense_1 (Dense)              (None, 10)                50
+_________________________________________________________________
+dense_2 (Dense)              (None, 10)                110
+_________________________________________________________________
+dense_3 (Dense)              (None, 3)                 33
+=================================================================
+Total params: 193
+Trainable params: 143
+Non-trainable params: 50
+</pre>
+</pre><p> Export the model to JSON: </p><pre class="example">
+model_simple.to_json()
+</pre> <pre class="result">
+'{"class_name": "Sequential", "keras_version": "2.1.6", "config": [{"class_name": "Dense", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "dense_2", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "dtype": "float32", "activation": "relu", "trainable": false, "kernel_regularizer": null, "bias_initializer": {"class_name": "Zeros", "config": {}}, "units": 10, "batch_input_shape": [null, 4], "use_bias": true, "activity_regularizer": null}}, {"class_name": "Dense", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "dense_3", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "activation": "relu", "trainable": true, "kernel_regularizer": null, "bias_initializer": {"class_name": "Zeros", "config": {}}, "units": 10, "use_bias": true, "activity_regularizer": null}}, {"class_name": "Dense", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "dense_4", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "activation": "softmax", "trainable": true, "kernel_regularizer": null, "bias_initializer": {"class_name": "Zeros", "config": {}}, "units": 3, "use_bias": true, "activity_regularizer": null}}], "backend": "tensorflow"}'
+</pre><p> Load into model architecture table: </p><pre class="example">
+SELECT madlib.load_keras_model('model_arch_library',  -- Output table,
+$$
+{"class_name": "Sequential", "keras_version": "2.1.6", "config": [{"class_name": "Dense", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "dense_2", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "dtype": "float32", "activation": "relu", "trainable": false, "kernel_regularizer": null, "bias_initializer": {"class_name": "Zeros", "config": {}}, "units": 10, "batch_input_shape": [null, 4], "use_bias": true, "activity_regularizer": null}}, {"class_name": "Dense", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "dense_3", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "activation": "relu", "trainable": true, "kernel_regularizer": null, "bias_initializer": {"class_name": "Zeros", "config": {}}, "units": 10, "use_bias": true, "activity_regularizer": null}}, {"class_name": "Dense", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "dense_4", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "activation": "softmax", "trainable": true, "kernel_regularizer": null, "bias_initializer": {"class_name": "Zeros", "config": {}}, "units": 3, "use_bias": true, "activity_regularizer": null}}], "backend": "tensorflow"}
+$$
+::json,  -- JSON blob
+                               NULL,                  -- Weights
+                               'Maria',               -- Name
+                               'A transfer model'     -- Descr
+);
+</pre><p> Fetch the weights from a previous MADlib run. (Normally these would be downloaded from a source that trained the same model architecture on a related dataset.) </p><pre class="example">
+UPDATE model_arch_library
+SET model_weights = iris_model.model_weights
+FROM iris_model
+WHERE model_arch_library.model_id = 2;
+</pre><p> Now train the model using the transfer model and the pre-trained weights: </p><pre class="example">
+DROP TABLE IF EXISTS iris_model, iris_model_summary;
+SELECT madlib.madlib_keras_fit('iris_train_packed',   -- source table
+                               'iris_model',          -- model output table
+                               'model_arch_library',  -- model arch table
+                                2,                    -- model arch id
+                                $$ loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'] $$,  -- compile_params
+                                $$ batch_size=5, epochs=3 $$,  -- fit_params
+                                10                    -- num_iterations
+                              );
+SELECT * FROM iris_model_summary;
+</pre> <pre class="result">
+-[ RECORD 1 ]-------------+--------------------------------------------------------------------------
+source_table              | iris_train_packed
+model                     | iris_model
+dependent_varname         | class_text
+independent_varname       | attributes
+model_arch_table          | model_arch_library
+model_id                  | 2
+compile_params            |  loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']
+fit_params                |  batch_size=5, epochs=3
+num_iterations            | 10
+validation_table          |
+metrics_compute_frequency | 10
+name                      |
+description               |
+model_type                | madlib_keras
+model_size                | 0.7900390625
+start_training_time       | 2019-06-05 21:01:03.998422
+end_training_time         | 2019-06-05 21:01:13.525838
+metrics_elapsed_time      | {9.52741599082947}
+madlib_version            | 1.17.0
+num_classes               | 3
+class_values              | {Iris-setosa,Iris-versicolor,Iris-virginica}
+dependent_vartype         | character varying
+normalizing_const         | 1
+metrics_type              | {accuracy}
+training_metrics_final    | 0.975000023842
+training_loss_final       | 0.245171800256
+training_metrics          | {0.975000023841858}
+training_loss             | {0.245171800255775}
+validation_metrics_final  |
+validation_loss_final     |
+validation_metrics        |
+validation_loss           |
+metrics_iters             | {10}
+</pre><p><a class="anchor" id="notes"></a></p><dl class="section user"><dt>Notes</dt><dd></dd></dl>
+<ol type="1">
+<li>Refer to the deep learning section of the Apache MADlib wiki [5] for important information including supported libraries and versions.</li>
+<li>Classification is currently supported, not regression.</li>
+<li>Reminder about the distinction between warm start and transfer learning. Warm start uses model state (weights) from the model output table from a previous training run - set the 'warm_start' parameter to TRUE in the fit function. Transfer learning uses initial model state (weights) stored in the 'model_arch_table' - in this case set the 'warm_start' parameter to FALSE in the fit function.</li>
+</ol>
+<p><a class="anchor" id="background"></a></p><dl class="section user"><dt>Technical Background</dt><dd></dd></dl>
+<p>For an introduction to deep learning foundations, including MLP and CNN, refer to [6].</p>
+<p>This module trains a single large model across the database cluster using the bulk synchronous parallel (BSP) approach, with model averaging [7].</p>
+<p>On the effect of database cluster size: as the database cluster size increases, the per iteration loss will be higher since the model only sees 1/n of the data, where n is the number of segments. However, each iteration runs faster than single node because it is only traversing 1/n of the data. For highly non-convex solution spaces, convergence behavior may diminish as cluster size increases. Ensure that each segment has sufficient volume of data and examples of each class value.</p>
+<p>Alternatively, to train multiple models at the same time for model architecture search or hyperparameter tuning, you can use <a href="group__grp__keras__run__model__selection.html">Model Selection</a>, which does not do model averaging and hence may have better covergence efficiency.</p>
+<p><a class="anchor" id="literature"></a></p><dl class="section user"><dt>Literature</dt><dd></dd></dl>
+<p><a class="anchor" id="mlp-lit-1"></a>[1] <a href="https://keras.io/">https://keras.io/</a></p>
+<p>[2] <a href="https://www.tensorflow.org/">https://www.tensorflow.org/</a></p>
+<p>[3] "Neural Networks for Machine Learning", Lectures 6a and 6b on mini-batch gradient descent, Geoffrey Hinton with Nitish Srivastava and Kevin Swersky, <a href="http://www.cs.toronto.edu/~tijmen/csc321/slides/lecture_slides_lec6.pdf">http://www.cs.toronto.edu/~tijmen/csc321/slides/lecture_slides_lec6.pdf</a></p>
+<p>[4] <a href="https://keras.io/models/model/">https://keras.io/models/model/</a></p>
+<p>[5] Deep learning section of Apache MADlib wiki, <a href="https://cwiki.apache.org/confluence/display/MADLIB/Deep+Learning">https://cwiki.apache.org/confluence/display/MADLIB/Deep+Learning</a></p>
+<p>[6] Deep Learning, Ian Goodfellow, Yoshua Bengio and Aaron Courville, MIT Press, 2016.</p>
+<p>[7] "Resource-Efficient and Reproducible Model Selection on Deep Learning Systems," Supun Nakandala, Yuhao Zhang, and Arun Kumar, Technical Report, Computer Science and Engineering, University of California, San Diego <a href="https://adalabucsd.github.io/papers/TR_2019_Cerebro.pdf">https://adalabucsd.github.io/papers/TR_2019_Cerebro.pdf</a>.</p>
+<p>[8] Greenplum Database server configuration parameters <a href="https://gpdb.docs.pivotal.io/latest/ref_guide/config_params/guc-list.html">https://gpdb.docs.pivotal.io/latest/ref_guide/config_params/guc-list.html</a></p>
+<p><a class="anchor" id="related"></a></p><dl class="section user"><dt>Related Topics</dt><dd></dd></dl>
+<p>File <a class="el" href="madlib__keras_8sql__in.html" title="SQL functions for distributed deep learning with keras. ">madlib_keras.sql_in</a> documenting the training, evaluate and predict functions. </p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:59 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__keras__model__arch.html b/docs/rc/group__grp__keras__model__arch.html
new file mode 100644
index 0000000..cbdbdc8
--- /dev/null
+++ b/docs/rc/group__grp__keras__model__arch.html
@@ -0,0 +1,344 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Load Models</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__keras__model__arch.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Load Models<div class="ingroups"><a class="el" href="group__grp__early__stage.html">Early Stage Development</a> &raquo; <a class="el" href="group__grp__dl.html">Deep Learning</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<dl class="section warning"><dt>Warning</dt><dd><em> This MADlib method is still in early stage development. Interface and implementation are subject to change. </em></dd></dl>
+<div class="toc"><b>Contents</b><ul>
+<li class="level1">
+<a href="#load_keras_model">Load Model</a> </li>
+<li class="level1">
+<a href="#delete_keras_model">Delete Model</a> </li>
+<li class="level1">
+<a href="#example">Examples</a> </li>
+<li class="level1">
+<a href="#related">Related Topics</a> </li>
+</ul>
+</div><p>This utility function loads model architectures and weights into a table for use by deep learning algorithms. Model architecture is in JSON form and model weights are in the form of PostgreSQL binary data types (bytea). If the output table already exists, a new row is inserted into the table so it can act as a repository for multiple model architectures and weights.</p>
+<p>There is also a utility function to delete a model from the table.</p>
+<p><a class="anchor" id="load_keras_model"></a></p><dl class="section user"><dt>Load Model</dt><dd></dd></dl>
+<pre class="syntax">
+load_keras_model(
+    keras_model_arch_table,
+    model_arch,
+    model_weights,
+    name,
+    description
+    )
+</pre><p> <b>Arguments</b> </p><dl class="arglist">
+<dt>keras_model_arch_table </dt>
+<dd><p class="startdd">VARCHAR. Output table to load keras model architecture and weights. </p>
+<p class="enddd"></p>
+</dd>
+<dt>model_arch </dt>
+<dd><p class="startdd">JSON. JSON of the model architecture to load. </p>
+<p class="enddd"></p>
+</dd>
+<dt>model_weights (optional) </dt>
+<dd><p class="startdd">bytea. Model weights to load as a PostgreSQL binary data type. </p>
+<p class="enddd"></p>
+</dd>
+<dt>name (optional) </dt>
+<dd><p class="startdd">TEXT, default: NULL. Free text string to provide a name, if desired. </p>
+<p class="enddd"></p>
+</dd>
+<dt>description (optional) </dt>
+<dd><p class="startdd">TEXT, default: NULL. Free text string to provide a description, if desired. </p>
+<p class="enddd"></p>
+</dd>
+</dl>
+<p><b>Output table</b> <br />
+ The output table contains the following columns: </p><table class="output">
+<tr>
+<th>model_id </th><td>SERIAL PRIMARY KEY. Model ID.   </td></tr>
+<tr>
+<th>model_arch </th><td>JSON. JSON blob of the model architecture.   </td></tr>
+<tr>
+<th>model_weights </th><td>BYTEA. Weights of the model which may be used for warm start or transfer learning. Weights are stored as a PostgreSQL binary data type.   </td></tr>
+<tr>
+<th>name </th><td>TEXT. Name of model (free text).   </td></tr>
+<tr>
+<th>description </th><td>TEXT. Description of model (free text).   </td></tr>
+<tr>
+<th>__internal_madlib_id__ </th><td>TEXT. Unique id for model arch. This is an id used internally be MADlib.   </td></tr>
+</table>
+<p><a class="anchor" id="delete_keras_model"></a></p><dl class="section user"><dt>Delete Model</dt><dd></dd></dl>
+<pre class="syntax">
+delete_keras_model(
+    keras_model_arch_table
+    model_id
+)
+</pre><p> <b>Arguments</b> </p><dl class="arglist">
+<dt>keras_model_arch_table </dt>
+<dd><p class="startdd">VARCHAR. Table containing model architectures and weights. </p>
+<p class="enddd"></p>
+</dd>
+<dt>model_id </dt>
+<dd>INTEGER. The id of the model to be deleted.  </dd>
+</dl>
+<p><a class="anchor" id="example"></a></p><dl class="section user"><dt>Examples</dt><dd><ol type="1">
+<li>Define model architecture. Use Keras to define the model architecture: <pre class="example">
+import keras
+from keras.models import Sequential
+from keras.layers import Dense
+model_simple = Sequential()
+model_simple.add(Dense(10, activation='relu', input_shape=(4,)))
+model_simple.add(Dense(10, activation='relu'))
+model_simple.add(Dense(3, activation='softmax'))
+model_simple.summary()
+<pre class="fragment">_________________________________________________________________
+Layer (type)                 Output Shape              Param #
+=================================================================
+dense_1 (Dense)              (None, 10)                50
+_________________________________________________________________
+dense_2 (Dense)              (None, 10)                110
+_________________________________________________________________
+dense_3 (Dense)              (None, 3)                 33
+=================================================================
+Total params: 193
+Trainable params: 193
+Non-trainable params: 0
+</pre>
+</pre> Export the model to JSON: <pre class="example">
+model_simple.to_json()
+</pre> <pre class="result">
+'{"class_name": "Sequential", "keras_version": "2.1.6", "config": [{"class_name": "Dense", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "dense_1", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "dtype": "float32", "activation": "relu", "trainable": true, "kernel_regularizer": null, "bias_initializer": {"class_name": "Zeros", "config": {}}, "units": 10, "batch_input_shape": [null, 4], "use_bias": true, "activity_regularizer": null}}, {"class_name": "Dense", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "dense_2", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "activation": "relu", "trainable": true, "kernel_regularizer": null, "bias_initializer": {"class_name": "Zeros", "config": {}}, "units": 10, "use_bias": true, "activity_regularizer": null}}, {"class_name": "Dense", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "dense_3", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "activation": "softmax", "trainable": true, "kernel_regularizer": null, "bias_initializer": {"class_name": "Zeros", "config": {}}, "units": 3, "use_bias": true, "activity_regularizer": null}}], "backend": "tensorflow"}'
+</pre></li>
+<li>Load into model architecture table: <pre class="example">
+DROP TABLE IF EXISTS model_arch_library;
+SELECT madlib.load_keras_model('model_arch_library',  -- Output table,
+$$
+{"class_name": "Sequential", "keras_version": "2.1.6", "config": [{"class_name": "Dense", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "dense_1", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "dtype": "float32", "activation": "relu", "trainable": true, "kernel_regularizer": null, "bias_initializer": {"class_name": "Zeros", "config": {}}, "units": 10, "batch_input_shape": [null, 4], "use_bias": true, "activity_regularizer": null}}, {"class_name": "Dense", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "dense_2", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "activation": "relu", "trainable": true, "kernel_regularizer": null, "bias_initializer": {"class_name": "Zeros", "config": {}}, "units": 10, "use_bias": true, "activity_regularizer": null}}, {"class_name": "Dense", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "dense_3", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "activation": "softmax", "trainable": true, "kernel_regularizer": null, "bias_initializer": {"class_name": "Zeros", "config": {}}, "units": 3, "use_bias": true, "activity_regularizer": null}}], "backend": "tensorflow"}
+$$
+::json,  -- JSON blob
+                               NULL,                  -- Weights
+                               'Sophie',              -- Name
+                               'A simple model'       -- Descr
+);
+SELECT COUNT(*) FROM model_arch_library;
+</pre> <pre class="result">
+ count
+-------+
+     1
+</pre> Load another model architecture: <pre class="example">
+SELECT madlib.load_keras_model('model_arch_library',  -- Output table,
+$$
+{"class_name": "Sequential", "keras_version": "2.1.6", "config": [{"class_name": "Dense", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "dense_1", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "dtype": "float32", "activation": "relu", "trainable": true, "kernel_regularizer": null, "bias_initializer": {"class_name": "Zeros", "config": {}}, "units": 10, "batch_input_shape": [null, 4], "use_bias": true, "activity_regularizer": null}}, {"class_name": "Dense", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "dense_2", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "activation": "relu", "trainable": true, "kernel_regularizer": null, "bias_initializer": {"class_name": "Zeros", "config": {}}, "units": 10, "use_bias": true, "activity_regularizer": null}}, {"class_name": "Dense", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "dense_3", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "activation": "softmax", "trainable": true, "kernel_regularizer": null, "bias_initializer": {"class_name": "Zeros", "config": {}}, "units": 3, "use_bias": true, "activity_regularizer": null}}], "backend": "tensorflow"}
+$$
+::json,  -- JSON blob
+                               NULL,                  -- Weights
+                               'Maria',               -- Name
+                               'Also a simple model'  -- Descr
+);
+SELECT COUNT(*) FROM model_arch_library;
+</pre> <pre class="result">
+ count
+-------+
+     2
+</pre></li>
+<li>Load model weights. To load weights from previous MADlib run, use UPDATE to load directly into the table. For example, if 'model_weights' are the weights in the output table 'iris_model' from a previous run of '<a class="el" href="madlib__keras_8sql__in.html#a2277a353d16623515fe4488b43fadaaa">madlib_keras_fit()</a>' : <pre class="example">
+UPDATE model_arch_library SET model_weights = model_weights FROM iris_model WHERE model_id = 2;
+</pre> To load weights from Keras using a PL/Python function, we need to flatten then serialize the weights to store as a PostgreSQL binary data type. Byte format is more efficient on space and memory compared to a numeric array. The model weights will be de-serialized when passed to Keras functions. <pre class="example">
+CREATE OR REPLACE FUNCTION load_weights() RETURNS VOID AS
+$$
+from keras.layers import *
+from keras import Sequential
+import numpy as np
+import plpy
+#
+# create model
+model = Sequential()
+model.add(Dense(10, activation='relu', input_shape=(4,)))
+model.add(Dense(10, activation='relu'))
+model.add(Dense(3, activation='softmax'))
+#
+# get weights, flatten and serialize
+weights = model.get_weights()
+weights_flat = [w.flatten() for w in weights]
+weights1d =  np.concatenate(weights_flat).ravel()
+weights_bytea = weights1d.tostring()
+#
+# load query
+load_query = plpy.prepare("""SELECT madlib.load_keras_model(
+                        'model_arch_library',
+                        $1, $2)
+                    """, ['json','bytea'])
+plpy.execute(load_query, [model.to_json(), weights_bytea])
+$$ language plpythonu;
+-- Call load function
+SELECT load_weights();
+-- Check weights loaded OK
+SELECT COUNT(*) FROM model_arch_library WHERE model_weights IS NOT NULL;
+</pre> <pre class="result">
+ count
+-------+
+     1
+</pre> Load weights from Keras using psycopg2. (Psycopg is a PostgreSQL database adapter for the Python programming language.) As above we need to flatten then serialize the weights to store as a PostgreSQL binary data type. Note that the psycopg2.Binary function used below will increase the size of the Python object for the weights, so if your model is large it might be better to use a PL/Python function as above. <pre class="example">
+import psycopg2
+import psycopg2 as p2
+conn = p2.connect('postgresql://gpadmin@35.239.240.26:5432/madlib')
+cur = conn.cursor()
+from keras.layers import *
+from keras import Sequential
+import numpy as np
+#
+# create model
+model = Sequential()
+model.add(Dense(10, activation='relu', input_shape=(4,)))
+model.add(Dense(10, activation='relu'))
+model.add(Dense(3, activation='softmax'))
+#
+# get weights, flatten and serialize
+weights = model.get_weights()
+weights_flat = [w.flatten() for w in weights]
+weights1d =  np.concatenate(weights_flat).ravel()
+weights_bytea = psycopg2.Binary(weights1d.tostring())
+#
+# load query
+query = "SELECT madlib.load_keras_model('model_arch_library', %s,%s)"
+cur.execute(query,[model.to_json(),weights_bytea])
+conn.commit()
+</pre> From SQL check if weights loaded OK: <pre class="example">
+SELECT COUNT(*) FROM model_arch_library WHERE model_weights IS NOT NULL;
+</pre> <pre class="result">
+ count
+-------+
+     2
+</pre></li>
+<li>Delete one of the models: <pre class="example">
+SELECT madlib.delete_keras_model('model_arch_library',   -- Output table
+                                  1                      -- Model id
+                                );
+SELECT COUNT(*) FROM model_arch_library;
+</pre> <pre class="result">
+ count
+-------+
+     3
+</pre></li>
+</ol>
+</dd></dl>
+<p><a class="anchor" id="related"></a></p><dl class="section user"><dt>Related Topics</dt><dd></dd></dl>
+<p>See <a class="el" href="keras__model__arch__table_8sql__in.html">keras_model_arch_table.sql_in</a> </p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:59 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__keras__run__model__selection.html b/docs/rc/group__grp__keras__run__model__selection.html
new file mode 100644
index 0000000..d64631b
--- /dev/null
+++ b/docs/rc/group__grp__keras__run__model__selection.html
@@ -0,0 +1,1023 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Run Model Selection</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__keras__run__model__selection.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Run Model Selection<div class="ingroups"><a class="el" href="group__grp__early__stage.html">Early Stage Development</a> &raquo; <a class="el" href="group__grp__dl.html">Deep Learning</a> &raquo; <a class="el" href="group__grp__model__selection.html">Model Selection for DL</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b><ul>
+<li class="level1">
+<a href="#keras_fit">Fit</a> </li>
+<li class="level1">
+<a href="#keras_evaluate">Evaluate</a> </li>
+<li class="level1">
+<a href="#keras_predict">Predict</a> </li>
+<li class="level1">
+<a href="#example">Examples</a> </li>
+<li class="level1">
+<a href="#notes">Notes</a> </li>
+<li class="level1">
+<a href="#background">Technical Background</a> </li>
+<li class="level1">
+<a href="#literature">Literature</a> </li>
+<li class="level1">
+<a href="#related">Related Topics</a> </li>
+</ul>
+</div><dl class="section warning"><dt>Warning</dt><dd><em> This MADlib method is still in early stage development. Interface and implementation are subject to change. </em></dd></dl>
+<p>This module allows you to explore network architectures and hyperparameters by training many models a time across the database cluster. The aim is to support efficient empirical comparison of multiple training configurations. This process is called model selection, and the implementation here is based on a parallel execution strategy called model hopper parallelism (MOP) [1,2].</p>
+<p>Models are designed in Keras [3], which is a high-level neural network API written in Python. It can run on top of different backends and the one that is currently supported by MADlib is TensorFlow [4].</p>
+<p>The main use case is image classification using sequential models, which are made up of a linear stack of layers. This includes multilayer perceptrons (MLPs) and convolutional neural networks (CNNs). Regression is not currently supported.</p>
+<p>Before doing model selection in MADlib you will need to run the mini-batch preprocessor, and create a table with the various models and hyperparameters to try.</p>
+<p>You can mini-batch the training and evaluation datasets by using the <a href="group__grp__input__preprocessor__dl.html">Preprocessor for Images</a> which is a utility that prepares image data for use by models that support mini-batch as an optimization option. This is a one-time operation and you would only need to re-run the preprocessor if your input data has changed. The advantage of using mini-batching is that it can perform better than stochastic gradient descent because it uses more than one training example at a time, typically resulting faster and smoother convergence [5]. The input preprocessor also sets the distribution rules for the training data. For example, you may only want to train models on segments that reside on hosts that are GPU enabled.</p>
+<p>You can set up the models and hyperparameters to try with the <a href="group__grp__keras__setup__model__selection.html">Setup Model Selection</a> utility to define the unique combinations of model architectures, compile and fit parameters.</p>
+<dl class="section note"><dt>Note</dt><dd>If '<a class="el" href="madlib__keras__fit__multiple__model_8sql__in.html#ab62d8e8a4e8d221b7baa4da6a214c286">madlib_keras_fit_multiple_model()</a>' is running on GPDB 5 and some versions of GPDB 6, the database will keep adding to the disk space (in proportion to model size) and will only release the disk space once the fit multiple query has completed execution. This is not the case for GPDB 6.5.0+ where disk space is released during the fit multiple query.</dd>
+<dd>
+CUDA GPU memory cannot be released until the process holding it is terminated. When a MADlib deep learning function is called with GPUs, Greenplum internally creates a process (called a slice) which calls TensorFlow to do the computation. This process holds the GPU memory until one of the following two things happen: query finishes and user logs out of the Postgres client/session; or, query finishes and user waits for the timeout set by gp_vmem_idle_resource_timeout. The default value for this timeout is 18 sec [8]. So the recommendation is: log out/reconnect to the session after every GPU query; or wait for gp_vmem_idle_resource_timeout before you run another GPU query (you can also set it to a lower value).</dd></dl>
+<p><a class="anchor" id="keras_fit"></a></p><dl class="section user"><dt>Fit</dt><dd>The fit (training) function has the following format:</dd></dl>
+<pre class="syntax">
+madlib_keras_fit_multiple_model(
+    source_table,
+    model_output_table,
+    model_selection_table,
+    num_iterations,
+    use_gpus,
+    validation_table,
+    metrics_compute_frequency,
+    warm_start,
+    name,
+    description
+    )
+</pre><p><b>Arguments</b> </p><dl class="arglist">
+<dt>source_table </dt>
+<dd><p class="startdd">TEXT. Name of the table containing the training data. This is the name of the output table from the image preprocessor. Independent and dependent variables are specified in the preprocessor step which is why you do not need to explictly state them here as part of the fit function.</p>
+<p class="enddd"></p>
+</dd>
+<dt>model_output_table </dt>
+<dd>TEXT. Name of the output table containing the multiple models created. <dl class="section note"><dt>Note</dt><dd>pg_temp is not allowed as an output table schema for fit multiple. Details of output tables are shown below. </dd></dl>
+</dd>
+<dt>model_selection_table </dt>
+<dd><p class="startdd">TEXT. Name of the table containing model selection parameters to be tried. Here we mean both hyper-parameter tuning and model architecture search. </p>
+<p class="enddd"></p>
+</dd>
+<dt>num_iterations </dt>
+<dd><p class="startdd">INTEGER. Number of iterations to train.</p>
+<dl class="section note"><dt>Note</dt><dd>This parameter is different than the number of passes over the dataset, which is commonly referred to as the number of epochs. Since MADlib operates in a distributed system, the number of epochs is actually equal to this parameter 'num_iterations' X 'epochs' as specified in the Keras fit parameter. </dd></dl>
+</dd>
+<dt>use_gpus (optional) </dt>
+<dd><p class="startdd">BOOLEAN, default: FALSE (i.e., CPU). Determines whether GPUs are to be used for training the neural network. Set to TRUE to use GPUs.</p>
+<dl class="section note"><dt>Note</dt><dd>This parameter must not conflict with how the distribution rules are set in the preprocessor function. For example, if you set a distribution rule to use certain segments on hosts that do not have GPUs attached, you will get an error if you set ‘use_gpus’ to TRUE. Also, we have seen some memory related issues when segments share GPU resources. For example, if you have 1 GPU per segment host and your cluster has 4 segments per segment host, it means that all 4 segments will share the same GPU on each host. The current recommended configuration is 1 GPU per segment. </dd></dl>
+</dd>
+<dt>validation_table (optional) </dt>
+<dd><p class="startdd">TEXT, default: none. Name of the table containing the validation dataset. Note that the validation dataset must be preprocessed in the same way as the training dataset, so this is the name of the output table from running the image preprocessor on the validation dataset. Using a validation dataset can mean a longer training time, depending on its size. This can be controlled using the 'metrics_compute_frequency' parameter described below.</p>
+<p class="enddd"></p>
+</dd>
+<dt>metrics_compute_frequency (optional) </dt>
+<dd><p class="startdd">INTEGER, default: once at the end of training after 'num_iterations'. Frequency to compute per-iteration metrics for the training dataset and validation dataset (if specified). There can be considerable cost to computing metrics every iteration, especially if the training dataset is large. This parameter is a way of controlling the frequency of those computations. For example, if you specify 5, then metrics will be computed every 5 iterations as well as at the end of training after 'num_iterations'. If you use the default, metrics will be computed only once after 'num_iterations' have completed. </p>
+<p class="enddd"></p>
+</dd>
+<dt>warm_start (optional) </dt>
+<dd><p class="startdd">BOOLEAN, default: FALSE. Initalize weights with the coefficients from the last call to the fit function. If set to TRUE, weights will be initialized from the model table generated by the previous training run.</p>
+<dl class="section note"><dt>Note</dt><dd>The warm start feature works based on the name of the model output table from a previous training run. When using warm start, do not drop the model output table or the model output summary table before calling the fit function, since these are needed to obtain the weights from the previous run. If you are not using warm start, the model output table and the model output table summary must be dropped in the usual way before calling the training function. </dd></dl>
+</dd>
+<dt>name (optional) </dt>
+<dd><p class="startdd">TEXT, default: NULL. Free text string to identify a name, if desired. </p>
+<p class="enddd"></p>
+</dd>
+<dt>description (optional) </dt>
+<dd>TEXT, default: NULL. Free text string to provide a description, if desired.  </dd>
+</dl>
+<p><b>Output tables</b> <br />
+ The model output table produced by fit contains the following columns. There is one row per model as per the rows in the 'model_selection_table': </p><table class="output">
+<tr>
+<th>mst_key </th><td>INTEGER. ID that defines a unique tuple for model architecture-compile parameters-fit parameters, as defined in the 'model_selection_table'.  </td></tr>
+<tr>
+<th>model_weights </th><td>BYTEA8. Byte array containing the weights of the neural net.  </td></tr>
+<tr>
+<th>model_arch </th><td>TEXT. A JSON representation of the model architecture used in training.  </td></tr>
+</table>
+<p>An info table named &lt;model_output_table&gt;_info is also created, which has the following columns. There is one row per model as per the rows in the 'model_selection_table': </p><table class="output">
+<tr>
+<th>mst_key </th><td>INTEGER. ID that defines a unique tuple for model architecture-compile parameters-fit parameters, as defined in the 'model_selection_table'.  </td></tr>
+<tr>
+<th>model_id </th><td>INTEGER. ID that defines model in the 'model_arch_table'.  </td></tr>
+<tr>
+<th>compile_params </th><td>Compile parameters passed to Keras.  </td></tr>
+<tr>
+<th>fit_params </th><td>Fit parameters passed to Keras.  </td></tr>
+<tr>
+<th>model_type </th><td>General identifier for type of model trained. Currently says 'madlib_keras'.  </td></tr>
+<tr>
+<th>model_size </th><td>Size of the model in KB. Models are stored in 'bytea' data format which is used for binary strings in PostgreSQL type databases.  </td></tr>
+<tr>
+<th>metrics_elapsed_time </th><td>Array of elapsed time for metric computations as per the 'metrics_compute_frequency' parameter. Useful for drawing a curve showing loss, accuracy or other metrics as a function of time. For example, if 'metrics_compute_frequency=5' this would be an array of elapsed time for every 5th iteration, plus the last iteration.  </td></tr>
+<tr>
+<th>metrics_type </th><td>Metric specified in the 'compile_params'.  </td></tr>
+<tr>
+<th>training_metrics_final </th><td>Final value of the training metric after all iterations have completed. The metric reported is the one specified in the 'metrics_type' parameter.  </td></tr>
+<tr>
+<th>training_loss_final </th><td>Final value of the training loss after all iterations have completed.  </td></tr>
+<tr>
+<th>training_metrics </th><td>Array of training metrics as per the 'metrics_compute_frequency' parameter. For example, if 'metrics_compute_frequency=5' this would be an array of metrics for every 5th iteration, plus the last iteration.  </td></tr>
+<tr>
+<th>training_loss </th><td>Array of training losses as per the 'metrics_compute_frequency' parameter. For example, if 'metrics_compute_frequency=5' this would be an array of losses for every 5th iteration, plus the last iteration.  </td></tr>
+<tr>
+<th>validation_metrics_final </th><td>Final value of the validation metric after all iterations have completed. The metric reported is the one specified in the 'metrics_type' parameter.  </td></tr>
+<tr>
+<th>validation_loss_final </th><td>Final value of the validation loss after all iterations have completed.  </td></tr>
+<tr>
+<th>validation_metrics </th><td>Array of validation metrics as per the 'metrics_compute_frequency' parameter. For example, if 'metrics_compute_frequency=5' this would be an array of metrics for every 5th iteration, plus the last iteration.  </td></tr>
+<tr>
+<th>validation_loss </th><td><p class="starttd">Array of validation losses as per the 'metrics_compute_frequency' parameter. For example, if 'metrics_compute_frequency=5' this would be an array of losses for every 5th iteration, plus the last iteration. </p>
+<p class="endtd"></p>
+</td></tr>
+</table>
+<p>A summary table named &lt;model&gt;_summary is also created, which has the following columns: </p><table class="output">
+<tr>
+<th>source_table </th><td>Source table used for training.  </td></tr>
+<tr>
+<th>validation_table </th><td>Name of the table containing the validation dataset (if specified).  </td></tr>
+<tr>
+<th>model </th><td>Name of the output table containing the model for each model selection tuple.  </td></tr>
+<tr>
+<th>model_info </th><td>Name of the output table containing the model performance and other info for each model selection tuple.  </td></tr>
+<tr>
+<th>dependent_varname </th><td>Dependent variable column from the original source table in the image preprocessing step.  </td></tr>
+<tr>
+<th>independent_varname </th><td>Independent variables column from the original source table in the image preprocessing step.  </td></tr>
+<tr>
+<th>model_arch_table </th><td>Name of the table containing the model architecture and (optionally) the initial model weights.  </td></tr>
+<tr>
+<th>num_iterations </th><td>Number of iterations of training completed.  </td></tr>
+<tr>
+<th>metrics_compute_frequency </th><td>Frequency that per-iteration metrics are computed for the training dataset and validation datasets.  </td></tr>
+<tr>
+<th>warm_start </th><td>Indicates whether warm start used or not.  </td></tr>
+<tr>
+<th>name </th><td>Name of the training run (free text).  </td></tr>
+<tr>
+<th>description </th><td>Description of the training run (free text).  </td></tr>
+<tr>
+<th>start_training_time </th><td>Timestamp for start of training.  </td></tr>
+<tr>
+<th>end_training_time </th><td>Timestamp for end of training.  </td></tr>
+<tr>
+<th>madlib_version </th><td>Version of MADlib used.  </td></tr>
+<tr>
+<th>num_classes </th><td>Count of distinct classes values used.  </td></tr>
+<tr>
+<th>class_values </th><td>Array of actual class values used.  </td></tr>
+<tr>
+<th>dependent_vartype </th><td>Data type of the dependent variable.  </td></tr>
+<tr>
+<th>normalizing_constant </th><td>Normalizing constant used from the image preprocessing step.  </td></tr>
+<tr>
+<th>metrics_iters </th><td>Array indicating the iterations for which metrics are calculated, as derived from the parameters 'num_iterations' and 'metrics_compute_frequency'. For example, if 'num_iterations=5' and 'metrics_compute_frequency=2', then 'metrics_iters' value would be {2,4,5} indicating that metrics were computed at iterations 2, 4 and 5 (at the end). If 'num_iterations=5' and 'metrics_compute_frequency=1', then 'metrics_iters' value would be {1,2,3,4,5} indicating that metrics were computed at every iteration.  </td></tr>
+</table>
+<p><a class="anchor" id="keras_evaluate"></a></p><dl class="section user"><dt>Evaluate</dt><dd>The evaluation function has the following format:</dd></dl>
+<pre class="syntax">
+madlib_keras_evaluate(
+    model_table,
+    test_table,
+    output_table,
+    use_gpus
+    )
+</pre><p><b>Arguments</b> </p><dl class="arglist">
+<dt>model_table </dt>
+<dd><p class="startdd">TEXT. Name of the table containing the model to use for validation. </p>
+<p class="enddd"></p>
+</dd>
+<dt>test_table </dt>
+<dd><p class="startdd">TEXT. Name of the table containing the evaluation dataset. Note that test/validation data must be preprocessed in the same way as the training dataset, so this is the name of the output table from the image preprocessor. Independent and dependent variables are specified in the preprocessor step which is why you do not need to explictly state them here as part of the fit function.</p>
+<p class="enddd"></p>
+</dd>
+<dt>output_table </dt>
+<dd>TEXT. Name of table that validation output will be written to. Table contains: <table class="output">
+<tr>
+<th>loss </th><td>Loss value on evaluation dataset.  </td></tr>
+<tr>
+<th>metric </th><td>Metric value on evaluation dataset, where 'metrics_type' below identifies the type of metric.  </td></tr>
+<tr>
+<th>metrics_type </th><td><p class="starttd">Type of metric used that was used in the training step. </p>
+<p class="endtd"></p>
+</td></tr>
+</table>
+</dd>
+<dt>use_gpus (optional) </dt>
+<dd><p class="startdd">BOOLEAN, default: FALSE (i.e., CPU). Determines whether GPUs are to be used for training the neural network. Set to TRUE to use GPUs.</p>
+<dl class="section note"><dt>Note</dt><dd>This parameter must not conflict with how the distribution rules are set in the preprocessor function. For example, if you set a distribution rule to use certain segments on hosts that do not have GPUs attached, you will get an error if you set ‘use_gpus’ to TRUE. Also, we have seen some memory related issues when segments share GPU resources. For example, if you have 1 GPU per segment host and your cluster has 4 segments per segment host, it means that all 4 segments will share the same GPU on each host. The current recommended configuration is 1 GPU per segment.  </dd></dl>
+</dd>
+</dl>
+<p><a class="anchor" id="keras_predict"></a></p><dl class="section user"><dt>Predict</dt><dd>The prediction function has the following format: <pre class="syntax">
+madlib_keras_predict(
+    model_table,
+    test_table,
+    id_col,
+    independent_varname,
+    output_table,
+    pred_type,
+    use_gpus
+    )
+</pre></dd></dl>
+<p><b>Arguments</b> </p><dl class="arglist">
+<dt>model_table </dt>
+<dd><p class="startdd">TEXT. Name of the table containing the model to use for prediction. </p>
+<p class="enddd"></p>
+</dd>
+<dt>test_table </dt>
+<dd><p class="startdd">TEXT. Name of the table containing the dataset to predict on. Note that test data is not preprocessed (unlike fit and evaluate) so put one test image per row for prediction. Also see the comment below for the 'independent_varname' parameter regarding normalization.</p>
+<p></p>
+<p class="enddd"></p>
+</dd>
+<dt>id_col </dt>
+<dd><p class="startdd">TEXT. Name of the id column in the test data table. </p>
+<p class="enddd"></p>
+</dd>
+<dt>independent_varname </dt>
+<dd><p class="startdd">TEXT. Column with independent variables in the test table. If a 'normalizing_const' is specified when preprocessing the training dataset, this same normalization will be applied to the independent variables used in predict. </p>
+<p class="enddd"></p>
+</dd>
+<dt>output_table </dt>
+<dd>TEXT. Name of the table that prediction output will be written to. Table contains: <table class="output">
+<tr>
+<th>id </th><td>Gives the 'id' for each prediction, corresponding to each row from the test_table.  </td></tr>
+<tr>
+<th>estimated_COL_NAME </th><td>(For pred_type='response') The estimated class for classification, where COL_NAME is the name of the column to be predicted from test data.   </td></tr>
+<tr>
+<th>prob_CLASS </th><td><p class="starttd">(For pred_type='prob' for classification) The probability of a given class. There will be one column for each class in the training data.  </p>
+<p class="endtd"></p>
+</td></tr>
+</table>
+</dd>
+<dt>pred_type (optional) </dt>
+<dd><p class="startdd">TEXT, default: 'response'. The type of output desired, where 'response' gives the actual prediction and 'prob' gives the probability value for each class. </p>
+<p class="enddd"></p>
+</dd>
+<dt>use_gpus (optional) </dt>
+<dd><p class="startdd">BOOLEAN, default: FALSE (i.e., CPU). Determines whether GPUs are to be used for prediction/inference. Set to TRUE to use GPUs.</p>
+<dl class="section note"><dt>Note</dt><dd>The prediction function uses the whole cluster. If you are using GPUs, it requires that GPUs are attached to all hosts, and that there are the same number of GPUs on each host (homogeneous cluster). This is different from the fit() and evaluate() functions that support GPUs on only some of the hosts (heterogeneous cluster). Therefore, if you have GPUs only on some of the hosts, or an uneven numbers of GPUs per host, then set this parameter to FALSE to use CPUs.  </dd></dl>
+</dd>
+</dl>
+<p><a class="anchor" id="example"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<dl class="section note"><dt>Note</dt><dd>Deep learning works best on very large datasets, but that is not convenient for a quick introduction to the syntax. So in this example we use an MLP on the well known iris data set from <a href="https://archive.ics.uci.edu/ml/datasets/iris">https://archive.ics.uci.edu/ml/datasets/iris</a>. For more realistic examples with images please refer to the deep learning notebooks at <a href="https://github.com/apache/madlib-site/tree/asf-site/community-artifacts">https://github.com/apache/madlib-site/tree/asf-site/community-artifacts</a>.</dd></dl>
+<h4>Classification</h4>
+<ol type="1">
+<li>Create an input data set. <pre class="example">
+DROP TABLE IF EXISTS iris_data;
+CREATE TABLE iris_data(
+    id serial,
+    attributes numeric[],
+    class_text varchar
+);
+INSERT INTO iris_data(id, attributes, class_text) VALUES
+(1,ARRAY[5.1,3.5,1.4,0.2],'Iris-setosa'),
+(2,ARRAY[4.9,3.0,1.4,0.2],'Iris-setosa'),
+(3,ARRAY[4.7,3.2,1.3,0.2],'Iris-setosa'),
+(4,ARRAY[4.6,3.1,1.5,0.2],'Iris-setosa'),
+(5,ARRAY[5.0,3.6,1.4,0.2],'Iris-setosa'),
+(6,ARRAY[5.4,3.9,1.7,0.4],'Iris-setosa'),
+(7,ARRAY[4.6,3.4,1.4,0.3],'Iris-setosa'),
+(8,ARRAY[5.0,3.4,1.5,0.2],'Iris-setosa'),
+(9,ARRAY[4.4,2.9,1.4,0.2],'Iris-setosa'),
+(10,ARRAY[4.9,3.1,1.5,0.1],'Iris-setosa'),
+(11,ARRAY[5.4,3.7,1.5,0.2],'Iris-setosa'),
+(12,ARRAY[4.8,3.4,1.6,0.2],'Iris-setosa'),
+(13,ARRAY[4.8,3.0,1.4,0.1],'Iris-setosa'),
+(14,ARRAY[4.3,3.0,1.1,0.1],'Iris-setosa'),
+(15,ARRAY[5.8,4.0,1.2,0.2],'Iris-setosa'),
+(16,ARRAY[5.7,4.4,1.5,0.4],'Iris-setosa'),
+(17,ARRAY[5.4,3.9,1.3,0.4],'Iris-setosa'),
+(18,ARRAY[5.1,3.5,1.4,0.3],'Iris-setosa'),
+(19,ARRAY[5.7,3.8,1.7,0.3],'Iris-setosa'),
+(20,ARRAY[5.1,3.8,1.5,0.3],'Iris-setosa'),
+(21,ARRAY[5.4,3.4,1.7,0.2],'Iris-setosa'),
+(22,ARRAY[5.1,3.7,1.5,0.4],'Iris-setosa'),
+(23,ARRAY[4.6,3.6,1.0,0.2],'Iris-setosa'),
+(24,ARRAY[5.1,3.3,1.7,0.5],'Iris-setosa'),
+(25,ARRAY[4.8,3.4,1.9,0.2],'Iris-setosa'),
+(26,ARRAY[5.0,3.0,1.6,0.2],'Iris-setosa'),
+(27,ARRAY[5.0,3.4,1.6,0.4],'Iris-setosa'),
+(28,ARRAY[5.2,3.5,1.5,0.2],'Iris-setosa'),
+(29,ARRAY[5.2,3.4,1.4,0.2],'Iris-setosa'),
+(30,ARRAY[4.7,3.2,1.6,0.2],'Iris-setosa'),
+(31,ARRAY[4.8,3.1,1.6,0.2],'Iris-setosa'),
+(32,ARRAY[5.4,3.4,1.5,0.4],'Iris-setosa'),
+(33,ARRAY[5.2,4.1,1.5,0.1],'Iris-setosa'),
+(34,ARRAY[5.5,4.2,1.4,0.2],'Iris-setosa'),
+(35,ARRAY[4.9,3.1,1.5,0.1],'Iris-setosa'),
+(36,ARRAY[5.0,3.2,1.2,0.2],'Iris-setosa'),
+(37,ARRAY[5.5,3.5,1.3,0.2],'Iris-setosa'),
+(38,ARRAY[4.9,3.1,1.5,0.1],'Iris-setosa'),
+(39,ARRAY[4.4,3.0,1.3,0.2],'Iris-setosa'),
+(40,ARRAY[5.1,3.4,1.5,0.2],'Iris-setosa'),
+(41,ARRAY[5.0,3.5,1.3,0.3],'Iris-setosa'),
+(42,ARRAY[4.5,2.3,1.3,0.3],'Iris-setosa'),
+(43,ARRAY[4.4,3.2,1.3,0.2],'Iris-setosa'),
+(44,ARRAY[5.0,3.5,1.6,0.6],'Iris-setosa'),
+(45,ARRAY[5.1,3.8,1.9,0.4],'Iris-setosa'),
+(46,ARRAY[4.8,3.0,1.4,0.3],'Iris-setosa'),
+(47,ARRAY[5.1,3.8,1.6,0.2],'Iris-setosa'),
+(48,ARRAY[4.6,3.2,1.4,0.2],'Iris-setosa'),
+(49,ARRAY[5.3,3.7,1.5,0.2],'Iris-setosa'),
+(50,ARRAY[5.0,3.3,1.4,0.2],'Iris-setosa'),
+(51,ARRAY[7.0,3.2,4.7,1.4],'Iris-versicolor'),
+(52,ARRAY[6.4,3.2,4.5,1.5],'Iris-versicolor'),
+(53,ARRAY[6.9,3.1,4.9,1.5],'Iris-versicolor'),
+(54,ARRAY[5.5,2.3,4.0,1.3],'Iris-versicolor'),
+(55,ARRAY[6.5,2.8,4.6,1.5],'Iris-versicolor'),
+(56,ARRAY[5.7,2.8,4.5,1.3],'Iris-versicolor'),
+(57,ARRAY[6.3,3.3,4.7,1.6],'Iris-versicolor'),
+(58,ARRAY[4.9,2.4,3.3,1.0],'Iris-versicolor'),
+(59,ARRAY[6.6,2.9,4.6,1.3],'Iris-versicolor'),
+(60,ARRAY[5.2,2.7,3.9,1.4],'Iris-versicolor'),
+(61,ARRAY[5.0,2.0,3.5,1.0],'Iris-versicolor'),
+(62,ARRAY[5.9,3.0,4.2,1.5],'Iris-versicolor'),
+(63,ARRAY[6.0,2.2,4.0,1.0],'Iris-versicolor'),
+(64,ARRAY[6.1,2.9,4.7,1.4],'Iris-versicolor'),
+(65,ARRAY[5.6,2.9,3.6,1.3],'Iris-versicolor'),
+(66,ARRAY[6.7,3.1,4.4,1.4],'Iris-versicolor'),
+(67,ARRAY[5.6,3.0,4.5,1.5],'Iris-versicolor'),
+(68,ARRAY[5.8,2.7,4.1,1.0],'Iris-versicolor'),
+(69,ARRAY[6.2,2.2,4.5,1.5],'Iris-versicolor'),
+(70,ARRAY[5.6,2.5,3.9,1.1],'Iris-versicolor'),
+(71,ARRAY[5.9,3.2,4.8,1.8],'Iris-versicolor'),
+(72,ARRAY[6.1,2.8,4.0,1.3],'Iris-versicolor'),
+(73,ARRAY[6.3,2.5,4.9,1.5],'Iris-versicolor'),
+(74,ARRAY[6.1,2.8,4.7,1.2],'Iris-versicolor'),
+(75,ARRAY[6.4,2.9,4.3,1.3],'Iris-versicolor'),
+(76,ARRAY[6.6,3.0,4.4,1.4],'Iris-versicolor'),
+(77,ARRAY[6.8,2.8,4.8,1.4],'Iris-versicolor'),
+(78,ARRAY[6.7,3.0,5.0,1.7],'Iris-versicolor'),
+(79,ARRAY[6.0,2.9,4.5,1.5],'Iris-versicolor'),
+(80,ARRAY[5.7,2.6,3.5,1.0],'Iris-versicolor'),
+(81,ARRAY[5.5,2.4,3.8,1.1],'Iris-versicolor'),
+(82,ARRAY[5.5,2.4,3.7,1.0],'Iris-versicolor'),
+(83,ARRAY[5.8,2.7,3.9,1.2],'Iris-versicolor'),
+(84,ARRAY[6.0,2.7,5.1,1.6],'Iris-versicolor'),
+(85,ARRAY[5.4,3.0,4.5,1.5],'Iris-versicolor'),
+(86,ARRAY[6.0,3.4,4.5,1.6],'Iris-versicolor'),
+(87,ARRAY[6.7,3.1,4.7,1.5],'Iris-versicolor'),
+(88,ARRAY[6.3,2.3,4.4,1.3],'Iris-versicolor'),
+(89,ARRAY[5.6,3.0,4.1,1.3],'Iris-versicolor'),
+(90,ARRAY[5.5,2.5,4.0,1.3],'Iris-versicolor'),
+(91,ARRAY[5.5,2.6,4.4,1.2],'Iris-versicolor'),
+(92,ARRAY[6.1,3.0,4.6,1.4],'Iris-versicolor'),
+(93,ARRAY[5.8,2.6,4.0,1.2],'Iris-versicolor'),
+(94,ARRAY[5.0,2.3,3.3,1.0],'Iris-versicolor'),
+(95,ARRAY[5.6,2.7,4.2,1.3],'Iris-versicolor'),
+(96,ARRAY[5.7,3.0,4.2,1.2],'Iris-versicolor'),
+(97,ARRAY[5.7,2.9,4.2,1.3],'Iris-versicolor'),
+(98,ARRAY[6.2,2.9,4.3,1.3],'Iris-versicolor'),
+(99,ARRAY[5.1,2.5,3.0,1.1],'Iris-versicolor'),
+(100,ARRAY[5.7,2.8,4.1,1.3],'Iris-versicolor'),
+(101,ARRAY[6.3,3.3,6.0,2.5],'Iris-virginica'),
+(102,ARRAY[5.8,2.7,5.1,1.9],'Iris-virginica'),
+(103,ARRAY[7.1,3.0,5.9,2.1],'Iris-virginica'),
+(104,ARRAY[6.3,2.9,5.6,1.8],'Iris-virginica'),
+(105,ARRAY[6.5,3.0,5.8,2.2],'Iris-virginica'),
+(106,ARRAY[7.6,3.0,6.6,2.1],'Iris-virginica'),
+(107,ARRAY[4.9,2.5,4.5,1.7],'Iris-virginica'),
+(108,ARRAY[7.3,2.9,6.3,1.8],'Iris-virginica'),
+(109,ARRAY[6.7,2.5,5.8,1.8],'Iris-virginica'),
+(110,ARRAY[7.2,3.6,6.1,2.5],'Iris-virginica'),
+(111,ARRAY[6.5,3.2,5.1,2.0],'Iris-virginica'),
+(112,ARRAY[6.4,2.7,5.3,1.9],'Iris-virginica'),
+(113,ARRAY[6.8,3.0,5.5,2.1],'Iris-virginica'),
+(114,ARRAY[5.7,2.5,5.0,2.0],'Iris-virginica'),
+(115,ARRAY[5.8,2.8,5.1,2.4],'Iris-virginica'),
+(116,ARRAY[6.4,3.2,5.3,2.3],'Iris-virginica'),
+(117,ARRAY[6.5,3.0,5.5,1.8],'Iris-virginica'),
+(118,ARRAY[7.7,3.8,6.7,2.2],'Iris-virginica'),
+(119,ARRAY[7.7,2.6,6.9,2.3],'Iris-virginica'),
+(120,ARRAY[6.0,2.2,5.0,1.5],'Iris-virginica'),
+(121,ARRAY[6.9,3.2,5.7,2.3],'Iris-virginica'),
+(122,ARRAY[5.6,2.8,4.9,2.0],'Iris-virginica'),
+(123,ARRAY[7.7,2.8,6.7,2.0],'Iris-virginica'),
+(124,ARRAY[6.3,2.7,4.9,1.8],'Iris-virginica'),
+(125,ARRAY[6.7,3.3,5.7,2.1],'Iris-virginica'),
+(126,ARRAY[7.2,3.2,6.0,1.8],'Iris-virginica'),
+(127,ARRAY[6.2,2.8,4.8,1.8],'Iris-virginica'),
+(128,ARRAY[6.1,3.0,4.9,1.8],'Iris-virginica'),
+(129,ARRAY[6.4,2.8,5.6,2.1],'Iris-virginica'),
+(130,ARRAY[7.2,3.0,5.8,1.6],'Iris-virginica'),
+(131,ARRAY[7.4,2.8,6.1,1.9],'Iris-virginica'),
+(132,ARRAY[7.9,3.8,6.4,2.0],'Iris-virginica'),
+(133,ARRAY[6.4,2.8,5.6,2.2],'Iris-virginica'),
+(134,ARRAY[6.3,2.8,5.1,1.5],'Iris-virginica'),
+(135,ARRAY[6.1,2.6,5.6,1.4],'Iris-virginica'),
+(136,ARRAY[7.7,3.0,6.1,2.3],'Iris-virginica'),
+(137,ARRAY[6.3,3.4,5.6,2.4],'Iris-virginica'),
+(138,ARRAY[6.4,3.1,5.5,1.8],'Iris-virginica'),
+(139,ARRAY[6.0,3.0,4.8,1.8],'Iris-virginica'),
+(140,ARRAY[6.9,3.1,5.4,2.1],'Iris-virginica'),
+(141,ARRAY[6.7,3.1,5.6,2.4],'Iris-virginica'),
+(142,ARRAY[6.9,3.1,5.1,2.3],'Iris-virginica'),
+(143,ARRAY[5.8,2.7,5.1,1.9],'Iris-virginica'),
+(144,ARRAY[6.8,3.2,5.9,2.3],'Iris-virginica'),
+(145,ARRAY[6.7,3.3,5.7,2.5],'Iris-virginica'),
+(146,ARRAY[6.7,3.0,5.2,2.3],'Iris-virginica'),
+(147,ARRAY[6.3,2.5,5.0,1.9],'Iris-virginica'),
+(148,ARRAY[6.5,3.0,5.2,2.0],'Iris-virginica'),
+(149,ARRAY[6.2,3.4,5.4,2.3],'Iris-virginica'),
+(150,ARRAY[5.9,3.0,5.1,1.8],'Iris-virginica');
+</pre> Create a test/validation dataset from the training data: <pre class="example">
+DROP TABLE IF EXISTS iris_train, iris_test;
+-- Set seed so results are reproducible
+SELECT setseed(0);
+SELECT madlib.train_test_split('iris_data',     -- Source table
+                               'iris',          -- Output table root name
+                                0.8,            -- Train proportion
+                                NULL,           -- Test proportion (0.2)
+                                NULL,           -- Strata definition
+                                NULL,           -- Output all columns
+                                NULL,           -- Sample without replacement
+                                TRUE            -- Separate output tables
+                              );
+SELECT COUNT(*) FROM iris_train;
+</pre> <pre class="result">
+ count
+------+
+   120
+</pre></li>
+<li>Call the preprocessor for deep learning. For the training dataset: <pre class="example">
+\x on
+DROP TABLE IF EXISTS iris_train_packed, iris_train_packed_summary;
+SELECT madlib.training_preprocessor_dl('iris_train',         -- Source table
+                                       'iris_train_packed',  -- Output table
+                                       'class_text',         -- Dependent variable
+                                       'attributes'          -- Independent variable
+                                        );
+SELECT * FROM iris_train_packed_summary;
+</pre> <pre class="result">
+-[ RECORD 1 ]-------+---------------------------------------------
+source_table        | iris_train
+output_table        | iris_train_packed
+dependent_varname   | class_text
+independent_varname | attributes
+dependent_vartype   | character varying
+class_values        | {Iris-setosa,Iris-versicolor,Iris-virginica}
+buffer_size         | 60
+normalizing_const   | 1.0
+num_classes         | 3
+</pre> For the validation dataset: <pre class="example">
+DROP TABLE IF EXISTS iris_test_packed, iris_test_packed_summary;
+SELECT madlib.validation_preprocessor_dl('iris_test',          -- Source table
+                                         'iris_test_packed',   -- Output table
+                                         'class_text',         -- Dependent variable
+                                         'attributes',         -- Independent variable
+                                         'iris_train_packed'   -- From training preprocessor step
+                                          );
+SELECT * FROM iris_test_packed_summary;
+</pre> <pre class="result">
+-[ RECORD 1 ]-------+---------------------------------------------
+source_table        | iris_test
+output_table        | iris_test_packed
+dependent_varname   | class_text
+independent_varname | attributes
+dependent_vartype   | character varying
+class_values        | {Iris-setosa,Iris-versicolor,Iris-virginica}
+buffer_size         | 15
+normalizing_const   | 1.0
+num_classes         | 3
+</pre></li>
+<li>Define and load model architecture. Use Keras to define the model architecture with 1 hidden layer: <pre class="example">
+import keras
+from keras.models import Sequential
+from keras.layers import Dense
+model1 = Sequential()
+model1.add(Dense(10, activation='relu', input_shape=(4,)))
+model1.add(Dense(10, activation='relu'))
+model1.add(Dense(3, activation='softmax'))
+model1.summary()
+<pre class="fragment">_________________________________________________________________
+Layer (type)                 Output Shape              Param #
+=================================================================
+dense_1 (Dense)              (None, 10)                50
+_________________________________________________________________
+dense_2 (Dense)              (None, 10)                110
+_________________________________________________________________
+dense_3 (Dense)              (None, 3)                 33
+=================================================================
+Total params: 193
+Trainable params: 193
+Non-trainable params: 0
+</pre>
+</pre> Export the model to JSON: <pre class="example">
+model1.to_json()
+</pre> <pre class="result">
+'{"class_name": "Sequential", "keras_version": "2.1.6", "config": [{"class_name": "Dense", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "dense_1", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "dtype": "float32", "activation": "relu", "trainable": true, "kernel_regularizer": null, "bias_initializer": {"class_name": "Zeros", "config": {}}, "units": 10, "batch_input_shape": [null, 4], "use_bias": true, "activity_regularizer": null}}, {"class_name": "Dense", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "dense_2", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "activation": "relu", "trainable": true, "kernel_regularizer": null, "bias_initializer": {"class_name": "Zeros", "config": {}}, "units": 10, "use_bias": true, "activity_regularizer": null}}, {"class_name": "Dense", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "dense_3", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "activation": "softmax", "trainable": true, "kernel_regularizer": null, "bias_initializer": {"class_name": "Zeros", "config": {}}, "units": 3, "use_bias": true, "activity_regularizer": null}}], "backend": "tensorflow"}'
+</pre> Define model architecture with 2 hidden layers: <pre class="example">
+model2 = Sequential()
+model2.add(Dense(10, activation='relu', input_shape=(4,)))
+model2.add(Dense(10, activation='relu'))
+model2.add(Dense(10, activation='relu'))
+model2.add(Dense(3, activation='softmax'))
+model2.summary()
+<pre class="fragment">Layer (type)                 Output Shape              Param #
+=================================================================
+dense_4 (Dense)              (None, 10)                50
+_________________________________________________________________
+dense_5 (Dense)              (None, 10)                110
+_________________________________________________________________
+dense_6 (Dense)              (None, 10)                110
+_________________________________________________________________
+dense_7 (Dense)              (None, 3)                 33
+=================================================================
+Total params: 303
+Trainable params: 303
+Non-trainable params: 0
+</pre>
+</pre> Export the model to JSON: <pre class="example">
+model2.to_json()
+</pre> <pre class="result">
+'{"class_name": "Sequential", "keras_version": "2.1.6", "config": [{"class_name": "Dense", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "dense_4", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "dtype": "float32", "activation": "relu", "trainable": true, "kernel_regularizer": null, "bias_initializer": {"class_name": "Zeros", "config": {}}, "units": 10, "batch_input_shape": [null, 4], "use_bias": true, "activity_regularizer": null}}, {"class_name": "Dense", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "dense_5", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "activation": "relu", "trainable": true, "kernel_regularizer": null, "bias_initializer": {"class_name": "Zeros", "config": {}}, "units": 10, "use_bias": true, "activity_regularizer": null}}, {"class_name": "Dense", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "dense_6", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "activation": "relu", "trainable": true, "kernel_regularizer": null, "bias_initializer": {"class_name": "Zeros", "config": {}}, "units": 10, "use_bias": true, "activity_regularizer": null}}, {"class_name": "Dense", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "dense_7", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "activation": "softmax", "trainable": true, "kernel_regularizer": null, "bias_initializer": {"class_name": "Zeros", "config": {}}, "units": 3, "use_bias": true, "activity_regularizer": null}}], "backend": "tensorflow"}'
+</pre> Load into model architecture table: <pre class="example">
+DROP TABLE IF EXISTS model_arch_library;
+SELECT madlib.load_keras_model('model_arch_library',  -- Output table,
+$$
+{"class_name": "Sequential", "keras_version": "2.1.6", "config": [{"class_name": "Dense", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "dense_1", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "dtype": "float32", "activation": "relu", "trainable": true, "kernel_regularizer": null, "bias_initializer": {"class_name": "Zeros", "config": {}}, "units": 10, "batch_input_shape": [null, 4], "use_bias": true, "activity_regularizer": null}}, {"class_name": "Dense", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "dense_2", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "activation": "relu", "trainable": true, "kernel_regularizer": null, "bias_initializer": {"class_name": "Zeros", "config": {}}, "units": 10, "use_bias": true, "activity_regularizer": null}}, {"class_name": "Dense", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "dense_3", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "activation": "softmax", "trainable": true, "kernel_regularizer": null, "bias_initializer": {"class_name": "Zeros", "config": {}}, "units": 3, "use_bias": true, "activity_regularizer": null}}], "backend": "tensorflow"}
+$$
+::json,         -- JSON blob
+                               NULL,                  -- Weights
+                               'Sophie',              -- Name
+                               'MLP with 1 hidden layer'       -- Descr
+);
+SELECT madlib.load_keras_model('model_arch_library',  -- Output table,
+$$
+{"class_name": "Sequential", "keras_version": "2.1.6", "config": [{"class_name": "Dense", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "dense_4", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "dtype": "float32", "activation": "relu", "trainable": true, "kernel_regularizer": null, "bias_initializer": {"class_name": "Zeros", "config": {}}, "units": 10, "batch_input_shape": [null, 4], "use_bias": true, "activity_regularizer": null}}, {"class_name": "Dense", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "dense_5", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "activation": "relu", "trainable": true, "kernel_regularizer": null, "bias_initializer": {"class_name": "Zeros", "config": {}}, "units": 10, "use_bias": true, "activity_regularizer": null}}, {"class_name": "Dense", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "dense_6", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "activation": "relu", "trainable": true, "kernel_regularizer": null, "bias_initializer": {"class_name": "Zeros", "config": {}}, "units": 10, "use_bias": true, "activity_regularizer": null}}, {"class_name": "Dense", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "dense_7", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "activation": "softmax", "trainable": true, "kernel_regularizer": null, "bias_initializer": {"class_name": "Zeros", "config": {}}, "units": 3, "use_bias": true, "activity_regularizer": null}}], "backend": "tensorflow"}
+$$
+::json,         -- JSON blob
+                               NULL,                  -- Weights
+                               'Maria',               -- Name
+                               'MLP with 2 hidden layers'       -- Descr
+);
+</pre></li>
+<li>Define model selection tuples and load. Select the model(s) from the model architecture table that you want to run, along with the compile and fit parameters. Combinations will be created for the set of model selection parameters will be loaded: <pre class="example">
+DROP TABLE IF EXISTS mst_table, mst_table_summary;
+SELECT madlib.load_model_selection_table('model_arch_library', -- model architecture table
+                                         'mst_table',          -- model selection table output
+                                          ARRAY[1,2],              -- model ids from model architecture table
+                                          ARRAY[                   -- compile params
+                                              $$loss='categorical_crossentropy',optimizer='Adam(lr=0.1)',metrics=['accuracy']$$,
+                                              $$loss='categorical_crossentropy', optimizer='Adam(lr=0.01)',metrics=['accuracy']$$,
+                                              $$loss='categorical_crossentropy',optimizer='Adam(lr=0.001)',metrics=['accuracy']$$
+                                          ],
+                                          ARRAY[                    -- fit params
+                                              $$batch_size=4,epochs=1$$,
+                                              $$batch_size=8,epochs=1$$
+                                          ]
+                                         );
+SELECT * FROM mst_table ORDER BY mst_key;
+</pre> <pre class="result">
+ mst_key | model_id |                                 compile_params                                  |      fit_params
+---------+----------+---------------------------------------------------------------------------------+-----------------------
+       1 |        1 | loss='categorical_crossentropy',optimizer='Adam(lr=0.1)',metrics=['accuracy']   | batch_size=4,epochs=1
+       2 |        1 | loss='categorical_crossentropy',optimizer='Adam(lr=0.1)',metrics=['accuracy']   | batch_size=8,epochs=1
+       3 |        1 | loss='categorical_crossentropy', optimizer='Adam(lr=0.01)',metrics=['accuracy'] | batch_size=4,epochs=1
+       4 |        1 | loss='categorical_crossentropy', optimizer='Adam(lr=0.01)',metrics=['accuracy'] | batch_size=8,epochs=1
+       5 |        1 | loss='categorical_crossentropy',optimizer='Adam(lr=0.001)',metrics=['accuracy'] | batch_size=4,epochs=1
+       6 |        1 | loss='categorical_crossentropy',optimizer='Adam(lr=0.001)',metrics=['accuracy'] | batch_size=8,epochs=1
+       7 |        2 | loss='categorical_crossentropy',optimizer='Adam(lr=0.1)',metrics=['accuracy']   | batch_size=4,epochs=1
+       8 |        2 | loss='categorical_crossentropy',optimizer='Adam(lr=0.1)',metrics=['accuracy']   | batch_size=8,epochs=1
+       9 |        2 | loss='categorical_crossentropy', optimizer='Adam(lr=0.01)',metrics=['accuracy'] | batch_size=4,epochs=1
+      10 |        2 | loss='categorical_crossentropy', optimizer='Adam(lr=0.01)',metrics=['accuracy'] | batch_size=8,epochs=1
+      11 |        2 | loss='categorical_crossentropy',optimizer='Adam(lr=0.001)',metrics=['accuracy'] | batch_size=4,epochs=1
+      12 |        2 | loss='categorical_crossentropy',optimizer='Adam(lr=0.001)',metrics=['accuracy'] | batch_size=8,epochs=1
+(12 rows)
+</pre> This is the name of the model architecture table that corresponds to the model selection table: <pre class="example">
+SELECT * FROM mst_table_summary;
+</pre> <pre class="result">
+  model_arch_table
+--------------------+
+ model_arch_library
+</pre></li>
+<li>Train multiple models. <pre class="example">
+DROP TABLE IF EXISTS iris_multi_model, iris_multi_model_summary, iris_multi_model_info;
+SELECT madlib.madlib_keras_fit_multiple_model('iris_train_packed',    -- source_table
+                                              'iris_multi_model',     -- model_output_table
+                                              'mst_table',            -- model_selection_table
+                                              10,                     -- num_iterations
+                                              FALSE                   -- use gpus
+                                             );
+</pre> View the model summary: <pre class="example">
+SELECT * FROM iris_multi_model_summary;
+</pre> <pre class="result">
+source_table              | iris_train_packed
+validation_table          |
+model                     | iris_multi_model
+model_info                | iris_multi_model_info
+dependent_varname         | class_text
+independent_varname       | attributes
+model_arch_table          | model_arch_library
+num_iterations            | 10
+metrics_compute_frequency | 10
+warm_start                | f
+name                      |
+description               |
+start_training_time       | 2019-12-16 18:54:33.826414
+end_training_time         | 2019-12-16 18:56:19.106321
+madlib_version            | 1.17.0
+num_classes               | 3
+class_values              | {Iris-setosa,Iris-versicolor,Iris-virginica}
+dependent_vartype         | character varying
+normalizing_const         | 1
+metrics_iters             | {10}
+</pre> View results for each model: <pre class="example">
+SELECT * FROM iris_multi_model_info ORDER BY training_metrics_final DESC, training_loss_final;
+</pre> <pre class="result">
+ mst_key | model_id |                                 compile_params                                  |      fit_params       |  model_type  |  model_size  | metrics_elapsed_time | metrics_type | training_metrics_final | training_loss_final |  training_metrics   |    training_loss    | validation_metrics_final | validation_loss_final | validation_metrics | validation_loss
+---------+----------+---------------------------------------------------------------------------------+-----------------------+--------------+--------------+----------------------+--------------+------------------------+---------------------+---------------------+---------------------+--------------------------+-----------------------+--------------------+-----------------
+       9 |        2 | loss='categorical_crossentropy', optimizer='Adam(lr=0.01)',metrics=['accuracy'] | batch_size=4,epochs=1 | madlib_keras | 1.2197265625 | {119.42963886261}    | {accuracy}   |         0.983333349228 |       0.07286978513 | {0.983333349227905} | {0.072869785130024} |                          |                       |                    |
+      10 |        2 | loss='categorical_crossentropy', optimizer='Adam(lr=0.01)',metrics=['accuracy'] | batch_size=8,epochs=1 | madlib_keras | 1.2197265625 | {118.485460996628}   | {accuracy}   |         0.975000023842 |     0.0798489004374 | {0.975000023841858} | {0.079848900437355} |                          |                       |                    |
+       4 |        1 | loss='categorical_crossentropy', optimizer='Adam(lr=0.01)',metrics=['accuracy'] | batch_size=8,epochs=1 | madlib_keras | 0.7900390625 | {118.707404851913}   | {accuracy}   |         0.975000023842 |      0.143356323242 | {0.975000023841858} | {0.143356323242188} |                          |                       |                    |
+      11 |        2 | loss='categorical_crossentropy',optimizer='Adam(lr=0.001)',metrics=['accuracy'] | batch_size=4,epochs=1 | madlib_keras | 1.2197265625 | {118.224883794785}   | {accuracy}   |         0.958333313465 |      0.636615753174 | {0.958333313465118} | {0.636615753173828} |                          |                       |                    |
+       2 |        1 | loss='categorical_crossentropy',optimizer='Adam(lr=0.1)',metrics=['accuracy']   | batch_size=8,epochs=1 | madlib_keras | 0.7900390625 | {117.732690811157}   | {accuracy}   |         0.925000011921 |      0.161811202765 | {0.925000011920929} | {0.161811202764511} |                          |                       |                    |
+       5 |        1 | loss='categorical_crossentropy',optimizer='Adam(lr=0.001)',metrics=['accuracy'] | batch_size=4,epochs=1 | madlib_keras | 0.7900390625 | {120.357484817505}   | {accuracy}   |         0.833333313465 |        0.5542948246 | {0.833333313465118} | {0.55429482460022}  |                          |                       |                    |
+       3 |        1 | loss='categorical_crossentropy', optimizer='Adam(lr=0.01)',metrics=['accuracy'] | batch_size=4,epochs=1 | madlib_keras | 0.7900390625 | {118.928852796555}   | {accuracy}   |         0.824999988079 |      0.301002770662 | {0.824999988079071} | {0.301002770662308} |                          |                       |                    |
+       6 |        1 | loss='categorical_crossentropy',optimizer='Adam(lr=0.001)',metrics=['accuracy'] | batch_size=8,epochs=1 | madlib_keras | 0.7900390625 | {120.566634893417}   | {accuracy}   |         0.816666662693 |      0.875298440456 | {0.816666662693024} | {0.87529844045639}  |                          |                       |                    |
+      12 |        2 | loss='categorical_crossentropy',optimizer='Adam(lr=0.001)',metrics=['accuracy'] | batch_size=8,epochs=1 | madlib_keras | 1.2197265625 | {119.182703018188}   | {accuracy}   |         0.774999976158 |      0.785651266575 | {0.774999976158142} | {0.78565126657486}  |                          |                       |                    |
+       1 |        1 | loss='categorical_crossentropy',optimizer='Adam(lr=0.1)',metrics=['accuracy']   | batch_size=4,epochs=1 | madlib_keras | 0.7900390625 | {119.643137931824}   | {accuracy}   |         0.508333325386 |      0.762569189072 | {0.508333325386047} | {0.762569189071655} |                          |                       |                    |
+       7 |        2 | loss='categorical_crossentropy',optimizer='Adam(lr=0.1)',metrics=['accuracy']   | batch_size=4,epochs=1 | madlib_keras | 1.2197265625 | {120.15305685997}    | {accuracy}   |         0.333333343267 |       1.09794270992 | {0.333333343267441} | {1.09794270992279}  |                          |                       |                    |
+       8 |        2 | loss='categorical_crossentropy',optimizer='Adam(lr=0.1)',metrics=['accuracy']   | batch_size=8,epochs=1 | madlib_keras | 1.2197265625 | {119.911739826202}   | {accuracy}   |         0.333333343267 |       1.10344016552 | {0.333333343267441} | {1.10344016551971}  |                          |                       |                    |
+(12 rows)
+</pre></li>
+<li>Evaluate. Now run evaluate using models we built above: <pre class="example">
+DROP TABLE IF EXISTS iris_validate;
+SELECT madlib.madlib_keras_evaluate('iris_multi_model',  -- model
+                                    'iris_test_packed',  -- test table
+                                    'iris_validate',     -- output table
+                                     NULL,               -- use gpus
+                                     3                   -- mst_key to use
+                                   );
+SELECT * FROM iris_validate;
+</pre> <pre class="result">
+       loss        |      metric       | metrics_type
+-------------------+-------------------+--------------
+ 0.103803977370262 | 0.966666638851166 | {accuracy}
+</pre></li>
+<li>Predict. Now predict using one of the models we built. We will use the validation data set for prediction as well, which is not usual but serves to show the syntax. The prediction is in the estimated_class_text column: <pre class="example">
+DROP TABLE IF EXISTS iris_predict;
+SELECT madlib.madlib_keras_predict('iris_multi_model', -- model
+                                   'iris_test',        -- test_table
+                                   'id',               -- id column
+                                   'attributes',       -- independent var
+                                   'iris_predict',     -- output table
+                                    'response',        -- prediction type
+                                    FALSE,             -- use gpus
+                                    3                  -- mst_key to use
+                                   );
+SELECT * FROM iris_predict ORDER BY id;
+</pre> <pre class="result">
+ id  | estimated_class_text
+-----+----------------------
+   9 | Iris-setosa
+  18 | Iris-setosa
+  22 | Iris-setosa
+  26 | Iris-setosa
+  35 | Iris-setosa
+  38 | Iris-setosa
+  42 | Iris-setosa
+  43 | Iris-setosa
+  45 | Iris-setosa
+  46 | Iris-setosa
+  50 | Iris-setosa
+  53 | Iris-versicolor
+  60 | Iris-versicolor
+  68 | Iris-versicolor
+  77 | Iris-versicolor
+  78 | Iris-versicolor
+  79 | Iris-versicolor
+  81 | Iris-versicolor
+  82 | Iris-versicolor
+  85 | Iris-virginica
+  95 | Iris-versicolor
+  97 | Iris-versicolor
+  98 | Iris-versicolor
+ 113 | Iris-virginica
+ 117 | Iris-virginica
+ 118 | Iris-virginica
+ 127 | Iris-virginica
+ 136 | Iris-virginica
+ 143 | Iris-virginica
+ 145 | Iris-virginica
+(30 rows)
+</pre> Count missclassifications: <pre class="example">
+SELECT COUNT(*) FROM iris_predict JOIN iris_test USING (id)
+WHERE iris_predict.estimated_class_text != iris_test.class_text;
+</pre> <pre class="result">
+ count
+-------+
+     1
+</pre> Percent missclassifications: <pre class="example">
+SELECT round(count(*)*100/(150*0.2),2) as test_accuracy_percent from
+    (select iris_test.class_text as actual, iris_predict.estimated_class_text as estimated
+     from iris_predict inner join iris_test
+     on iris_test.id=iris_predict.id) q
+WHERE q.actual=q.estimated;
+</pre> <pre class="result">
+ test_accuracy_percent
+-----------------------+
+                 96.67
+</pre></li>
+</ol>
+<h4>Classification with Other Parameters</h4>
+<ol type="1">
+<li>Validation dataset. Now use a validation dataset and compute metrics every 3rd iteration using the 'metrics_compute_frequency' parameter. This can help reduce run time if you do not need metrics computed at every iteration. <pre class="example">
+DROP TABLE IF EXISTS iris_multi_model, iris_multi_model_summary, iris_multi_model_info;
+SELECT madlib.madlib_keras_fit_multiple_model('iris_train_packed',    -- source_table
+                                              'iris_multi_model',     -- model_output_table
+                                              'mst_table',            -- model_selection_table
+                                               10,                     -- num_iterations
+                                               FALSE,                 -- use gpus
+                                              'iris_test_packed',     -- validation dataset
+                                               3,                     -- metrics compute frequency
+                                               FALSE,                 -- warm start
+                                              'Sophie L.',            -- name
+                                              'Model selection for iris dataset'  -- description
+                                             );
+</pre> View the model summary: <pre class="example">
+SELECT * FROM iris_multi_model_summary;
+</pre> <pre class="result">
+source_table              | iris_train_packed
+validation_table          | iris_test_packed
+model                     | iris_multi_model
+model_info                | iris_multi_model_info
+dependent_varname         | class_text
+independent_varname       | attributes
+model_arch_table          | model_arch_library
+num_iterations            | 10
+metrics_compute_frequency | 3
+warm_start                | f
+name                      | Sophie L.
+description               | Model selection for iris dataset
+start_training_time       | 2019-12-16 19:28:16.219137
+end_training_time         | 2019-12-16 19:30:19.238692
+madlib_version            | 1.17.0
+num_classes               | 3
+class_values              | {Iris-setosa,Iris-versicolor,Iris-virginica}
+dependent_vartype         | character varying
+normalizing_const         | 1
+metrics_iters             | {3,6,9,10}
+</pre> View results for each model: <pre class="example">
+SELECT * FROM iris_multi_model_info ORDER BY training_metrics_final DESC, training_loss_final;
+</pre> <pre class="result">
+ mst_key | model_id |                                 compile_params                                  |      fit_params       |  model_type  |  model_size  |                         metrics_elapsed_time                          | metrics_type | training_metrics_final | training_loss_final |                             training_metrics                              |                               training_loss                               | validation_metrics_final | validation_loss_final |                            validation_metrics                             |                              validation_loss
+---------+----------+---------------------------------------------------------------------------------+-----------------------+--------------+--------------+-----------------------------------------------------------------------+--------------+------------------------+---------------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------+--------------------------+-----------------------+---------------------------------------------------------------------------+---------------------------------------------------------------------------
+       4 |        1 | loss='categorical_crossentropy', optimizer='Adam(lr=0.01)',metrics=['accuracy'] | batch_size=8,epochs=1 | madlib_keras | 0.7900390625 | {37.0420558452606,78.2046208381653,116.242669820786,134.287139892578} | {accuracy}   |         0.975000023842 |      0.165132269263 | {0.75,0.958333313465118,0.958333313465118,0.975000023841858}              | {0.618549585342407,0.319452553987503,0.223872095346451,0.165132269263268} |           0.966666638851 |        0.213689729571 | {0.733333349227905,0.933333337306976,0.933333337306976,0.966666638851166} | {0.683791160583496,0.370491921901703,0.255890935659409,0.213689729571342}
+       2 |        1 | loss='categorical_crossentropy',optimizer='Adam(lr=0.1)',metrics=['accuracy']   | batch_size=8,epochs=1 | madlib_keras | 0.7900390625 | {36.3931469917297,77.5780539512634,115.430645942688,133.599857807159} | {accuracy}   |         0.966666638851 |      0.277698725462 | {0.591666638851166,0.966666638851166,0.666666686534882,0.966666638851166} | {0.634598553180695,0.334936827421188,0.615665555000305,0.27769872546196}  |           0.966666638851 |         0.34405490756 | {0.5,0.966666638851166,0.566666662693024,0.966666638851166}               | {0.643225967884064,0.41021603345871,0.805291295051575,0.344054907560349}
+      10 |        2 | loss='categorical_crossentropy', optimizer='Adam(lr=0.01)',metrics=['accuracy'] | batch_size=8,epochs=1 | madlib_keras | 1.2197265625 | {36.8482949733734,78.0155048370361,115.83317399025,134.079672813416}  | {accuracy}   |         0.958333313465 |      0.122385449708 | {0.883333325386047,0.941666662693024,0.858333349227905,0.958333313465118} | {0.291894346475601,0.146935686469078,0.270052850246429,0.122385449707508} |           0.933333337307 |        0.181496843696 | {0.766666650772095,0.866666674613953,0.899999976158142,0.933333337306976} | {0.395013928413391,0.245234906673431,0.301119148731232,0.181496843695641}
+       3 |        1 | loss='categorical_crossentropy', optimizer='Adam(lr=0.01)',metrics=['accuracy'] | batch_size=4,epochs=1 | madlib_keras | 0.7900390625 | {37.2318170070648,78.3925468921661,116.45490694046,134.491376876831}  | {accuracy}   |         0.941666662693 |      0.193545326591 | {0.966666638851166,0.941666662693024,0.941666662693024,0.941666662693024} | {0.39665362238884,0.213271111249924,0.190151125192642,0.193545326590538}  |           0.933333337307 |        0.151459023356 | {1,0.966666638851166,0.933333337306976,0.933333337306976}                 | {0.464315593242645,0.198051139712334,0.138570576906204,0.151459023356438}
+       9 |        2 | loss='categorical_crossentropy', optimizer='Adam(lr=0.01)',metrics=['accuracy'] | batch_size=4,epochs=1 | madlib_keras | 1.2197265625 | {37.6678929328918,78.820240020752,116.939878940582,134.959810972214}  | {accuracy}   |         0.925000011921 |      0.192344605923 | {0.824999988079071,0.774999976158142,0.966666638851166,0.925000011920929} | {0.434513121843338,0.326292037963867,0.131333693861961,0.192344605922699} |           0.899999976158 |        0.209528595209 | {0.800000011920929,0.766666650772095,0.966666638851166,0.899999976158142} | {0.52033931016922,0.344535797834396,0.170280396938324,0.209528595209122}
+       8 |        2 | loss='categorical_crossentropy',optimizer='Adam(lr=0.1)',metrics=['accuracy']   | batch_size=8,epochs=1 | madlib_keras | 1.2197265625 | {38.0689258575439,79.4995639324188,117.36315202713,135.380483865738}  | {accuracy}   |         0.866666674614 |      0.390509605408 | {0.691666662693024,0.691666662693024,0.633333325386047,0.866666674613953} | {0.490214675664902,0.444783747196198,0.627961099147797,0.390509605407715} |           0.933333337307 |        0.376114845276 | {0.566666662693024,0.566666662693024,0.533333361148834,0.933333337306976} | {0.575542628765106,0.54660427570343,0.785183191299438,0.376114845275879}
+       5 |        1 | loss='categorical_crossentropy',optimizer='Adam(lr=0.001)',metrics=['accuracy'] | batch_size=4,epochs=1 | madlib_keras | 0.7900390625 | {38.474328994751,79.9709329605103,117.766183853149,135.803887844086}  | {accuracy}   |         0.841666638851 |      0.576696753502 | {0.616666674613953,0.699999988079071,0.758333325386047,0.841666638851166} | {0.90448260307312,0.750164151191711,0.616493880748749,0.576696753501892}  |           0.899999976158 |        0.631914675236 | {0.666666686534882,0.699999988079071,0.733333349227905,0.899999976158142} | {0.871200919151306,0.780709445476532,0.665971457958221,0.631914675235748}
+      11 |        2 | loss='categorical_crossentropy',optimizer='Adam(lr=0.001)',metrics=['accuracy'] | batch_size=4,epochs=1 | madlib_keras | 1.2197265625 | {36.6214678287506,77.7987759113312,115.631717920303,133.83836388588}  | {accuracy}   |         0.758333325386 |      0.881635427475 | {0.308333337306976,0.316666662693024,0.75,0.758333325386047}              | {1.12997460365295,1.02749967575073,0.923768699169159,0.881635427474976}   |           0.766666650772 |        0.878168046474 | {0.433333337306976,0.433333337306976,0.766666650772095,0.766666650772095} | {1.07487094402313,0.974115014076233,0.916269063949585,0.878168046474457}
+       7 |        2 | loss='categorical_crossentropy',optimizer='Adam(lr=0.1)',metrics=['accuracy']   | batch_size=4,epochs=1 | madlib_keras | 1.2197265625 | {38.2849600315094,79.7524738311768,117.580325841904,135.606695890427} | {accuracy}   |         0.691666662693 |      0.444524824619 | {0.908333361148834,0.391666680574417,0.691666662693024,0.691666662693024} | {0.335082054138184,2.02327847480774,0.444351017475128,0.444524824619293}  |           0.566666662693 |        0.539750337601 | {0.800000011920929,0.266666680574417,0.566666662693024,0.566666662693024} | {0.433189332485199,2.3276960849762,0.534160375595093,0.539750337600708}
+       6 |        1 | loss='categorical_crossentropy',optimizer='Adam(lr=0.001)',metrics=['accuracy'] | batch_size=8,epochs=1 | madlib_keras | 0.7900390625 | {38.6593668460846,80.1789360046387,117.957875013351,135.995815992355} | {accuracy}   |         0.683333337307 |      0.841839790344 | {0.316666662693024,0.366666674613953,0.666666686534882,0.683333337306976} | {1.07646071910858,0.963329672813416,0.87216705083847,0.841839790344238}   |           0.666666686535 |        0.840192914009 | {0.433333337306976,0.533333361148834,0.666666686534882,0.666666686534882} | {1.02845978736877,0.941896677017212,0.861787617206573,0.840192914009094}
+       1 |        1 | loss='categorical_crossentropy',optimizer='Adam(lr=0.1)',metrics=['accuracy']   | batch_size=4,epochs=1 | madlib_keras | 0.7900390625 | {37.8553328514099,79.2480089664459,117.139881849289,135.155915975571} | {accuracy}   |         0.358333319426 |       1.11013436317 | {0.358333319425583,0.333333343267441,0.333333343267441,0.358333319425583} | {1.10554325580597,1.11694586277008,1.09756696224213,1.11013436317444}     |           0.233333334327 |         1.17629003525 | {0.233333334326744,0.333333343267441,0.333333343267441,0.233333334326744} | {1.16081762313843,1.14324629306793,1.11625325679779,1.1762900352478}
+      12 |        2 | loss='categorical_crossentropy',optimizer='Adam(lr=0.001)',metrics=['accuracy'] | batch_size=8,epochs=1 | madlib_keras | 1.2197265625 | {37.4500079154968,78.6058378219604,116.700626850128,134.72905087471}  | {accuracy}   |         0.308333337307 |       1.06241953373 | {0.150000005960464,0.333333343267441,0.333333343267441,0.308333337306976} | {1.13338851928711,1.09694564342499,1.07030868530273,1.06241953372955}     |           0.433333337307 |         1.03659796715 | {0.16666667163372,0.333333343267441,0.433333337306976,0.433333337306976}  | {1.06262242794037,1.07252764701843,1.05843663215637,1.03659796714783}
+(12 rows)
+</pre></li>
+<li>Predict probabilities for each class: <pre class="example">
+DROP TABLE IF EXISTS iris_predict;
+SELECT madlib.madlib_keras_predict('iris_multi_model', -- model
+                                   'iris_test',        -- test_table
+                                   'id',               -- id column
+                                   'attributes',       -- independent var
+                                   'iris_predict',     -- output table
+                                    'prob',            -- prediction type
+                                    FALSE,             -- use gpus
+                                    3                  -- mst_key to use
+                                   );
+SELECT * FROM iris_predict ORDER BY id;
+</pre> <pre class="result">
+ id  | prob_Iris-setosa | prob_Iris-versicolor | prob_Iris-virginica
+-----+------------------+----------------------+---------------------
+   9 |       0.99931216 |        0.00068789057 |       6.2587335e-10
+  18 |       0.99984336 |        0.00015656587 |        7.969957e-12
+  22 |        0.9998497 |        0.00015029701 |       6.4133347e-12
+  26 |        0.9995004 |        0.00049964694 |       2.2795305e-10
+  35 |       0.99964666 |        0.00035332117 |       9.4490485e-11
+  38 |       0.99964666 |        0.00035332117 |       9.4490485e-11
+  42 |        0.9985154 |         0.0014845316 |        5.293262e-09
+  43 |       0.99964476 |         0.0003552362 |        9.701174e-11
+  45 |        0.9997311 |        0.00026883607 |        3.076166e-11
+  46 |        0.9995486 |        0.00045140853 |       1.6814435e-10
+  50 |        0.9997856 |        0.00021441824 |       2.1316622e-11
+  53 |     9.837335e-06 |           0.97109175 |         0.028898403
+  60 |    0.00014028326 |           0.96552837 |         0.034331344
+  68 |    0.00087942625 |            0.9883348 |         0.010785843
+  77 |      6.08114e-06 |           0.94356424 |         0.056429718
+  78 |     7.116364e-07 |            0.8596206 |          0.14037873
+  79 |    1.3918722e-05 |           0.94052655 |          0.05945957
+  81 |    0.00045687397 |            0.9794796 |         0.020063542
+  82 |     0.0015463434 |           0.98768973 |         0.010763981
+  85 |    1.0929693e-05 |           0.87866926 |         0.121319845
+  95 |    6.3600986e-05 |           0.95264935 |         0.047287125
+  97 |    0.00020298029 |             0.981617 |         0.018180028
+  98 |    0.00019721613 |           0.98902065 |          0.01078211
+ 113 |    1.0388683e-09 |           0.23626474 |           0.7637353
+ 117 |     4.598902e-09 |           0.25669694 |           0.7433031
+ 118 |    3.7139156e-11 |           0.13193987 |           0.8680601
+ 127 |    2.1297862e-07 |             0.670349 |          0.32965073
+ 136 |    7.1760774e-12 |           0.07074605 |            0.929254
+ 143 |    1.2568385e-09 |          0.113820426 |           0.8861796
+ 145 |      6.17019e-11 |          0.117578305 |          0.88242173
+(30 rows)
+</pre></li>
+<li>Warm start. Next, use the warm_start parameter to continue learning, using the coefficients from the run above. Note that we don't drop the model table or model summary table: <pre class="example">
+SELECT madlib.madlib_keras_fit_multiple_model('iris_train_packed',    -- source_table
+                                              'iris_multi_model',     -- model_output_table
+                                              'mst_table',            -- model_selection_table
+                                               3,                     -- num_iterations
+                                               FALSE,                 -- use gpus
+                                              'iris_test_packed',     -- validation dataset
+                                               1,                     -- metrics compute frequency
+                                               TRUE,                  -- warm start
+                                              'Sophie L.',            -- name
+                                              'Simple MLP for iris dataset'  -- description
+                                             );
+SELECT * FROM iris_multi_model_summary;
+</pre> <pre class="result">
+source_table              | iris_train_packed
+validation_table          | iris_test_packed
+model                     | iris_multi_model
+model_info                | iris_multi_model_info
+dependent_varname         | class_text
+independent_varname       | attributes
+model_arch_table          | model_arch_library
+num_iterations            | 3
+metrics_compute_frequency | 1
+warm_start                | t
+name                      | Sophie L.
+description               | Simple MLP for iris dataset
+start_training_time       | 2019-12-16 20:07:41.488587
+end_training_time         | 2019-12-16 20:08:27.20651
+madlib_version            | 1.17.0
+num_classes               | 3
+class_values              | {Iris-setosa,Iris-versicolor,Iris-virginica}
+dependent_vartype         | character varying
+normalizing_const         | 1
+metrics_iters             | {1,2,3}
+</pre> View results for each model: <pre class="example">
+SELECT * FROM iris_multi_model_info ORDER BY training_metrics_final DESC, training_loss_final;
+</pre> <pre class="result">
+ mst_key | model_id |                                 compile_params                                  |      fit_params       |  model_type  |  model_size  |                 metrics_elapsed_time                 | metrics_type | training_metrics_final | training_loss_final |                    training_metrics                     |                      training_loss                       | validation_metrics_final | validation_loss_final |                   validation_metrics                    |                     validation_loss
+---------+----------+---------------------------------------------------------------------------------+-----------------------+--------------+--------------+------------------------------------------------------+--------------+------------------------+---------------------+---------------------------------------------------------+----------------------------------------------------------+--------------------------+-----------------------+---------------------------------------------------------+---------------------------------------------------------
+       5 |        1 | loss='categorical_crossentropy',optimizer='Adam(lr=0.001)',metrics=['accuracy'] | batch_size=4,epochs=1 | madlib_keras | 0.7900390625 | {19.451014995575,37.2563629150391,54.7182998657227}  | {accuracy}   |         0.975000023842 |      0.490673750639 | {0.958333313465118,0.691666662693024,0.975000023841858} | {0.541427075862885,0.517450392246246,0.490673750638962}  |           0.933333337307 |        0.557333409786 | {0.933333337306976,0.666666686534882,0.933333337306976} | {0.60710871219635,0.570206344127655,0.557333409786224}
+       9 |        2 | loss='categorical_crossentropy', optimizer='Adam(lr=0.01)',metrics=['accuracy'] | batch_size=4,epochs=1 | madlib_keras | 0.7900390625 | {18.2973220348358,36.3793680667877,54.0178129673004} | {accuracy}   |         0.966666638851 |     0.0894369781017 | {0.966666638851166,0.966666638851166,0.966666638851166} | {0.133233144879341,0.111788973212242,0.0894369781017303} |           0.899999976158 |        0.195293620229 | {0.933333337306976,0.966666638851166,0.899999976158142} | {0.156044512987137,0.132803827524185,0.195293620228767}
+       4 |        1 | loss='categorical_crossentropy', optimizer='Adam(lr=0.01)',metrics=['accuracy'] | batch_size=8,epochs=1 | madlib_keras | 1.2197265625 | {17.6080539226532,35.6788699626923,53.3836889266968} | {accuracy}   |         0.966666638851 |      0.147051945329 | {0.908333361148834,0.958333313465118,0.966666638851166} | {0.225205257534981,0.168186634778976,0.147051945328712}  |           0.866666674614 |        0.250319689512 | {0.899999976158142,0.933333337306976,0.866666674613953} | {0.23467344045639,0.182851999998093,0.250319689512253}
+       8 |        2 | loss='categorical_crossentropy',optimizer='Adam(lr=0.1)',metrics=['accuracy']   | batch_size=8,epochs=1 | madlib_keras | 1.2197265625 | {18.7529940605164,36.8255958557129,54.3704080581665} | {accuracy}   |         0.966666638851 |      0.244641214609 | {0.691666662693024,0.891666650772095,0.966666638851166} | {0.939713299274445,0.462556451559067,0.244641214609146}  |           0.966666638851 |        0.298279434443 | {0.566666662693024,0.966666638851166,0.966666638851166} | {1.30671143531799,0.412235885858536,0.29827943444252}
+      10 |        2 | loss='categorical_crossentropy', optimizer='Adam(lr=0.01)',metrics=['accuracy'] | batch_size=8,epochs=1 | madlib_keras | 0.7900390625 | {17.4004180431366,35.4556438922882,53.1877279281616} | {accuracy}   |         0.958333313465 |      0.123381219804 | {0.949999988079071,0.766666650772095,0.958333313465118} | {0.0919980704784393,0.576169073581696,0.123381219804287} |           0.933333337307 |        0.203262642026 | {0.866666674613953,0.766666650772095,0.933333337306976} | {0.199721112847328,0.959742486476898,0.203262642025948}
+       3 |        1 | loss='categorical_crossentropy', optimizer='Adam(lr=0.01)',metrics=['accuracy'] | batch_size=4,epochs=1 | madlib_keras | 1.2197265625 | {17.81547498703,35.8978669643402,53.5737180709839}   | {accuracy}   |         0.933333337307 |      0.150664463639 | {0.941666662693024,0.925000011920929,0.933333337306976} | {0.117781177163124,0.163000836968422,0.150664463639259}  |           0.833333313465 |        0.365329563618 | {0.866666674613953,0.833333313465118,0.833333313465118} | {0.249404579401016,0.375173389911652,0.365329563617706}
+       6 |        1 | loss='categorical_crossentropy',optimizer='Adam(lr=0.001)',metrics=['accuracy'] | batch_size=8,epochs=1 | madlib_keras | 1.2197265625 | {19.686233997345,37.4543249607086,54.8708770275116}  | {accuracy}   |         0.858333349228 |      0.743227303028 | {0.675000011920929,0.708333313465118,0.858333349227905} | {0.808507084846497,0.774080872535706,0.743227303028107}  |           0.966666638851 |        0.770158529282 | {0.666666686534882,0.666666686534882,0.966666638851166} | {0.808504283428192,0.791898012161255,0.770158529281616}
+      11 |        2 | loss='categorical_crossentropy',optimizer='Adam(lr=0.001)',metrics=['accuracy'] | batch_size=4,epochs=1 | madlib_keras | 1.2197265625 | {17.1583528518677,35.0312390327454,52.96133685112}   | {accuracy}   |         0.816666662693 |      0.739802956581 | {0.774999976158142,0.816666662693024,0.816666662693024} | {0.83727890253067,0.792884111404419,0.739802956581116}   |           0.800000011921 |        0.758302807808 | {0.766666650772095,0.800000011920929,0.800000011920929} | {0.837629973888397,0.801746726036072,0.758302807807922}
+       2 |        1 | loss='categorical_crossentropy',optimizer='Adam(lr=0.1)',metrics=['accuracy']   | batch_size=8,epochs=1 | madlib_keras | 1.2197265625 | {16.9146749973297,34.794900894165,52.7328250408173}  | {accuracy}   |         0.808333337307 |      0.303489625454 | {0.683333337306976,0.966666638851166,0.808333337306976} | {1.05107569694519,0.189959138631821,0.303489625453949}   |           0.866666674614 |        0.285375326872 | {0.666666686534882,0.966666638851166,0.866666674613953} | {1.01942157745361,0.238933652639389,0.285375326871872}
+      12 |        2 | loss='categorical_crossentropy',optimizer='Adam(lr=0.001)',metrics=['accuracy'] | batch_size=8,epochs=1 | madlib_keras | 0.7900390625 | {18.0590150356293,36.1394078731537,53.7930529117584} | {accuracy}   |         0.699999988079 |       1.02253305912 | {0.550000011920929,0.691666662693024,0.699999988079071} | {1.0493084192276,1.03803598880768,1.02253305912018}      |           0.666666686535 |         1.02013540268 | {0.633333325386047,0.600000023841858,0.666666686534882} | {1.03952574729919,1.03439521789551,1.02013540267944}
+       7 |        2 | loss='categorical_crossentropy',optimizer='Adam(lr=0.1)',metrics=['accuracy']   | batch_size=4,epochs=1 | madlib_keras | 1.2197265625 | {19.2141709327698,37.0566499233246,54.5629329681396} | {accuracy}   |         0.691666662693 |      0.448221176863 | {0.691666662693024,0.691666662693024,0.691666662693024} | {0.447027385234833,0.444605946540833,0.448221176862717}  |           0.566666662693 |        0.555035352707 | {0.566666662693024,0.566666662693024,0.566666662693024} | {0.551217257976532,0.540408432483673,0.555035352706909}
+       1 |        1 | loss='categorical_crossentropy',optimizer='Adam(lr=0.1)',metrics=['accuracy']   | batch_size=4,epochs=1 | madlib_keras | 1.2197265625 | {18.501914024353,36.5938439369202,54.194118976593}   | {accuracy}   |         0.358333319426 |       1.09730923176 | {0.333333343267441,0.333333343267441,0.358333319425583} | {1.09999334812164,1.10405397415161,1.09730923175812}     |           0.233333334327 |         1.12532019615 | {0.333333343267441,0.333333343267441,0.233333334326744} | {1.12446486949921,1.13782525062561,1.12532019615173}
+(12 rows)
+</pre> Note that the loss and accuracy values pick up from where the previous run left off.</li>
+</ol>
+<p><a class="anchor" id="notes"></a></p><dl class="section user"><dt>Notes</dt><dd></dd></dl>
+<ol type="1">
+<li>Refer to the deep learning section of the Apache MADlib wiki [6] for important information including supported libraries and versions.</li>
+<li>Classification is currently supported, not regression.</li>
+<li>Reminder about the distinction between warm start and transfer learning. Warm start uses model state (weights) from the model output table from a previous training run - set the 'warm_start' parameter to TRUE in the fit function. Transfer learning uses initial model state (weights) stored in the 'model_arch_table' - in this case set the 'warm_start' parameter to FALSE in the fit function.</li>
+<li>Here are some more details on how warm start works. These details are mostly applicable when implementing autoML algorithms on top of MADlib's model selection. In short, the 'model_selection_table' dictates which models get trained and output to the 'model_output_table' and associated summary and info tables. When 'warm_start' is TRUE, models are built for each 'mst_key' in the 'model_selection_table'. If there are prior runs for an 'mst_key' then the weights from that run will be used. If there are no prior runs for an 'mst_key' then random initialization will be used. For example, let's say we start with 'mst_keys' of 1, 2, 3, and 4 in the 'model_selection_table'. We run fit once to get model and info tables for 1, 2, 3, and 4. Then we modify the 'model_selection_table' as part of an autoML scheme, in which we remove the 'mst_key' for 1 and add a new 'mst_key' for 5. Next we run fit with warm start. The result will be models created for 'mst_keys' of 2, 3, 4, and 5. Warm start will be used for 2, 3, and 4 (using prior run) and random initialization will be used for 5 (no prior run). The 'mst_key' of 1 will be dropped.</li>
+<li>The 'num_iterations' parameter and the Keras fit parameter 'epochs' can substantially affect accuracy and run-time. In general, increasing the number of 'epochs' for a fixed 'num_iterations' will speed up training, but may result in lower accuracy. It's best to do some experimentation to find out what works for your models and dataset.</li>
+</ol>
+<p><a class="anchor" id="background"></a></p><dl class="section user"><dt>Technical Background</dt><dd></dd></dl>
+<p>For an introduction to deep learning foundations, including MLP and CNN, refer to [7].</p>
+<p>This module trains many models a time across the database cluster in order to explore network architectures and hyperparameters. It uses model hopper parallelism (MOP) and has high convergence efficiency since it does not do model averaging [2].</p>
+<p>On the effect of database cluster size: as the database cluster size increases, it will be faster to train a set of models, as long as you have at least as many model selection tuples as segments. This is because model state is "hopped" from segment to segment and training takes place in parallel [1,2]. If you have fewer model selection tuples to train than segments, then some segments may not be busy 100% of the time so speedup will not necessarily increase on a larger cluster. Inference (predict) is an embarrassingly parallel operation so inference runtimes will be proportionally faster as the number of segments increases.</p>
+<p><a class="anchor" id="literature"></a></p><dl class="section user"><dt>Literature</dt><dd></dd></dl>
+<p><a class="anchor" id="mlp-lit-1"></a>[1] "Cerebro: Efficient and Reproducible Model Selection on Deep Learning Systems," Supun Nakandala, Yuhao Zhang, and Arun Kumar, ACM SIGMOD 2019 DEEM Workshop, <a href="https://adalabucsd.github.io/papers/2019_Cerebro_DEEM.pdf">https://adalabucsd.github.io/papers/2019_Cerebro_DEEM.pdf</a></p>
+<p>[2] "Resource-Efficient and Reproducible Model Selection on Deep Learning Systems," Supun Nakandala, Yuhao Zhang, and Arun Kumar, Technical Report, Computer Science and Engineering, University of California, San Diego <a href="https://adalabucsd.github.io/papers/TR_2019_Cerebro.pdf">https://adalabucsd.github.io/papers/TR_2019_Cerebro.pdf</a></p>
+<p>[3] <a href="https://keras.io/">https://keras.io/</a></p>
+<p>[4] <a href="https://www.tensorflow.org/">https://www.tensorflow.org/</a></p>
+<p>[5] "Neural Networks for Machine Learning", Lectures 6a and 6b on mini-batch gradient descent, Geoffrey Hinton with Nitish Srivastava and Kevin Swersky, <a href="http://www.cs.toronto.edu/~tijmen/csc321/slides/lecture_slides_lec6.pdf">http://www.cs.toronto.edu/~tijmen/csc321/slides/lecture_slides_lec6.pdf</a></p>
+<p>[6] Deep learning section of Apache MADlib wiki <a href="https://cwiki.apache.org/confluence/display/MADLIB/Deep+Learning">https://cwiki.apache.org/confluence/display/MADLIB/Deep+Learning</a></p>
+<p>[7] Deep Learning, Ian Goodfellow, Yoshua Bengio and Aaron Courville, MIT Press, 2016.</p>
+<p>[8] Greenplum Database server configuration parameters <a href="https://gpdb.docs.pivotal.io/latest/ref_guide/config_params/guc-list.html">https://gpdb.docs.pivotal.io/latest/ref_guide/config_params/guc-list.html</a></p>
+<p><a class="anchor" id="related"></a></p><dl class="section user"><dt>Related Topics</dt><dd></dd></dl>
+<p>File <a class="el" href="madlib__keras__fit__multiple__model_8sql__in.html">madlib_keras_fit_multiple_model.sql_in</a> documents training, evaluate and predict functions. </p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:59 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__keras__setup__model__selection.html b/docs/rc/group__grp__keras__setup__model__selection.html
new file mode 100644
index 0000000..67d8943
--- /dev/null
+++ b/docs/rc/group__grp__keras__setup__model__selection.html
@@ -0,0 +1,409 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Setup Model Selection</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__keras__setup__model__selection.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Setup Model Selection<div class="ingroups"><a class="el" href="group__grp__early__stage.html">Early Stage Development</a> &raquo; <a class="el" href="group__grp__dl.html">Deep Learning</a> &raquo; <a class="el" href="group__grp__model__selection.html">Model Selection for DL</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<dl class="section warning"><dt>Warning</dt><dd><em> This MADlib method is still in early stage development. Interface and implementation are subject to change. </em></dd></dl>
+<div class="toc"><b>Contents</b><ul>
+<li class="level1">
+<a href="#load_mst_table">Load Model Selection Table</a> </li>
+<li class="level1">
+<a href="#example">Examples</a> </li>
+<li class="level1">
+<a href="#notes">Notes</a> </li>
+<li class="level1">
+<a href="#related">Related Topics</a> </li>
+</ul>
+</div><p>This utility function sets up a model selection table for use by the multiple model Keras fit feature of MADlib. By model selection we mean both hyperparameter tuning and model architecture search. The table defines the unique combinations of model architectures, compile and fit parameters to run on a massively parallel processing database cluster.</p>
+<p><a class="anchor" id="load_mst_table"></a></p><dl class="section user"><dt>Load Model Selection Table</dt><dd></dd></dl>
+<pre class="syntax">
+load_model_selection_table(
+    model_arch_table,
+    model_selection_table,
+    model_id_list,
+    compile_params_list,
+    fit_params_list
+    )
+</pre><p><b>Arguments</b> </p><dl class="arglist">
+<dt>model_arch_table </dt>
+<dd><p class="startdd">VARCHAR. Table containing model architectures and weights. For more information on this table refer to <a href="group__grp__keras__model__arch.html">Load Model</a>. </p>
+<p class="enddd"></p>
+</dd>
+<dt>model_selection_table </dt>
+<dd><p class="startdd">VARCHAR. Model selection table created by this utility. A summary table named &lt;model_selection_table&gt;_summary is also created. Contents of both output tables are described below. </p>
+<p class="enddd"></p>
+</dd>
+<dt>model_id_list </dt>
+<dd><p class="startdd">INTEGER[]. Array of model IDs from the 'model_arch_table' to be included in the run combinations. For hyperparameter search, this will typically be one model ID. For model architecture search, this will be the different model IDs that you want to test. </p>
+<p class="enddd"></p>
+</dd>
+<dt>compile_params_list </dt>
+<dd><p class="startdd">VARCHAR[]. Array of compile parameters to be tested. Each element of the array should consist of a string of compile parameters exactly as it is to be passed to Keras. </p>
+<p class="enddd"></p>
+</dd>
+<dt>fit_params_list </dt>
+<dd><p class="startdd">VARCHAR[]. Array of fit parameters to be tested. Each element of the array should consist of a string of fit parameters exactly as it is to be passed to Keras. </p>
+<p class="enddd"></p>
+</dd>
+</dl>
+<p><b>Output table</b> <br />
+ The model selection output table contains the following columns: </p><table class="output">
+<tr>
+<th>mst_key </th><td>INTEGER. ID that defines a unique tuple for model architecture-compile parameters-fit parameters.   </td></tr>
+<tr>
+<th>model_id </th><td>VARCHAR. Model architecture ID from the 'model_arch_table'.   </td></tr>
+<tr>
+<th>compile_params </th><td>VARCHAR. Keras compile parameters.   </td></tr>
+<tr>
+<th>fit_params </th><td>VARCHAR. Keras fit parameters.   </td></tr>
+</table>
+<p>A summary table named &lt;model_selection_table&gt;_summary is also created, which contains the following column: </p><table class="output">
+<tr>
+<th>model_arch_table </th><td>VARCHAR. Name of the model architecture table containing the model architecture IDs.   </td></tr>
+</table>
+<p><a class="anchor" id="example"></a></p><dl class="section user"><dt>Examples</dt><dd><ol type="1">
+<li>The model selection table works in conjunction with a model architecture table, so we first create a model architecture table with two different models. Use Keras to define a model architecture with 1 hidden layer: <pre class="example">
+import keras
+from keras.models import Sequential
+from keras.layers import Dense
+model1 = Sequential()
+model1.add(Dense(10, activation='relu', input_shape=(4,)))
+model1.add(Dense(10, activation='relu'))
+model1.add(Dense(3, activation='softmax'))
+model1.summary()
+<pre class="fragment">_________________________________________________________________
+Layer (type)                 Output Shape              Param #
+=================================================================
+dense_1 (Dense)              (None, 10)                50
+_________________________________________________________________
+dense_2 (Dense)              (None, 10)                110
+_________________________________________________________________
+dense_3 (Dense)              (None, 3)                 33
+=================================================================
+Total params: 193
+Trainable params: 193
+Non-trainable params: 0
+</pre>
+</pre> Export the model to JSON: <pre class="example">
+model1.to_json()
+</pre> <pre class="result">
+'{"class_name": "Sequential", "keras_version": "2.1.6", "config": [{"class_name": "Dense", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "dense_1", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "dtype": "float32", "activation": "relu", "trainable": true, "kernel_regularizer": null, "bias_initializer": {"class_name": "Zeros", "config": {}}, "units": 10, "batch_input_shape": [null, 4], "use_bias": true, "activity_regularizer": null}}, {"class_name": "Dense", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "dense_2", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "activation": "relu", "trainable": true, "kernel_regularizer": null, "bias_initializer": {"class_name": "Zeros", "config": {}}, "units": 10, "use_bias": true, "activity_regularizer": null}}, {"class_name": "Dense", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "dense_3", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "activation": "softmax", "trainable": true, "kernel_regularizer": null, "bias_initializer": {"class_name": "Zeros", "config": {}}, "units": 3, "use_bias": true, "activity_regularizer": null}}], "backend": "tensorflow"}'
+</pre> Now use Keras to define a model architecture with 2 hidden layers: <pre class="example">
+model2 = Sequential()
+model2.add(Dense(10, activation='relu', input_shape=(4,)))
+model2.add(Dense(10, activation='relu'))
+model2.add(Dense(10, activation='relu'))
+model2.add(Dense(3, activation='softmax'))
+model2.summary()
+<pre class="fragment">_________________________________________________________________
+Layer (type)                 Output Shape              Param #
+=================================================================
+dense_4 (Dense)              (None, 10)                50
+_________________________________________________________________
+dense_5 (Dense)              (None, 10)                110
+_________________________________________________________________
+dense_6 (Dense)              (None, 10)                110
+_________________________________________________________________
+dense_7 (Dense)              (None, 3)                 33
+=================================================================
+Total params: 303
+Trainable params: 303
+Non-trainable params: 0
+</pre>
+</pre> Export the model to JSON: <pre class="example">
+model2.to_json()
+</pre> <pre class="result">
+'{"class_name": "Sequential", "keras_version": "2.1.6", "config": [{"class_name": "Dense", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "dense_4", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "dtype": "float32", "activation": "relu", "trainable": true, "kernel_regularizer": null, "bias_initializer": {"class_name": "Zeros", "config": {}}, "units": 10, "batch_input_shape": [null, 4], "use_bias": true, "activity_regularizer": null}}, {"class_name": "Dense", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "dense_5", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "activation": "relu", "trainable": true, "kernel_regularizer": null, "bias_initializer": {"class_name": "Zeros", "config": {}}, "units": 10, "use_bias": true, "activity_regularizer": null}}, {"class_name": "Dense", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "dense_6", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "activation": "relu", "trainable": true, "kernel_regularizer": null, "bias_initializer": {"class_name": "Zeros", "config": {}}, "units": 10, "use_bias": true, "activity_regularizer": null}}, {"class_name": "Dense", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "dense_7", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "activation": "softmax", "trainable": true, "kernel_regularizer": null, "bias_initializer": {"class_name": "Zeros", "config": {}}, "units": 3, "use_bias": true, "activity_regularizer": null}}], "backend": "tensorflow"}'
+</pre></li>
+<li>Load both models into the architecture table: <pre class="example">
+DROP TABLE IF EXISTS model_arch_library;
+SELECT madlib.load_keras_model('model_arch_library',  -- Output table,
+$$
+{"class_name": "Sequential", "keras_version": "2.1.6", "config": [{"class_name": "Dense", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "dense_1", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "dtype": "float32", "activation": "relu", "trainable": true, "kernel_regularizer": null, "bias_initializer": {"class_name": "Zeros", "config": {}}, "units": 10, "batch_input_shape": [null, 4], "use_bias": true, "activity_regularizer": null}}, {"class_name": "Dense", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "dense_2", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "activation": "relu", "trainable": true, "kernel_regularizer": null, "bias_initializer": {"class_name": "Zeros", "config": {}}, "units": 10, "use_bias": true, "activity_regularizer": null}}, {"class_name": "Dense", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "dense_3", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "activation": "softmax", "trainable": true, "kernel_regularizer": null, "bias_initializer": {"class_name": "Zeros", "config": {}}, "units": 3, "use_bias": true, "activity_regularizer": null}}], "backend": "tensorflow"}
+$$
+::json,         -- JSON blob
+                               NULL,                  -- Weights
+                               'Sophie',              -- Name
+                               'MLP with 1 hidden layer'       -- Descr
+);
+SELECT madlib.load_keras_model('model_arch_library',  -- Output table,
+$$
+{"class_name": "Sequential", "keras_version": "2.1.6", "config": [{"class_name": "Dense", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "dense_4", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "dtype": "float32", "activation": "relu", "trainable": true, "kernel_regularizer": null, "bias_initializer": {"class_name": "Zeros", "config": {}}, "units": 10, "batch_input_shape": [null, 4], "use_bias": true, "activity_regularizer": null}}, {"class_name": "Dense", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "dense_5", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "activation": "relu", "trainable": true, "kernel_regularizer": null, "bias_initializer": {"class_name": "Zeros", "config": {}}, "units": 10, "use_bias": true, "activity_regularizer": null}}, {"class_name": "Dense", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "dense_6", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "activation": "relu", "trainable": true, "kernel_regularizer": null, "bias_initializer": {"class_name": "Zeros", "config": {}}, "units": 10, "use_bias": true, "activity_regularizer": null}}, {"class_name": "Dense", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "dense_7", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "activation": "softmax", "trainable": true, "kernel_regularizer": null, "bias_initializer": {"class_name": "Zeros", "config": {}}, "units": 3, "use_bias": true, "activity_regularizer": null}}], "backend": "tensorflow"}
+$$
+::json,         -- JSON blob
+                               NULL,                  -- Weights
+                               'Maria',               -- Name
+                               'MLP with 2 hidden layers'       -- Descr
+);
+SELECT model_id, name, description FROM model_arch_library ORDER BY model_id;
+</pre> <pre class="result">
+ model_id |  name  |       description
+----------+--------+--------------------------
+        1 | Sophie | MLP with 1 hidden layer
+        2 | Maria  | MLP with 2 hidden layers
+(2 rows)
+</pre></li>
+<li>Load model selection table. Select the model(s) from the model architecture table that you want to run, along with the compile and fit parameters. Unique combinations will be created: <pre class="example">
+DROP TABLE IF EXISTS mst_table, mst_table_summary;
+SELECT madlib.load_model_selection_table('model_arch_library', -- model architecture table
+                                         'mst_table',          -- model selection table output
+                                          ARRAY[1,2],              -- model ids from model architecture table
+                                          ARRAY[                   -- compile params
+                                              $$loss='categorical_crossentropy',optimizer='Adam(lr=0.1)',metrics=['accuracy']$$,
+                                              $$loss='categorical_crossentropy', optimizer='Adam(lr=0.01)',metrics=['accuracy']$$,
+                                              $$loss='categorical_crossentropy',optimizer='Adam(lr=0.001)',metrics=['accuracy']$$
+                                          ],
+                                          ARRAY[                    -- fit params
+                                              $$batch_size=4,epochs=1$$,
+                                              $$batch_size=8,epochs=1$$
+                                          ]
+                                         );
+SELECT * FROM mst_table ORDER BY mst_key;
+</pre> <pre class="result">
+ mst_key | model_id      |                                 compile_params                                  |      fit_params
+---------+---------------+---------------------------------------------------------------------------------+-----------------------
+       1 |             1 | loss='categorical_crossentropy',optimizer='Adam(lr=0.1)',metrics=['accuracy']   | batch_size=4,epochs=1
+       2 |             1 | loss='categorical_crossentropy',optimizer='Adam(lr=0.1)',metrics=['accuracy']   | batch_size=8,epochs=1
+       3 |             1 | loss='categorical_crossentropy', optimizer='Adam(lr=0.01)',metrics=['accuracy'] | batch_size=4,epochs=1
+       4 |             1 | loss='categorical_crossentropy', optimizer='Adam(lr=0.01)',metrics=['accuracy'] | batch_size=8,epochs=1
+       5 |             1 | loss='categorical_crossentropy',optimizer='Adam(lr=0.001)',metrics=['accuracy'] | batch_size=4,epochs=1
+       6 |             1 | loss='categorical_crossentropy',optimizer='Adam(lr=0.001)',metrics=['accuracy'] | batch_size=8,epochs=1
+       7 |             2 | loss='categorical_crossentropy',optimizer='Adam(lr=0.1)',metrics=['accuracy']   | batch_size=4,epochs=1
+       8 |             2 | loss='categorical_crossentropy',optimizer='Adam(lr=0.1)',metrics=['accuracy']   | batch_size=8,epochs=1
+       9 |             2 | loss='categorical_crossentropy', optimizer='Adam(lr=0.01)',metrics=['accuracy'] | batch_size=4,epochs=1
+      10 |             2 | loss='categorical_crossentropy', optimizer='Adam(lr=0.01)',metrics=['accuracy'] | batch_size=8,epochs=1
+      11 |             2 | loss='categorical_crossentropy',optimizer='Adam(lr=0.001)',metrics=['accuracy'] | batch_size=4,epochs=1
+      12 |             2 | loss='categorical_crossentropy',optimizer='Adam(lr=0.001)',metrics=['accuracy'] | batch_size=8,epochs=1
+(12 rows)
+</pre> The name of the model architecture table is stored in the summary table: <pre class="example">
+SELECT * FROM mst_table_summary;
+</pre> <pre class="result">
+  model_arch_table
+--------------------+
+ model_arch_library
+(1 row)
+</pre></li>
+<li>Create model selection table manually. If you would like to have more control over the set of model selection parameters to run, you can manually create the model selection table and the associated summary table. Both must be created since they are needed by the multiple model fit module. For example, let's say we don't want all combinations but only want batch_size=4 for model_id=1 and batch_size=8 for model_id=2: <pre class="example">
+DROP TABLE IF EXISTS mst_table_manual;
+CREATE TABLE mst_table_manual(
+    mst_key serial,
+    model_id integer,
+    compile_params varchar,
+    fit_params varchar
+);
+INSERT INTO mst_table_manual(model_id, compile_params, fit_params) VALUES
+(1, $$loss='categorical_crossentropy',optimizer='Adam(lr=0.1)',metrics=['accuracy']$$, 'batch_size=4,epochs=1'),
+(1, $$loss='categorical_crossentropy',optimizer='Adam(lr=0.01)',metrics=['accuracy']$$, 'batch_size=4,epochs=1'),
+(1, $$loss='categorical_crossentropy',optimizer='Adam(lr=0.001)',metrics=['accuracy']$$, 'batch_size=4,epochs=1'),
+(2, $$loss='categorical_crossentropy',optimizer='Adam(lr=0.1)',metrics=['accuracy']$$, 'batch_size=8,epochs=1'),
+(2, $$loss='categorical_crossentropy',optimizer='Adam(lr=0.01)',metrics=['accuracy']$$, 'batch_size=8,epochs=1'),
+(2, $$loss='categorical_crossentropy',optimizer='Adam(lr=0.001)',metrics=['accuracy']$$, 'batch_size=8,epochs=1');
+SELECT * FROM mst_table_manual ORDER BY mst_key;
+</pre> <pre class="result">
+ mst_key | model_id      |                                 compile_params                                  |      fit_params
+---------+---------------+---------------------------------------------------------------------------------+-----------------------
+       1 |             1 | loss='categorical_crossentropy',optimizer='Adam(lr=0.1)',metrics=['accuracy']   | batch_size=4,epochs=1
+       2 |             1 | loss='categorical_crossentropy',optimizer='Adam(lr=0.01)',metrics=['accuracy']  | batch_size=4,epochs=1
+       3 |             1 | loss='categorical_crossentropy',optimizer='Adam(lr=0.001)',metrics=['accuracy'] | batch_size=4,epochs=1
+       4 |             2 | loss='categorical_crossentropy',optimizer='Adam(lr=0.1)',metrics=['accuracy']   | batch_size=8,epochs=1
+       5 |             2 | loss='categorical_crossentropy',optimizer='Adam(lr=0.01)',metrics=['accuracy']  | batch_size=8,epochs=1
+       6 |             2 | loss='categorical_crossentropy',optimizer='Adam(lr=0.001)',metrics=['accuracy'] | batch_size=8,epochs=1
+(6 rows)
+</pre> Create the summary table which must be named with the model selection output table appended by "_summary": <pre class="example">
+DROP TABLE IF EXISTS mst_table_manual_summary;
+CREATE TABLE mst_table_manual_summary (
+    model_arch_table varchar
+);
+INSERT INTO mst_table_manual_summary(model_arch_table) VALUES
+('model_arch_library');
+SELECT * FROM mst_table_manual_summary;
+</pre> <pre class="result">
+  model_arch_table
+--------------------+
+ model_arch_library
+(1 row)
+</pre></li>
+<li>Generate hyperparameters automatically. You can use other libraries or methods to generate hyperparameters according to the tests that you want to run. For example, let's randomly generate batch size from powers of 2 and learning rate on a log scale. We use psycopg which is a PostgreSQL database adapter for the Python programming language. <pre class="example">
+import numpy as np
+import psycopg2 as p2
+conn = p2.connect('postgresql://gpadmin@35.239.240.26:5432/madlib')
+#conn = p2.connect('postgresql://fmcquillan:5432/madlib')
+cur = conn.cursor()
+#
+sql DROP TABLE IF EXISTS mst_table_auto, mst_table_auto_summary;
+#
+#compile params
+learning_rate = np.random.permutation([0.1,0.01,0.001,0.0001])[:3]
+compile_param1 = "loss='categorical_crossentropy',optimizer='Adam(lr=" + str(learning_rate[0]) + ")',metrics=['accuracy']"
+compile_param2 = "loss='categorical_crossentropy',optimizer='Adam(lr=" + str(learning_rate[1]) + ")',metrics=['accuracy']"
+compile_param3 = "loss='categorical_crossentropy',optimizer='Adam(lr=" + str(learning_rate[2]) + ")',metrics=['accuracy']"
+compile_params = [compile_param1,compile_param2,compile_param3]
+#
+#fit params
+batch_size = np.random.permutation([4,8,16,32,64])[:2]
+fit_param1 = "batch_size=" + str(batch_size[0]) + ",epochs=1"
+fit_param2 = "batch_size=" + str(batch_size[1]) + ",epochs=1"
+fit_params = [fit_param1,fit_param2]
+#
+query = "SELECT madlib.load_model_selection_table('model_arch_library', 'mst_table_auto', ARRAY[1,2], %s, %s);"
+#
+cur.execute(query,[compile_params, fit_params])
+conn.commit()
+#
+# review model selection table
+sql SELECT * FROM mst_table_auto ORDER BY mst_key;
+</pre> <pre class="result">
+ mst_key | model_id      |                                  compile_params                                  |      fit_params
+---------+---------------+----------------------------------------------------------------------------------+-----------------------
+       1 |             1 | loss='categorical_crossentropy',optimizer='Adam(lr=0.0001)',metrics=['accuracy'] | batch_size=4,epochs=1
+       2 |             1 | loss='categorical_crossentropy',optimizer='Adam(lr=0.0001)',metrics=['accuracy'] | batch_size=8,epochs=1
+       3 |             1 | loss='categorical_crossentropy',optimizer='Adam(lr=0.1)',metrics=['accuracy']    | batch_size=4,epochs=1
+       4 |             1 | loss='categorical_crossentropy',optimizer='Adam(lr=0.1)',metrics=['accuracy']    | batch_size=8,epochs=1
+       5 |             1 | loss='categorical_crossentropy',optimizer='Adam(lr=0.001)',metrics=['accuracy']  | batch_size=4,epochs=1
+       6 |             1 | loss='categorical_crossentropy',optimizer='Adam(lr=0.001)',metrics=['accuracy']  | batch_size=8,epochs=1
+       7 |             2 | loss='categorical_crossentropy',optimizer='Adam(lr=0.0001)',metrics=['accuracy'] | batch_size=4,epochs=1
+       8 |             2 | loss='categorical_crossentropy',optimizer='Adam(lr=0.0001)',metrics=['accuracy'] | batch_size=8,epochs=1
+       9 |             2 | loss='categorical_crossentropy',optimizer='Adam(lr=0.1)',metrics=['accuracy']    | batch_size=4,epochs=1
+      10 |             2 | loss='categorical_crossentropy',optimizer='Adam(lr=0.1)',metrics=['accuracy']    | batch_size=8,epochs=1
+      11 |             2 | loss='categorical_crossentropy',optimizer='Adam(lr=0.001)',metrics=['accuracy']  | batch_size=4,epochs=1
+      12 |             2 | loss='categorical_crossentropy',optimizer='Adam(lr=0.001)',metrics=['accuracy']  | batch_size=8,epochs=1
+(12 rows)
+</pre> The name of the model architecture table is stored in the summary table: <pre class="example">
+SELECT * FROM mst_table_auto_summary;
+</pre> <pre class="result">
+  model_arch_table
+--------------------+
+ model_arch_library
+(1 row)
+</pre></li>
+</ol>
+</dd></dl>
+<p><a class="anchor" id="notes"></a></p><dl class="section user"><dt>Notes</dt><dd></dd></dl>
+<ol type="1">
+<li>In this method, the same compile and fit parameters are applied to all model architectures when generating combinations. However, you may wish to have different compile and fit parameters for each model. To do so, call 'load_model_selection_table' multiple times - once for each model. Then you can combine the resulting tables using UNION or other means. Note that the 'mst_key' must be unique so you will need to regenerate it in your final combined table.</li>
+</ol>
+<p><a class="anchor" id="related"></a></p><dl class="section user"><dt>Related Topics</dt><dd></dd></dl>
+<p>See <a class="el" href="keras__model__arch__table_8sql__in.html">keras_model_arch_table.sql_in</a> </p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:59 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__kmeans.html b/docs/rc/group__grp__kmeans.html
new file mode 100644
index 0000000..bfaf965
--- /dev/null
+++ b/docs/rc/group__grp__kmeans.html
@@ -0,0 +1,765 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: k-Means Clustering</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__kmeans.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">k-Means Clustering<div class="ingroups"><a class="el" href="group__grp__unsupervised.html">Unsupervised Learning</a> &raquo; <a class="el" href="group__grp__clustering.html">Clustering</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li class="level1">
+<a href="#cluster">Clustering Function</a> </li>
+<li class="level1">
+<a href="#auto_cluster">Auto Clustering Function</a> </li>
+<li class="level1">
+<a href="#assignment">Cluster Assignment</a> </li>
+<li class="level1">
+<a href="#silh">Simple Silhouette</a> </li>
+<li class="level1">
+<a href="#examples">Examples</a> </li>
+<li class="level1">
+<a href="#background">Technical Background</a> </li>
+<li class="level1">
+<a href="#literature">Literature</a> </li>
+<li class="level1">
+<a href="#related">Related Topics</a> </li>
+</ul>
+</div><p>Clustering refers to the problem of partitioning a set of objects according to some problem-dependent measure of <em>similarity</em>. In the k-means variant, given \( n \) points \( x_1, \dots, x_n \in \mathbb R^d \), the goal is to position \( k \) centroids \( c_1, \dots, c_k \in \mathbb R^d \) so that the sum of <em>distances</em> between each point and its closest centroid is minimized. Each centroid represents a cluster that consists of all points to which this centroid is closest.</p>
+<p>This module can compute clusters given the number of centroids <em>k</em> as an input, using a variety of seeding methods. It can also automatically select the best <em>k</em> value from a range of suggested <em>k</em> values, using the simplified silhouette method or the elbow method.</p>
+<p><a class="anchor" id="cluster"></a></p><dl class="section user"><dt>Clustering Function</dt><dd></dd></dl>
+<p>The k-means algorithm can be invoked in different ways, depending on the source of the initial set of centroids:</p>
+<ul>
+<li>Uniform random centroid seeding method. <pre class="syntax">
+kmeans_random( rel_source,
+               expr_point,
+               k,
+               fn_dist,
+               agg_centroid,
+               max_num_iterations,
+               min_frac_reassigned
+             )
+</pre></li>
+<li>k-means++ centroid seeding method <a href="#kmeans-lit-1">[1]</a>. This method can speed up convergence by seeding centroids spread out over the whole range of the input points, while at the same time not being too susceptible to outliers. <pre class="syntax">
+kmeanspp( rel_source,
+          expr_point,
+          k,
+          fn_dist,
+          agg_centroid,
+          max_num_iterations,
+          min_frac_reassigned,
+          seeding_sample_ratio
+        )
+</pre></li>
+<li>Supply an initial centroid set in a relation identified by the <em>rel_initial_centroids</em> argument, for the case where initial centroids are stored in a table. <pre class="syntax">
+kmeans( rel_source,
+        expr_point,
+        rel_initial_centroids,
+        expr_centroid,
+        fn_dist,
+        agg_centroid,
+        max_num_iterations,
+        min_frac_reassigned
+      )
+</pre></li>
+<li>Provide an initial centroid set as an array expression in the <em>initial_centroids</em> argument. <pre class="syntax">
+kmeans( rel_source,
+        expr_point,
+        initial_centroids,
+        fn_dist,
+        agg_centroid,
+        max_num_iterations,
+        min_frac_reassigned
+      )
+</pre></li>
+</ul>
+<p><b>Arguments</b> </p><dl class="arglist">
+<dt>rel_source </dt>
+<dd><p class="startdd">TEXT. The name of the table containing the input data points. Data points and predefined centroids (if used) are expected to be stored row-wise, in a column of type <code><a class="el" href="group__grp__svec.html">SVEC</a></code> (or any type convertible to <code><a class="el" href="group__grp__svec.html">SVEC</a></code>, like <code>FLOAT[]</code> or <code>INTEGER[]</code>). Data points with non-finite values (NULL, NaN, infinity) in any component are skipped during analysis. </p>
+<p class="enddd"></p>
+</dd>
+<dt>expr_point </dt>
+<dd><p class="startdd">TEXT. The name of the column with point coordinates or an array expression.</p>
+<p class="enddd"></p>
+</dd>
+<dt>k </dt>
+<dd><p class="startdd">INTEGER. The number of centroids to calculate.</p>
+<p class="enddd"></p>
+</dd>
+<dt>fn_dist (optional) </dt>
+<dd><p class="startdd">TEXT, default: 'squared_dist_norm2'. The name of the function to use to calculate the distance from a data point vector to a centroid vector. The following distance functions can be used (computation of barycenter/mean in parentheses): </p><ul>
+<li>
+<b><a class="el" href="linalg_8sql__in.html#aad193850e79c4b9d811ca9bc53e13476">dist_norm1</a></b>: 1-norm/Manhattan (element-wise median). MADlib does not provide a median aggregate function for performance reasons. </li>
+<li>
+<b><a class="el" href="linalg_8sql__in.html#aa58e51526edea6ea98db30b6f250adb4">dist_norm2</a></b>: 2-norm/Euclidean (element-wise mean) </li>
+<li>
+<b><a class="el" href="linalg_8sql__in.html#a00a08e69f27524f2096032214e15b668">squared_dist_norm2</a></b>: squared Euclidean distance (element-wise mean) </li>
+<li>
+<b><a class="el" href="linalg_8sql__in.html#a8c7b9281a72ff22caf06161701b27e84">dist_angle</a></b>: angle (element-wise mean of normalized points) </li>
+<li>
+<b><a class="el" href="linalg_8sql__in.html#afa13b4c6122b99422d666dedea136c18">dist_tanimoto</a></b>: tanimoto (element-wise mean of normalized points <a href="#kmeans-lit-5">[5]</a>) </li>
+<li>
+<b>user defined function</b> with signature <code>DOUBLE PRECISION[] x, DOUBLE PRECISION[] y -&gt; DOUBLE PRECISION</code></li>
+</ul>
+<p class="enddd"></p>
+</dd>
+<dt>agg_centroid (optional) </dt>
+<dd><p class="startdd">TEXT, default: 'avg'. The name of the aggregate function used to determine centroids. The following aggregate functions can be used:</p><ul>
+<li>
+<b><a class="el" href="linalg_8sql__in.html#a1aa37f73fb1cd8d7d106aa518dd8c0b4">avg</a></b>: average (default) </li>
+<li>
+<b><a class="el" href="linalg_8sql__in.html#a0b04663ca206f03e66aed5ea2b4cc461">normalized_avg</a></b>: normalized average</li>
+</ul>
+<p class="enddd"></p>
+</dd>
+<dt>max_num_iterations (optional) </dt>
+<dd><p class="startdd">INTEGER, default: 20. The maximum number of iterations to perform.</p>
+<p class="enddd"></p>
+</dd>
+<dt>min_frac_reassigned (optional) </dt>
+<dd><p class="startdd">DOUBLE PRECISION, default: 0.001. The minimum fraction of centroids reassigned to continue iterating. When fewer than this fraction of centroids are reassigned in an iteration, the calculation completes.</p>
+<p class="enddd"></p>
+</dd>
+<dt>seeding_sample_ratio (optional) </dt>
+<dd><p class="startdd">DOUBLE PRECISION, default: 1.0. The proportion of subsample of original dataset to use for kmeans++ centroid seeding method. Kmeans++ scans through the data sequentially 'k' times and can be too slow for big datasets. When 'seeding_sample_ratio' is greater than 0 (thresholded to be maximum value of 1.0), the seeding is run on a uniform random subsample of the data. Note: the final K-means algorithm is run on the complete dataset. This parameter only builds a subsample for the seeding and is only available for kmeans++.</p>
+<p class="enddd"></p>
+</dd>
+<dt>rel_initial_centroids </dt>
+<dd><p class="startdd">TEXT. Table or view containing the set of initial centroids. </p>
+<p class="enddd"></p>
+</dd>
+<dt>expr_centroid </dt>
+<dd><p class="startdd">TEXT. The name of the column (or the array expression) in the <em>rel_initial_centroids</em> table or view that contains the centroid coordinates.</p>
+<p class="enddd"></p>
+</dd>
+<dt>initial_centroids </dt>
+<dd>DOUBLE PRECISION[][]. Array expression with the initial centroid coordinates. </dd>
+</dl>
+<p><b>Output</b> <br />
+ The output of the k-means module is a composite type with the following columns: </p><table class="output">
+<tr>
+<th>centroids </th><td>DOUBLE PRECISION[][]. The final centroid positions.  </td></tr>
+<tr>
+<th>cluster_variance </th><td>DOUBLE PRECISION[]. The value of the objective function per cluster.  </td></tr>
+<tr>
+<th>objective_fn </th><td>DOUBLE PRECISION. The value of the objective function.  </td></tr>
+<tr>
+<th>frac_reassigned </th><td>DOUBLE PRECISION. The fraction of points reassigned in the last iteration.  </td></tr>
+<tr>
+<th>num_iterations </th><td>INTEGER. The total number of iterations executed.  </td></tr>
+</table>
+<p><a class="anchor" id="auto_cluster"></a></p><dl class="section user"><dt>Auto Clustering Function</dt><dd></dd></dl>
+<p>The optimal number of centroids can be determined automatically, from a set of candidate values that you provide, for random seeding or <em>k-means++</em> seeding. The <a href="#simplified_silhouette">simplified silhouette method</a> or the <a href="#elbow">elbow method</a> are used to pick the best <em>k</em> value.</p>
+<ul>
+<li>Uniform random centroid seeding method. <pre class="syntax">
+kmeans_random_auto( rel_source,
+                    output_table,
+                    expr_point,
+                    k,
+                    fn_dist,
+                    agg_centroid,
+                    max_num_iterations,
+                    min_frac_reassigned,
+                    k_selection_algorithm
+                  )
+</pre></li>
+<li>k-means++ centroid seeding method. <pre class="syntax">
+kmeanspp_auto( rel_source,
+               output_table,
+               expr_point,
+               k,
+               fn_dist,
+               agg_centroid,
+               max_num_iterations,
+               min_frac_reassigned,
+               seeding_sample_ratio,
+               k_selection_algorithm
+              )
+</pre></li>
+</ul>
+<p><b>Arguments</b> <br />
+ The arguments for auto k selection are the same as described above, with the following additions: </p><dl class="arglist">
+<dt>output_table </dt>
+<dd><p class="startdd">TEXT. Name of the output table containing results for each k value. Details of the output table are shown below. A summary table called 'output_table_summary' will also be created for the best k value as per the selection algorithm.</p>
+<p class="enddd"></p>
+</dd>
+<dt>k </dt>
+<dd><p class="startdd">INTEGER[]. Array of k values to test. Does not need to be contiguous but all elements must be &gt;1 and cannot repeat within the array. Parameter 'k_selection_algorithm' determines the evaluation method.</p>
+<p class="enddd"></p>
+</dd>
+<dt>k_selection_algorithm (optional) </dt>
+<dd><p class="startdd">TEXT, default: 'silhouette'. Method to evaluate optimal number of centroids k. Current approaches supported: 'silhouette', 'elbow' or 'both'. The text can be any subset of the strings; for e.g., 'silh' will use the silhouette method. Note that for large data sets, the silhouette computation can be expensive.</p>
+<dl class="section note"><dt>Note</dt><dd>Note that the auto k-means algorithms require the NumPy python package to be installed on the system since the elbow method uses the NumPy gradient function <a href="#kmeans-lit-2">[2]</a>. For Greenplum clusters, installing NumPy only on the host machine of the master segment will be sufficient. The suggested installation method is: <em>pip install numpy &ndash;user</em> </dd></dl>
+</dd>
+</dl>
+<p><b>Output Tables</b> <br />
+ Two output tables are created for auto k-means. The first is called 'output_table' and contains one row per k value: </p><table class="output">
+<tr>
+<th>k </th><td>INTEGER. Number of centroids.  </td></tr>
+<tr>
+<th>centroids </th><td>DOUBLE PRECISION[][]. The final centroid positions.  </td></tr>
+<tr>
+<th>cluster_variance </th><td>DOUBLE PRECISION[]. The value of the objective function per cluster.  </td></tr>
+<tr>
+<th>objective_fn </th><td>DOUBLE PRECISION. The value of the objective function.  </td></tr>
+<tr>
+<th>frac_reassigned </th><td>DOUBLE PRECISION. The fraction of points reassigned in the last iteration.  </td></tr>
+<tr>
+<th>num_iterations </th><td>INTEGER. The total number of iterations executed.  </td></tr>
+<tr>
+<th>k </th><td>INTEGER. Number of centroids as per the specified 'k_selection_algorithm'. If 'both' is specified, the best k value will correspond to the silhouette method.  </td></tr>
+<tr>
+<th>silhouette </th><td>DOUBLE PRECISION. The value of the simplified silhouette score for the k value, if computed.  </td></tr>
+<tr>
+<th>elbow </th><td>DOUBLE PRECISION. The value of the elbow score for the k value, if computed.  </td></tr>
+<tr>
+<th>selection_algorithm </th><td>TEXT. Algorithm used to select the best k (either 'silhouette' or 'elbow')  </td></tr>
+</table>
+<p>A summary table named &lt;output_table&gt;_summary is also created, which has the same output as the 'output_table' above but only contains one row for best k value as per the selection algorithm. If 'both' is specified for 'k_selection_algorithm' the best k value returned will correspond to the silhouette method.</p>
+<p><a class="anchor" id="assignment"></a></p><dl class="section user"><dt>Cluster Assignment</dt><dd></dd></dl>
+<p>After clustering, the cluster assignment for each data point can be computed with the help of the <a class="el" href="linalg_8sql__in.html#acf6628dfa4d73dfce65a582aa5c5a3db" title="Given matrix  and vector  compute the column of  that is closest to . ">closest_column()</a> utility function:</p>
+<pre class="syntax">
+closest_column( m,
+                x,
+                dist
+                )
+</pre><p><b>Arguments</b> </p><dl class="arglist">
+<dt>m </dt>
+<dd><p class="startdd">DOUBLE PRECISION[][]. Learned centroids from the training function.</p>
+<p class="enddd"></p>
+</dd>
+<dt>x </dt>
+<dd><p class="startdd">DOUBLE PRECISION[]. Data points.</p>
+<p class="enddd"></p>
+</dd>
+<dt>dist (optional) </dt>
+<dd>TEXT, default: 'squared_dist_norm2'. The name of the function to use to calculate the distance from a data point vector to a centroid vector. See the <em>fn_dist</em> argument of the k-means training function for more details on distance functions. </dd>
+</dl>
+<p><b>Output</b> <br />
+ The output is a composite type with the following columns: </p><table class="output">
+<tr>
+<th>column_id </th><td>INTEGER. Cluster assignment (zero-based, i.e., 0,1,2...).  </td></tr>
+<tr>
+<th>distance </th><td>DOUBLE PRECISION. Distance to the cluster centroid.  </td></tr>
+</table>
+<p><a class="anchor" id="silh"></a></p><dl class="section user"><dt>Simple Silhouette</dt><dd></dd></dl>
+<p>A common method to assess the quality of the clustering is the <em>silhouette coefficient</em>, a simplified version of which is implemented in MADlib <a href="#kmeans-lit-3">[3]</a>. There are two silhouette functions: average score across all data points, and a per-point score. The average silhouette function has the following syntax: </p><pre class="syntax">
+simple_silhouette( rel_source,
+                   expr_point,
+                   centroids,
+                   fn_dist
+                 )
+</pre><p>The per-point silhouette function has two formats. The first takes an array of centroids: </p><pre class="syntax">
+simple_silhouette_points(rel_source,
+                         output_table,
+                         pid,
+                         expr_point,
+                         centroids,
+                         fn_dist
+                        )
+</pre><p>The second takes a centroids column from a table: </p><pre class="syntax">
+simple_silhouette_points(rel_source,
+                         output_table,
+                         pid,
+                         expr_point,
+                         centroids_table,
+                         centroids_col,
+                         fn_dist
+                        )
+</pre><p><b>Arguments</b> </p><dl class="arglist">
+<dt>rel_source </dt>
+<dd><p class="startdd">TEXT. The name of the table containing the input data points.</p>
+<p class="enddd"></p>
+</dd>
+<dt>expr_point </dt>
+<dd><p class="startdd">TEXT. The name of the column with point coordinates or an array expression.</p>
+<p class="enddd"></p>
+</dd>
+<dt>centroids </dt>
+<dd><p class="startdd">DOUBLE PRECISION[][]. An expression evaluating to an array of centroids. </p>
+<p class="enddd"></p>
+</dd>
+<dt>fn_dist (optional) </dt>
+<dd><p class="startdd">TEXT, default: 'squared_dist_norm2'. The name of the function to use to calculate the distance from a data point vector to a centroid vector. See the <em>fn_dist</em> argument of the k-means training function for more details on distance functions.</p>
+<p class="enddd"></p>
+</dd>
+<dt>output_table </dt>
+<dd><p class="startdd">TEXT. Name of the output table to contain sihouette score for each point.</p>
+<p class="enddd"></p>
+</dd>
+<dt>pid </dt>
+<dd><p class="startdd">TEXT. Column containing point ID in the table 'rel_source' containing the data points. </p>
+<p class="enddd"></p>
+</dd>
+<dt>centroids_table </dt>
+<dd><p class="startdd">TEXT. Name of the table containing the centroids.</p>
+<p class="enddd"></p>
+</dd>
+<dt>centroids_col </dt>
+<dd><p class="startdd">TEXT. Name of the column in the table 'centroids_table' containing the centroids.</p>
+<p class="enddd"></p>
+</dd>
+</dl>
+<p><b>Output</b> <br />
+ For the average function, a single value for simple silhouette score is returned. For the per-point function, the output table contains the following columns: </p><table class="output">
+<tr>
+<th>pid </th><td><p class="starttd">INTEGER. Point ID. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>centroid_id </th><td><p class="starttd">INTEGER. The cluster that the point is assigned to. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>neighbor_centroid_id </th><td><p class="starttd">INTEGER. The next closest cluster to the one that the point is assigned to. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>simple_silhouette </th><td>DOUBLE PRECISION. Simplified silhouette score for the point.  </td></tr>
+</table>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<dl class="section note"><dt>Note</dt><dd>Your results may not be exactly the same as below due to the nature random nature of the k-means algorithm. Also, remember to be consistent in the distance functions that you use in the k-means, silhouette and helper functions.</dd></dl>
+<h4>Clustering for Single <em>k</em> Value</h4>
+<ol type="1">
+<li>Create input data: <pre class="example">
+DROP TABLE IF EXISTS km_sample;
+CREATE TABLE km_sample(pid int, points double precision[]);
+INSERT INTO km_sample VALUES
+(1,  '{14.23, 1.71, 2.43, 15.6, 127, 2.8, 3.0600, 0.2800, 2.29, 5.64, 1.04, 3.92, 1065}'),
+(2,  '{13.2, 1.78, 2.14, 11.2, 1, 2.65, 2.76, 0.26, 1.28, 4.38, 1.05, 3.49, 1050}'),
+(3,  '{13.16, 2.36,  2.67, 18.6, 101, 2.8,  3.24, 0.3, 2.81, 5.6799, 1.03, 3.17, 1185}'),
+(4,  '{14.37, 1.95, 2.5, 16.8, 113, 3.85, 3.49, 0.24, 2.18, 7.8, 0.86, 3.45, 1480}'),
+(5,  '{13.24, 2.59, 2.87, 21, 118, 2.8, 2.69, 0.39, 1.82, 4.32, 1.04, 2.93, 735}'),
+(6,  '{14.2, 1.76, 2.45, 15.2, 112, 3.27, 3.39, 0.34, 1.97, 6.75, 1.05, 2.85, 1450}'),
+(7,  '{14.39, 1.87, 2.45, 14.6, 96, 2.5, 2.52, 0.3, 1.98, 5.25, 1.02, 3.58, 1290}'),
+(8,  '{14.06, 2.15, 2.61, 17.6, 121, 2.6, 2.51, 0.31, 1.25, 5.05, 1.06, 3.58, 1295}'),
+(9,  '{14.83, 1.64, 2.17, 14, 97, 2.8, 2.98, 0.29, 1.98, 5.2, 1.08, 2.85, 1045}'),
+(10, '{13.86, 1.35, 2.27, 16, 98, 2.98, 3.15, 0.22, 1.8500, 7.2199, 1.01, 3.55, 1045}');
+</pre></li>
+<li>Run k-means clustering using kmeans++ for centroid seeding. Use squared Euclidean distance which is a commonly used distance function. <pre class="example">
+DROP TABLE IF EXISTS km_result;
+CREATE TABLE km_result AS
+SELECT * FROM madlib.kmeanspp( 'km_sample',   -- Table of source data
+                               'points',      -- Column containing point co-ordinates
+                               2,             -- Number of centroids to calculate
+                               'madlib.squared_dist_norm2',   -- Distance function
+                               'madlib.avg',  -- Aggregate function
+                               20,            -- Number of iterations
+                               0.001          -- Fraction of centroids reassigned to keep iterating
+                             );
+\x on;
+SELECT * FROM km_result;
+</pre> <pre class="result">
+-[ RECORD 1 ]----+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+centroids        | {{14.255,1.9325,2.5025,16.05,110.5,3.055,2.9775,0.2975,1.845,6.2125,0.9975,3.365,1378.75},{13.7533333333333,1.905,2.425,16.0666666666667,90.3333333333333,2.805,2.98,0.29,2.005,5.40663333333333,1.04166666666667,3.31833333333333,1020.83333333333}}
+cluster_variance | {30561.74805,122999.110416013}
+objective_fn     | 153560.858466013
+frac_reassigned  | 0
+num_iterations   | 2
+</pre></li>
+<li>Simplified silhouette coefficient. First find average for whole data set. Make sure to use the same distance function as k-means above. <pre class="example">
+SELECT * FROM madlib.simple_silhouette( 'km_sample',          -- Input points table
+                                        'points',             -- Column containing points
+                                        (SELECT centroids FROM km_result),  -- Centroids
+                                        'madlib.squared_dist_norm2'   -- Distance function
+                                      );
+</pre> <pre class="result">
+-[ RECORD 1 ]-----+------------------
+simple_silhouette | 0.868174608939623
+</pre> Now calculate simplified silhouette coefficient for each point in the data set: <pre class="example">
+DROP TABLE IF EXISTS km_points_silh;
+SELECT * FROM madlib.simple_silhouette_points( 'km_sample',          -- Input points table
+                                              'km_points_silh',      -- Output table
+                                              'pid',                 -- Point ID column in input table
+                                              'points',              -- Points column in input table
+                                              'km_result',           -- Centroids table
+                                              'centroids',           -- Column in centroids table containing centroids
+                                              'madlib.squared_dist_norm2'   -- Distance function
+                                      );
+SELECT * FROM km_points_silh ORDER BY pid;
+</pre> <pre class="result">
+ pid | centroid_id | neighbor_centroid_id |       silh
+-----+-------------+----------------------+-------------------
+   1 |           1 |                    0 | 0.966608819821713
+   2 |           1 |                    0 | 0.926251125077039
+   3 |           1 |                    0 |  0.28073008848306
+   4 |           0 |                    1 | 0.951447083910869
+   5 |           1 |                    0 |  0.80098239014753
+   6 |           0 |                    1 | 0.972487557020722
+   7 |           0 |                    1 |  0.88838568723116
+   8 |           0 |                    1 | 0.906334719972002
+   9 |           1 |                    0 | 0.994315140692314
+  10 |           1 |                    0 |  0.99420347703982
+(10 rows)
+</pre></li>
+<li>Find the cluster assignment for each point. Use the <a class="el" href="linalg_8sql__in.html#acf6628dfa4d73dfce65a582aa5c5a3db" title="Given matrix  and vector  compute the column of  that is closest to . ">closest_column()</a> function to map each point to the cluster that it belongs to. <pre class="example">
+\x off;
+DROP TABLE IF EXISTS point_cluster_map;
+CREATE TABLE point_cluster_map AS
+SELECT data.*, (madlib.closest_column(centroids, points, 'madlib.squared_dist_norm2')).*
+FROM km_sample as data, km_result;
+ALTER TABLE point_cluster_map RENAME column_id to cluster_id; -- change column name
+SELECT * FROM point_cluster_map ORDER BY pid;
+</pre> <pre class="result">
+ pid |                               points                               | cluster_id |     distance
+-----+--------------------------------------------------------------------+------------+------------------
+   1 | {14.23,1.71,2.43,15.6,127,2.8,3.06,0.28,2.29,5.64,1.04,3.92,1065}  |          1 | 3296.12614333444
+   2 | {13.2,1.78,2.14,11.2,1,2.65,2.76,0.26,1.28,4.38,1.05,3.49,1050}    |          1 | 8856.90882600111
+   3 | {13.16,2.36,2.67,18.6,101,2.8,3.24,0.3,2.81,5.6799,1.03,3.17,1185} |          1 | 27072.3216580044
+   4 | {14.37,1.95,2.5,16.8,113,3.85,3.49,0.24,2.18,7.8,0.86,3.45,1480}   |          0 |    10261.9450375
+   5 | {13.24,2.59,2.87,21,118,2.8,2.69,0.39,1.82,4.32,1.04,2.93,735}     |          1 | 82492.8673553345
+   6 | {14.2,1.76,2.45,15.2,112,3.27,3.39,0.34,1.97,6.75,1.05,2.85,1450}  |          0 |     5080.3612375
+   7 | {14.39,1.87,2.45,14.6,96,2.5,2.52,0.3,1.98,5.25,1.02,3.58,1290}    |          0 |     8090.4485875
+   8 | {14.06,2.15,2.61,17.6,121,2.6,2.51,0.31,1.25,5.05,1.06,3.58,1295}  |          0 |     7128.9931875
+   9 | {14.83,1.64,2.17,14,97,2.8,2.98,0.29,1.98,5.2,1.08,2.85,1045}      |          1 | 634.301947334443
+  10 | {13.86,1.35,2.27,16,98,2.98,3.15,0.22,1.85,7.2199,1.01,3.55,1045}  |          1 | 646.584486004443
+(10 rows)
+</pre></li>
+<li>Display cluster ID. There are two steps to get the cluster id associated with the centroid coordinates, if you need it. First unnest the cluster centroids 2-D array to get a set of 1-D centroid arrays: <pre class="example">
+DROP TABLE IF EXISTS km_centroids_unnest;
+-- Run unnest function
+CREATE TABLE km_centroids_unnest AS
+SELECT (madlib.array_unnest_2d_to_1d(centroids)).*
+FROM km_result;
+SELECT * FROM km_centroids_unnest ORDER BY 1;
+</pre> <pre class="result">
+ unnest_row_id |                                                                       unnest_result
+---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------
+             1 | {14.255,1.9325,2.5025,16.05,110.5,3.055,2.9775,0.2975,1.845,6.2125,0.9975,3.365,1378.75}
+             2 | {13.7533333333333,1.905,2.425,16.0666666666667,90.3333333333333,2.805,2.98,0.29,2.005,5.40663333333333,1.04166666666667,3.31833333333333,1020.83333333333}
+(2 rows)
+</pre> Note that the ID column returned by <a class="el" href="array__ops_8sql__in.html#af057b589f2a2cb1095caa99feaeb3d70" title="This function takes a 2-D array as the input and unnests it by one level. It returns a set of 1-D arr...">array_unnest_2d_to_1d()</a> is just a row ID and not the cluster ID assigned by k-means. The second step to get the cluster_id is: <pre class="example">
+SELECT cent.*,  (madlib.closest_column(centroids, unnest_result, 'madlib.squared_dist_norm2')).column_id as cluster_id
+FROM km_centroids_unnest as cent, km_result
+ORDER BY cent.unnest_row_id;
+</pre> <pre class="result">
+ unnest_row_id |                                                                       unnest_result                                                                        | cluster_id
+---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+------------
+             1 | {14.255,1.9325,2.5025,16.05,110.5,3.055,2.9775,0.2975,1.845,6.2125,0.9975,3.365,1378.75}                                                                   |          0
+             2 | {13.7533333333333,1.905,2.425,16.0666666666667,90.3333333333333,2.805,2.98,0.29,2.005,5.40663333333333,1.04166666666667,3.31833333333333,1020.83333333333} |          1
+(2 rows)
+</pre></li>
+<li>Run the same example as above, but using array input. Create the input table: <pre class="example">
+DROP TABLE IF EXISTS km_arrayin CASCADE;
+CREATE TABLE km_arrayin(pid int,
+                        p1 float,
+                        p2 float,
+                        p3 float,
+                        p4 float,
+                        p5 float,
+                        p6 float,
+                        p7 float,
+                        p8 float,
+                        p9 float,
+                        p10 float,
+                        p11 float,
+                        p12 float,
+                        p13 float);
+INSERT INTO km_arrayin VALUES
+(1,  14.23, 1.71, 2.43, 15.6, 127, 2.8, 3.0600, 0.2800, 2.29, 5.64, 1.04, 3.92, 1065),
+(2,  13.2, 1.78, 2.14, 11.2, 1, 2.65, 2.76, 0.26, 1.28, 4.38, 1.05, 3.49, 1050),
+(3,  13.16, 2.36,  2.67, 18.6, 101, 2.8,  3.24, 0.3, 2.81, 5.6799, 1.03, 3.17, 1185),
+(4,  14.37, 1.95, 2.5, 16.8, 113, 3.85, 3.49, 0.24, 2.18, 7.8, 0.86, 3.45, 1480),
+(5,  13.24, 2.59, 2.87, 21, 118, 2.8, 2.69, 0.39, 1.82, 4.32, 1.04, 2.93, 735),
+(6,  14.2, 1.76, 2.45, 15.2, 112, 3.27, 3.39, 0.34, 1.97, 6.75, 1.05, 2.85, 1450),
+(7,  14.39, 1.87, 2.45, 14.6, 96, 2.5, 2.52, 0.3, 1.98, 5.25, 1.02, 3.58, 1290),
+(8,  14.06, 2.15, 2.61, 17.6, 121, 2.6, 2.51, 0.31, 1.25, 5.05, 1.06, 3.58, 1295),
+(9,  14.83, 1.64, 2.17, 14, 97, 2.8, 2.98, 0.29, 1.98, 5.2, 1.08, 2.85, 1045),
+(10, 13.86, 1.35, 2.27, 16, 98, 2.98, 3.15, 0.22, 1.8500, 7.2199, 1.01, 3.55, 1045);
+</pre> Now find the cluster assignment for each point using random seeding: <pre class="example">
+DROP TABLE IF EXISTS km_result_array;
+-- Run kmeans algorithm
+CREATE TABLE km_result_array AS
+SELECT * FROM madlib.kmeans_random('km_arrayin',                 -- Table of source data
+                                'ARRAY[p1, p2, p3, p4, p5, p6,   -- Points
+                                      p7, p8, p9, p10, p11, p12, p13]',
+                                2,                               -- Number of centroids to calculate
+                                'madlib.squared_dist_norm2',     -- Distance function
+                                'madlib.avg',                    -- Aggregate function
+                                20,                              -- Number of iterations
+                                0.001);                          -- Fraction of centroids reassigned to keep iterating
+-- Get point assignment
+SELECT data.*,  (madlib.closest_column(centroids,
+                                       ARRAY[p1, p2, p3, p4, p5, p6,
+                                      p7, p8, p9, p10, p11, p12, p13],
+                                       'madlib.squared_dist_norm2')).column_id as cluster_id
+FROM km_arrayin as data, km_result_array
+ORDER BY data.pid;
+</pre> This produces the result in column format: <pre class="result">
+ pid |  p1   |  p2  |  p3  |  p4  | p5  |  p6  |  p7  |  p8  |  p9  |  p10   | p11  | p12  | p13  | cluster_id
+-----+-------+------+------+------+-----+------+------+------+------+--------+------+------+------+------------
+   1 | 14.23 | 1.71 | 2.43 | 15.6 | 127 |  2.8 | 3.06 | 0.28 | 2.29 |   5.64 | 1.04 | 3.92 | 1065 |          0
+   2 |  13.2 | 1.78 | 2.14 | 11.2 |   1 | 2.65 | 2.76 | 0.26 | 1.28 |   4.38 | 1.05 | 3.49 | 1050 |          0
+   3 | 13.16 | 2.36 | 2.67 | 18.6 | 101 |  2.8 | 3.24 |  0.3 | 2.81 | 5.6799 | 1.03 | 3.17 | 1185 |          1
+   4 | 14.37 | 1.95 |  2.5 | 16.8 | 113 | 3.85 | 3.49 | 0.24 | 2.18 |    7.8 | 0.86 | 3.45 | 1480 |          1
+   5 | 13.24 | 2.59 | 2.87 |   21 | 118 |  2.8 | 2.69 | 0.39 | 1.82 |   4.32 | 1.04 | 2.93 |  735 |          0
+   6 |  14.2 | 1.76 | 2.45 | 15.2 | 112 | 3.27 | 3.39 | 0.34 | 1.97 |   6.75 | 1.05 | 2.85 | 1450 |          1
+   7 | 14.39 | 1.87 | 2.45 | 14.6 |  96 |  2.5 | 2.52 |  0.3 | 1.98 |   5.25 | 1.02 | 3.58 | 1290 |          1
+   8 | 14.06 | 2.15 | 2.61 | 17.6 | 121 |  2.6 | 2.51 | 0.31 | 1.25 |   5.05 | 1.06 | 3.58 | 1295 |          1
+   9 | 14.83 | 1.64 | 2.17 |   14 |  97 |  2.8 | 2.98 | 0.29 | 1.98 |    5.2 | 1.08 | 2.85 | 1045 |          0
+  10 | 13.86 | 1.35 | 2.27 |   16 |  98 | 2.98 | 3.15 | 0.22 | 1.85 | 7.2199 | 1.01 | 3.55 | 1045 |          0
+(10 rows)
+</pre></li>
+</ol>
+<h4>Auto Clustering for Range of <em>k</em> Values</h4>
+<ol type="1">
+<li>Auto k selection. Now let's run k-means random for a variety of k values and compare using simple silhouette and elbow methods. <pre class="example">
+DROP TABLE IF EXISTS km_result_auto, km_result_auto_summary;
+SELECT madlib.kmeans_random_auto(
+    'km_sample',                   -- points table
+    'km_result_auto',              -- output table
+    'points',                      -- column name in point table
+    ARRAY[2,3,4,5,6],              -- k values to try
+    'madlib.squared_dist_norm2',   -- distance function
+    'madlib.avg',                  -- aggregate function
+    20,                            -- max iterations
+    0.001,                         -- minimum fraction of centroids reassigned to continue iterating
+    'both'                         -- k selection algorithm  (simple silhouette and elbow)
+);
+\x on
+SELECT * FROM km_result_auto_summary;
+</pre> <pre class="result">-[ RECORD 1 ]-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+k                   | 6
+centroids           | {{14.23,1.71,2.43,15.6,127,2.8,3.06,0.28,2.29,5.64,1.04,3.92,1065},{13.24,2.59,2.87,21,118,2.8,2.69,0.39,1.82,4.32,1.04,2.93,735},{14.285,1.855,2.475,16,112.5,3.56,3.44,0.29,2.075,7.275,0.955,3.15,1465},{13.87,2.12666666666667,2.57666666666667,16.9333333333333,106,2.63333333333333,2.75666666666667,0.303333333333333,2.01333333333333,5.32663333333333,1.03666666666667,3.44333333333333,1256.66666666667},{14.345,1.495,2.22,15,97.5,2.89,3.065,0.255,1.915,6.20995,1.045,3.2,1045},{13.2,1.78,2.14,11.2,1,2.65,2.76,0.26,1.28,4.38,1.05,3.49,1050}}
+cluster_variance    | {0,0,452.7633,8078.22646267333,5.346498005,0}
+objective_fn        | 8536.33626067833
+frac_reassigned     | 0
+num_iterations      | 3
+silhouette          | 0.954496117675027
+elbow               | -50296.3677976633
+selection_algorithm | silhouette
+</pre> The best selection above is made by the silhouette algorithm by default. Note that the elbow method may select a different k value as the best. To see results for all k values: <pre class="example">
+SELECT * FROM km_result_auto ORDER BY k;
+</pre> <pre class="result">
+-[ RECORD 1 ]----+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+k                | 2
+centroids        | {{14.036,2.018,2.536,16.56,108.6,3.004,3.03,0.298,2.038,6.10598,1.004,3.326,1340},{13.872,1.814,2.376,15.56,88.2,2.806,2.928,0.288,1.844,5.35198,1.044,3.348,988}}
+cluster_variance | {60672.638245208,90512.324426408}
+objective_fn     | 151184.962671616
+frac_reassigned  | 0
+num_iterations   | 3
+silhouette       | 0.872087020146542
+elbow            | -1056.25028126836
+-[ RECORD 2 ]----+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+k                | 3
+centroids        | {{13.87,2.12666666666667,2.57666666666667,16.9333333333333,106,2.63333333333333,2.75666666666667,0.303333333333333,2.01333333333333,5.32663333333333,1.03666666666667,3.44333333333333,1256.66666666667},{14.285,1.855,2.475,16,112.5,3.56,3.44,0.29,2.075,7.275,0.955,3.15,1465},{13.872,1.814,2.376,15.56,88.2,2.806,2.928,0.288,1.844,5.35198,1.044,3.348,988}}
+cluster_variance | {8078.22646267333,452.7633,90512.324426408}
+objective_fn     | 99043.3141890814
+frac_reassigned  | 0
+num_iterations   | 2
+silhouette       | 0.895849874221733
+elbow            | 20549.7753189989
+-[ RECORD 3 ]----+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+k                | 4
+centroids        | {{14.02,1.765,2.385,16.05,105.75,2.845,3.1075,0.2725,2.2325,5.93495,1.04,3.3725,1085},{13.24,2.59,2.87,21,118,2.8,2.69,0.39,1.82,4.32,1.04,2.93,735},{14.255,1.9325,2.5025,16.05,110.5,3.055,2.9775,0.2975,1.845,6.2125,0.9975,3.365,1378.75},{13.2,1.78,2.14,11.2,1,2.65,2.76,0.26,1.28,4.38,1.05,3.49,1050}}
+cluster_variance | {14227.41709401,0,30561.74805,0}
+objective_fn     | 44789.16514401
+frac_reassigned  | 0
+num_iterations   | 3
+silhouette       | 0.877839150000438
+elbow            | 17535.7421610686
+-[ RECORD 4 ]----+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+k                | 5
+centroids        | {{14.285,1.855,2.475,16,112.5,3.56,3.44,0.29,2.075,7.275,0.955,3.15,1465},{14.225,2.01,2.53,16.1,108.5,2.55,2.515,0.305,1.615,5.15,1.04,3.58,1292.5},{13.2,1.78,2.14,11.2,1,2.65,2.76,0.26,1.28,4.38,1.05,3.49,1050},{14.04,1.8225,2.435,16.65,110,2.845,2.97,0.295,1.985,5.594975,1.0425,3.3125,972.5},{13.16,2.36,2.67,18.6,101,2.8,3.24,0.3,2.81,5.6799,1.03,3.17,1185}}
+cluster_variance | {452.7633,329.8988,0,76176.4564000075,0}
+objective_fn     | 76959.1185000075
+frac_reassigned  | 0
+num_iterations   | 2
+silhouette       | 0.771207558995578
+elbow            | -28690.3421973961
+-[ RECORD 5 ]----+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+k                | 6
+centroids        | {{14.23,1.71,2.43,15.6,127,2.8,3.06,0.28,2.29,5.64,1.04,3.92,1065},{13.24,2.59,2.87,21,118,2.8,2.69,0.39,1.82,4.32,1.04,2.93,735},{14.285,1.855,2.475,16,112.5,3.56,3.44,0.29,2.075,7.275,0.955,3.15,1465},{13.87,2.12666666666667,2.57666666666667,16.9333333333333,106,2.63333333333333,2.75666666666667,0.303333333333333,2.01333333333333,5.32663333333333,1.03666666666667,3.44333333333333,1256.66666666667},{14.345,1.495,2.22,15,97.5,2.89,3.065,0.255,1.915,6.20995,1.045,3.2,1045},{13.2,1.78,2.14,11.2,1,2.65,2.76,0.26,1.28,4.38,1.05,3.49,1050}}
+cluster_variance | {0,0,452.7633,8078.22646267333,5.346498005,0}
+objective_fn     | 8536.33626067833
+frac_reassigned  | 0
+num_iterations   | 3
+silhouette       | 0.954496117675027
+elbow            | -50296.3677976633
+</pre></li>
+<li>Simplified silhouette per point. Let's say we want the simplified silhouette coefficient for each point in the data set, for the case where <em>k=3</em>: <pre class="example">
+DROP TABLE IF EXISTS km_points_silh;
+SELECT * FROM madlib.simple_silhouette_points( 'km_sample',          -- Input points table
+                                              'km_points_silh',     -- Output table
+                                              'pid',                -- Point ID column in input table
+                                              'points',             -- Points column in input table
+                                              (SELECT centroids FROM km_result_auto WHERE k=3), -- centroids array
+                                              'madlib.squared_dist_norm2'   -- Distance function
+                                      );
+SELECT * FROM km_points_silh ORDER BY pid;
+</pre> <pre class="result">
+ pid | centroid_id | neighbor_centroid_id |       silh
+-----+-------------+----------------------+-------------------
+   1 |           2 |                    0 | 0.800019825058391
+   2 |           2 |                    0 | 0.786712987562913
+   3 |           0 |                    2 | 0.867496080386644
+   4 |           1 |                    0 | 0.995466498952947
+   5 |           2 |                    0 | 0.761551610381542
+   6 |           1 |                    0 | 0.993950286967157
+   7 |           0 |                    1 | 0.960621637528528
+   8 |           0 |                    1 | 0.941493577405087
+   9 |           2 |                    0 | 0.925822020308802
+  10 |           2 |                    0 |  0.92536421766532
+(10 rows)
+</pre></li>
+</ol>
+<p><a class="anchor" id="background"></a></p><dl class="section user"><dt>Technical Background</dt><dd></dd></dl>
+<p><b>k-means Algorithm</b> <br />
+ Formally, we wish to minimize the following objective function: </p><p class="formulaDsp">
+\[ (c_1, \dots, c_k) \mapsto \sum_{i=1}^n \min_{j=1}^k \operatorname{dist}(x_i, c_j) \]
+</p>
+<p> In the most common case, \( \operatorname{dist} \) is the square of the Euclidean distance, though other distance measures can be used.</p>
+<p>This problem is computationally difficult (NP-hard), yet the local-search heuristic proposed by Lloyd <a href="#kmeans-lit-4">[4]</a> performs reasonably well in practice. In fact, it is so ubiquitous today that it is often referred to as the <em>standard algorithm</em> or even just the <em>k-means algorithm</em>. It works as follows:</p>
+<ol type="1">
+<li>Seed the \( k \) centroids, meaning specify their initial positions (see below).</li>
+<li>Repeat until convergence:<ol type="a">
+<li>Assign each point to its closest centroid.</li>
+<li>Move each centroid to a position that minimizes the sum of distances in this cluster.</li>
+</ol>
+</li>
+<li>Convergence is achieved when no points change their assignments during step 2a.</li>
+</ol>
+<p>Since the objective function decreases in every step, this algorithm is guaranteed to converge to a local optimum.</p>
+<p>The quality of k-means is highly influenced by the choice of the seeding. In MADlib we support uniform-at-random sampling, kmeans++ as well as the ability for the user to enter manual seeding based on other methods.</p>
+<p>k-means++ seeding <a href="#kmeans-lit-1">[1]</a> starts with a single centroid chosen randomly among the input points. It then iteratively chooses new centroids from the input points until there are a total of k centroids. The probability for picking a particular point is proportional to its minimum distance to any existing centroid. Intuitively, k-means++ favors seedings where centroids are spread out over the whole range of the input points, while at the same time not being too susceptible to outliers.</p>
+<p><a class="anchor" id="simplified_silhouette"></a><b>Silhouette</b> <br />
+</p>
+<p>To evaluate the validity of clustering with different k values, the objective function is not ideal because it decreases as k value increases, so it has a bias toward selecting the largest k as the best result <a href="#kmeans-lit-6">[6]</a>. Therefore we use other internal measures to evaluate cluster validity.</p>
+<p>One such measure is silhouette score. The original formulation <a href="#kmeans-lit-7">[7]</a> computes the average distance of a data point to all the other data points in its own cluster, and to all the data points in the neighbouring cluster nearest to the data point. This is expensive for a large number of points since it requires the full pairwise distance matrix over all data.</p>
+<p>In the simplified silhouette <a href="#kmeans-lit-3">[3]</a> which is used in MADlib, the distance of a data point to a cluster is represented with the distance to the cluster centroid instead of the average distance to all (other) data points in the cluster. This has the advantage of being much faster to compute, and can be shown to be comparable in performance to the full silhouette <a href="#kmeans-lit-8">[8]</a>.</p>
+<p><a class="anchor" id="elbow"></a><b>Elbow Method</b> <br />
+ The elbow method considers the percentage of variance explained as a function of number of clusters. The idea is not to add another cluster if it doesn't model the data better. Graphically it means identifying the "elbow" in the curve of sum of squared errors vs. number of clusters (k). This was possibly originally suggested in <a href="#kmeans-lit-9">[9]</a>. To locate the elbow, we use the 2nd derivative of the objective function using the NumPy gradient function <a href="#kmeans-lit-2">[2]</a>.</p>
+<p><a class="anchor" id="literature"></a></p><dl class="section user"><dt>Literature</dt><dd></dd></dl>
+<p><a class="anchor" id="kmeans-lit-1"></a>[1] David Arthur, Sergei Vassilvitskii: k-means++: the advantages of careful seeding, Proceedings of the 18th Annual ACM-SIAM Symposium on Discrete Algorithms (SODA'07), pp. 1027-1035.</p>
+<p><a class="anchor" id="kmeans-lit-2"></a>[2] NumPy gradient function, <a href="https://docs.scipy.org/doc/numpy/reference/generated/numpy.gradient.html">https://docs.scipy.org/doc/numpy/reference/generated/numpy.gradient.html</a></p>
+<p><a class="anchor" id="kmeans-lit-3"></a>[3] E. R. Hruschka, L. N. C. Silva, R. J. G. B. Campello: Clustering Gene-Expression Data: A Hybrid Approach that Iterates Between k-Means and Evolutionary Search. In: Studies in Computational Intelligence - Hybrid Evolutionary Algorithms. pp. 313-335. Springer. 2007.</p>
+<p><a class="anchor" id="kmeans-lit-4"></a>[4] Lloyd, Stuart: Least squares quantization in PCM. Technical Note, Bell Laboratories. Published much later in: IEEE Transactions on Information Theory 28(2), pp. 128-137. 1982.</p>
+<p><a class="anchor" id="kmeans-lit-5"></a>[5] Leisch, Friedrich: A Toolbox for K-Centroids Cluster Analysis. In: Computational Statistics and Data Analysis, 51(2). pp. 526-544. 2006.</p>
+<p><a class="anchor" id="kmeans-lit-6"></a>[6] Jain, A.K.: Data clustering: 50 years beyond k-means. Pattern recognition letters 31(8), 651–666 (2010)</p>
+<p><a class="anchor" id="kmeans-lit-7"></a>[7] Peter J. Rousseeuw (1987). “Silhouettes: a Graphical Aid to the Interpretation and Validation of Cluster Analysis”. Computational and Applied Mathematics 20: 53-65</p>
+<p><a class="anchor" id="kmeans-lit-8"></a>[8] Wang F., Franco-Penya HH., Kelleher J.D., Pugh J., Ross R. (2017) An Analysis of the Application of Simplified Silhouette to the Evaluation of k-means Clustering Validity. In: Perner P. (eds) Machine Learning and Data Mining in Pattern Recognition. MLDM 2017. Lecture Notes in Computer Science, vol 10358. Springer, Cham</p>
+<p><a class="anchor" id="kmeans-lit-9"></a>[9] Robert L. Thorndike (December 1953). "Who Belongs in the Family?". Psychometrika. 18 (4): 267–276. doi:10.1007/BF02289263.</p>
+<p><a class="anchor" id="related"></a></p><dl class="section user"><dt>Related Topics</dt><dd></dd></dl>
+<p>File <a class="el" href="kmeans_8sql__in.html" title="Set of functions for k-means clustering. ">kmeans.sql_in</a> documenting the k-Means SQL functions</p>
+<p><a class="el" href="group__grp__svec.html">Sparse Vectors</a></p>
+<p><a class="el" href="linalg_8sql__in.html#acf6628dfa4d73dfce65a582aa5c5a3db" title="Given matrix  and vector  compute the column of  that is closest to . ">closest_column()</a></p>
+<p><a class="el" href="array__ops_8sql__in.html#af057b589f2a2cb1095caa99feaeb3d70" title="This function takes a 2-D array as the input and unnests it by one level. It returns a set of 1-D arr...">array_unnest_2d_to_1d()</a></p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:59 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__knn.html b/docs/rc/group__grp__knn.html
new file mode 100644
index 0000000..5a86e05
--- /dev/null
+++ b/docs/rc/group__grp__knn.html
@@ -0,0 +1,555 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: k-Nearest Neighbors</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__knn.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">k-Nearest Neighbors<div class="ingroups"><a class="el" href="group__grp__super.html">Supervised Learning</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li class="level1">
+<a href="#knn">K-Nearest Neighbors</a> </li>
+<li class="level1">
+<a href="#usage">Usage</a> </li>
+<li class="level1">
+<a href="#output">Output Format</a> </li>
+<li class="level1">
+<a href="#examples">Examples</a> </li>
+<li class="level1">
+<a href="#background">Technical Background</a> </li>
+<li class="level1">
+<a href="#literature">Literature</a> </li>
+</ul>
+</div><p><a class="anchor" id="knn"></a> K-nearest neighbors is a method for finding the \(k\) closest points to a given data point in terms of a given metric. Its input consists of data points as features from testing examples and it looks for \(k\) closest points in the training set for each of the data points in test set. The output of KNN depends on the type of task. For classification, the output is the majority vote of the classes of the \(k\) nearest data points. For regression, the output is the average of the values of \(k\) nearest neighbors of the given test point.</p>
+<p>For unsupervised nearest neighbors, set the training set to match the test set so the nearest neighbor of each point is the point itself, with zero distance.</p>
+<p>Both exact and approximate methods are supported. The approximate methods can be used in the case that run-time is too long using the exact method.</p>
+<p><a class="anchor" id="usage"></a></p><dl class="section user"><dt>Usage</dt><dd><pre class="syntax">
+knn( point_source,
+     point_column_name,
+     point_id,
+     label_column_name,
+     test_source,
+     test_column_name,
+     test_id,
+     output_table,
+     k,
+     output_neighbors,
+     fn_dist,
+     weighted_avg,
+     algorithm,
+     algorithm_params
+   )
+</pre></dd></dl>
+<p><b>Arguments</b> </p><dl class="arglist">
+<dt>point_source </dt>
+<dd><p class="startdd">TEXT. Name of the table containing the training data points. Training data points are expected to be stored row-wise in a column of type <code>DOUBLE PRECISION[]</code>. </p>
+<p class="enddd"></p>
+</dd>
+<dt>point_column_name </dt>
+<dd><p class="startdd">TEXT. Name of the column with training data points or expression that evaluates to a numeric array</p>
+<p class="enddd"></p>
+</dd>
+<dt>point_id </dt>
+<dd><p class="startdd">TEXT. Name of the column in 'point_source’ containing source data ids. The ids are of type INTEGER with no duplicates. They do not need to be contiguous. This parameter must be used if the list of nearest neighbors are to be output, i.e., if the parameter 'output_neighbors' below is TRUE or if 'label_column_name' is NULL.</p>
+<p class="enddd"></p>
+</dd>
+<dt>label_column_name </dt>
+<dd><p class="startdd">TEXT. Name of the column with labels/values of training data points. If this column is a Boolean, integer or text, it will run KNN classification, else if it is double precision values will run KNN regression. If you set this to NULL, it will only return the set of neighbors without actually doing classification or regression.</p>
+<p class="enddd"></p>
+</dd>
+<dt>test_source </dt>
+<dd><p class="startdd">TEXT. Name of the table containing the test data points. Testing data points are expected to be stored row-wise in a column of type <code>DOUBLE PRECISION[]</code>. </p>
+<p class="enddd"></p>
+</dd>
+<dt>test_column_name </dt>
+<dd><p class="startdd">TEXT. Name of the column with testing data points or expression that evaluates to a numeric array</p>
+<dl class="section note"><dt>Note</dt><dd>For unsupervised nearest neighbors, make the test dataset the same as the source dataset, so the nearest neighbor of each point is the point itself, with a zero distance.</dd></dl>
+</dd>
+<dt>test_id </dt>
+<dd><p class="startdd">TEXT. Name of the column having ids of data points in test data table.</p>
+<p class="enddd"></p>
+</dd>
+<dt>output_table </dt>
+<dd><p class="startdd">TEXT. Name of the table to store final results.</p>
+<p class="enddd"></p>
+</dd>
+<dt>k (optional) </dt>
+<dd><p class="startdd">INTEGER. default: 1. Number of nearest neighbors to consider. For classification, should be an odd number to break ties, otherwise the result may depend on ordering of the input data.</p>
+<p class="enddd"></p>
+</dd>
+<dt>output_neighbors (optional)  </dt>
+<dd><p class="startdd">BOOLEAN default: TRUE. Outputs the list of k-nearest neighbors (and their respective distances to the target point) that were used in the voting/averaging, sorted from closest to furthest.</p>
+<p class="enddd"></p>
+</dd>
+<dt>fn_dist (optional) </dt>
+<dd><p class="startdd">TEXT, default: 'squared_dist_norm2'. The name of the function used to calculate the distance between data points.</p>
+<p class="enddd">The following distance functions can be used: </p><ul>
+<li>
+<b><a class="el" href="linalg_8sql__in.html#aad193850e79c4b9d811ca9bc53e13476">dist_norm1</a></b>: 1-norm/Manhattan </li>
+<li>
+<b><a class="el" href="linalg_8sql__in.html#aa58e51526edea6ea98db30b6f250adb4">dist_norm2</a></b>: 2-norm/Euclidean </li>
+<li>
+<b><a class="el" href="linalg_8sql__in.html#a00a08e69f27524f2096032214e15b668">squared_dist_norm2</a></b>: squared Euclidean distance </li>
+<li>
+<b><a class="el" href="linalg_8sql__in.html#a8c7b9281a72ff22caf06161701b27e84">dist_angle</a></b>: angle </li>
+<li>
+<b><a class="el" href="linalg_8sql__in.html#afa13b4c6122b99422d666dedea136c18">dist_tanimoto</a></b>: tanimoto </li>
+<li>
+<b>user defined function</b> with signature <code>DOUBLE PRECISION[] x, DOUBLE PRECISION[] y -&gt; DOUBLE PRECISION.</code> Must return a value greater than or equal to zero.</li>
+</ul>
+<dl class="section note"><dt>Note</dt><dd>Always qualify the distance function with the schema name. For example, if you install MADlib in a schema called 'madlib' then the 'fn_dist' parameter would be 'madlib.dist_norm2', etc.</dd></dl>
+</dd>
+<dt>weighted_avg (optional) </dt>
+<dd><p class="startdd">BOOLEAN, default: FALSE. Calculates classification or regression values using a weighted average. The idea is to weigh the contribution of each of the k neighbors according to their distance to the test point, giving greater influence to closer neighbors. The distance function 'fn_dist' specified above is used. For classification, majority voting weighs a neighbor according to inverse distance. For regression, the inverse distance weighting approach is used from Shepard [4].</p>
+<p class="enddd"></p>
+</dd>
+<dt>algorithm (optional) </dt>
+<dd><p class="startdd">TEXT, default: 'brute_force'. The name of the algorithm used to compute nearest neighbors. The following options are supported: </p><ul>
+<li>
+<b>brute_force</b>: Produces an exact result by searching all points in the search space. You can also use a short form "b" or "brute" etc. to select brute force. </li>
+<li>
+<b>kd_tree</b>: Produces an approximate result by searching a subset of the search space, that is, only certain leaf nodes in the kd-tree as specified by "algorithm_params" below. You can also use a short form "k" or "kd" etc. to select kd-tree.</li>
+</ul>
+<p class="enddd"></p>
+</dd>
+<dt>algorithm_params (optional) </dt>
+<dd><p class="startdd">TEXT, default: 'depth=3, leaf_nodes=2'. These parameters apply to the kd-tree algorithm only. </p><ul>
+<li>
+<b>depth</b>: Depth of the kd-tree. Increasing this value will decrease run-time but reduce the accuracy. </li>
+<li>
+<b>leaf_nodes</b>: Number of leaf nodes (regions) to search for each test point. Inceasing this value will improve the accuracy but increase run-time.</li>
+</ul>
+<dl class="section note"><dt>Note</dt><dd>Please note that the kd-tree accuracy will be lower for datasets with a high number of features. It is advised to use at least two leaf nodes. Refer to the <a href="#background">Technical Background</a> for more information on how the kd-tree is implemented.</dd></dl>
+</dd>
+</dl>
+<p><a class="anchor" id="output"></a></p><dl class="section user"><dt>Output Format</dt><dd></dd></dl>
+<p>The output of the KNN module is a table with the following columns: </p><table class="output">
+<tr>
+<th>id </th><td>INTEGER. The ids of test data points.  </td></tr>
+<tr>
+<th>test_column_name </th><td>DOUBLE PRECISION[]. The test data points.  </td></tr>
+<tr>
+<th>prediction </th><td>INTEGER. Label in case of classification, average value in case of regression.  </td></tr>
+<tr>
+<th>k_nearest_neighbours </th><td>INTEGER[]. List of nearest neighbors, sorted closest to furthest from the corresponding test point.  </td></tr>
+<tr>
+<th>distance </th><td>DOUBLE PRECISION[]. List of distance to nearest neighbors, sorted closest to furthest from the corresponding test point.  </td></tr>
+</table>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<ol type="1">
+<li>Prepare some training data for classification: <pre class="example">
+DROP TABLE IF EXISTS knn_train_data;
+CREATE TABLE knn_train_data (
+                    id integer,
+                    data integer[],
+                    label integer  -- Integer label means for classification
+                    );
+INSERT INTO knn_train_data VALUES
+(1, '{1,1}', 1),
+(2, '{2,2}', 1),
+(3, '{3,3}', 1),
+(4, '{4,4}', 1),
+(5, '{4,5}', 1),
+(6, '{20,50}', 0),
+(7, '{10,31}', 0),
+(8, '{81,13}', 0),
+(9, '{1,111}', 0);
+</pre></li>
+<li>Prepare some training data for regression: <pre class="example">
+DROP TABLE IF EXISTS knn_train_data_reg;
+CREATE TABLE knn_train_data_reg (
+                    id integer,
+                    data integer[],
+                    label float  -- Float label means for regression
+                    );
+INSERT INTO knn_train_data_reg VALUES
+(1, '{1,1}', 1.0),
+(2, '{2,2}', 1.0),
+(3, '{3,3}', 1.0),
+(4, '{4,4}', 1.0),
+(5, '{4,5}', 1.0),
+(6, '{20,50}', 0.0),
+(7, '{10,31}', 0.0),
+(8, '{81,13}', 0.0),
+(9, '{1,111}', 0.0);
+</pre></li>
+<li>Prepare some testing data: <pre class="example">
+DROP TABLE IF EXISTS knn_test_data CASCADE;
+CREATE TABLE knn_test_data (
+                    id integer,
+                    data integer[]
+                    );
+INSERT INTO knn_test_data VALUES
+(1, '{2,1}'),
+(2, '{2,6}'),
+(3, '{15,40}'),
+(4, '{12,1}'),
+(5, '{2,90}'),
+(6, '{50,45}');
+</pre></li>
+<li>Run KNN for classification. Prepend the distance function parameter with the schema where MADlib is installed (in this example 'madlib.squared_dist_norm2'): <pre class="example">
+DROP TABLE IF EXISTS knn_result_classification;
+SELECT * FROM madlib.knn(
+                'knn_train_data',      -- Table of training data
+                'data',                -- Col name of training data
+                'id',                  -- Col name of id in train data
+                'label',               -- Training labels
+                'knn_test_data',       -- Table of test data
+                'data',                -- Col name of test data
+                'id',                  -- Col name of id in test data
+                'knn_result_classification',  -- Output table
+                 3,                    -- Number of nearest neighbors
+                 True,                 -- True to list nearest-neighbors by id
+                'madlib.squared_dist_norm2' -- Distance function
+                );
+SELECT * from knn_result_classification ORDER BY id;
+</pre> Result: <pre class="result">
+ id |  data   | prediction | k_nearest_neighbours | distance
+----+---------+------------+----------------------+---------------------
+  1 | {2,1}   |          1 | {1,2,3}              | {1,1,5}
+  2 | {2,6}   |          1 | {5,4,3}              | {5,8,10}
+  3 | {15,40} |          0 | {7,6,5}              | {106,125,1346}
+  4 | {12,1}  |          1 | {4,5,3}              | {73,80,85}
+  5 | {2,90}  |          0 | {9,6,7}              | {442,1924,3545}
+  6 | {50,45} |          0 | {6,7,8}              | {925,1796,1985}
+(6 rows)
+</pre> Note that the nearest neighbors are sorted from closest to furthest from the corresponding test point.</li>
+<li>Run KNN for regression: <pre class="example">
+DROP TABLE IF EXISTS knn_result_regression;
+SELECT * FROM madlib.knn(
+                'knn_train_data_reg',  -- Table of training data
+                'data',                -- Col name of training data
+                'id',                  -- Col Name of id in train data
+                'label',               -- Training labels
+                'knn_test_data',       -- Table of test data
+                'data',                -- Col name of test data
+                'id',                  -- Col name of id in test data
+                'knn_result_regression',  -- Output table
+                 3,                    -- Number of nearest neighbors
+                 True,                 -- True to list nearest-neighbors by id
+                'madlib.dist_norm2'    -- Distance function
+                );
+SELECT * FROM knn_result_regression ORDER BY id;
+</pre> Result: <pre class="result">
+ id |  data   |    prediction     | k_nearest_neighbours |                 distance
+----+---------+-------------------+----------------------+------------------------------------------------------
+  1 | {2,1}   |                 1 | {1,2,3}              | {1,1,2.23606797749979}
+  2 | {2,6}   |                 1 | {5,4,3}              | {2.23606797749979,2.82842712474619,3.16227766016838}
+  3 | {15,40} | 0.333333333333333 | {7,6,5}              | {10.295630140987,11.1803398874989,36.6878726556883}
+  4 | {12,1}  |                 1 | {4,5,3}              | {8.54400374531753,8.94427190999916,9.21954445729289}
+  5 | {2,90}  |                 0 | {9,6,7}              | {21.0237960416286,43.8634243989226,59.5399025864168}
+  6 | {50,45} |                 0 | {6,7,8}              | {30.4138126514911,42.3792402008342,44.5533388198909}
+(6 rows)
+</pre></li>
+<li>List nearest neighbors only, without doing classification or regression: <pre class="example">
+DROP TABLE IF EXISTS knn_result_list_neighbors;
+SELECT * FROM madlib.knn(
+                'knn_train_data_reg',  -- Table of training data
+                'data',                -- Col name of training data
+                'id',                  -- Col Name of id in train data
+                 NULL,                 -- NULL training labels means just list neighbors
+                'knn_test_data',       -- Table of test data
+                'data',                -- Col name of test data
+                'id',                  -- Col name of id in test data
+                'knn_result_list_neighbors', -- Output table
+                 3                     -- Number of nearest neighbors
+                );
+SELECT * FROM knn_result_list_neighbors ORDER BY id;
+</pre> Result, with neighbors sorted from closest to furthest: <pre class="result">
+ id |  data   | k_nearest_neighbours | distance
+----+---------+----------------------+---------------------
+  1 | {2,1}   | {1,2,3}              | {1,1,5}
+  2 | {2,6}   | {5,4,3}              | {5,8,10}
+  3 | {15,40} | {7,6,5}              | {106,125,1346}
+  4 | {12,1}  | {4,5,3}              | {73,80,85}
+  5 | {2,90}  | {9,6,7}              | {442,1924,3545}
+  6 | {50,45} | {6,7,8}              | {925,1796,1985}
+(6 rows)
+</pre></li>
+<li>Run KNN for classification using the weighted average: <pre class="example">
+DROP TABLE IF EXISTS knn_result_classification;
+SELECT * FROM madlib.knn(
+                'knn_train_data',      -- Table of training data
+                'data',                -- Col name of training data
+                'id',                  -- Col name of id in train data
+                'label',               -- Training labels
+                'knn_test_data',       -- Table of test data
+                'data',                -- Col name of test data
+                'id',                  -- Col name of id in test data
+                'knn_result_classification',  -- Output table
+                 3,                    -- Number of nearest neighbors
+                 True,                 -- True to list nearest-neighbors by id
+                'madlib.squared_dist_norm2', -- Distance function
+                 True                 -- For weighted average
+                );
+SELECT * FROM knn_result_classification ORDER BY id;
+</pre> <pre class="result">
+ id |  data   | prediction | k_nearest_neighbours | distance
+----+---------+------------+----------------------+---------------------
+  1 | {2,1}   |          1 | {1,2,3}              | {1,1,5}
+  2 | {2,6}   |          1 | {5,4,3}              | {5,8,10}
+  3 | {15,40} |          0 | {7,6,5}              | {106,125,1346}
+  4 | {12,1}  |          1 | {4,5,3}              | {73,80,85}
+  5 | {2,90}  |          0 | {9,6,7}              | {442,1924,3545}
+  6 | {50,45} |          0 | {6,7,8}              | {925,1796,1985}
+(6 rows)
+</pre></li>
+<li>Use kd-tree option. First we build a kd-tree to depth 4 and search half (8) of the 16 leaf nodes (i.e., 2^4 total leaf nodes): <pre class="example">
+DROP TABLE IF EXISTS knn_result_classification_kd;
+SELECT madlib.knn(
+                'knn_train_data',        -- Table of training data
+                'data',                  -- Col name of training data
+                'id',                    -- Col name of id in train data
+                 NULL,                   -- Training labels
+                'knn_test_data',         -- Table of test data
+                'data',                  -- Col name of test data
+                'id',                    -- Col name of id in test data
+                'knn_result_classification_kd',  -- Output table
+                 3,                      -- Number of nearest neighbors
+                 True,                   -- True to list nearest-neighbors by id
+                'madlib.squared_dist_norm2', -- Distance function
+                 False,                  -- For weighted average
+                'kd_tree',               -- Use kd-tree
+                'depth=4, leaf_nodes=8'  -- Kd-tree options
+                 );
+SELECT * FROM knn_result_classification_kd ORDER BY id;
+</pre> <pre class="result">
+ id |  data   | k_nearest_neighbours | distance
+----+---------+----------------------+---------------------
+  1 | {2,1}   | {1,2,3}              | {1,1,5}
+  2 | {2,6}   | {5,4,3}              | {5,8,10}
+  3 | {15,40} | {7,6,5}              | {106,125,1346}
+  4 | {12,1}  | {4,5,3}              | {73,80,85}
+  5 | {2,90}  | {9,6,7}              | {442,1924,3545}
+  6 | {50,45} | {6,7,8}              | {925,1796,1985}
+(6 rows)
+</pre> The result above is the same as brute force. If we search just 1 leaf node, run-time will be faster but accuracy will be lower. This shows up in this very small data set by not being able to find 3 nearest neighbors for all test points: <pre class="example">
+DROP TABLE IF EXISTS knn_result_classification_kd;
+SELECT madlib.knn(
+                'knn_train_data',        -- Table of training data
+                'data',                  -- Col name of training data
+                'id',                    -- Col name of id in train data
+                 NULL,                   -- Training labels
+                'knn_test_data',         -- Table of test data
+                'data',                  -- Col name of test data
+                'id',                    -- Col name of id in test data
+                'knn_result_classification_kd',  -- Output table
+                 3,                      -- Number of nearest neighbors
+                 True,                   -- True to list nearest-neighbors by id
+                'madlib.squared_dist_norm2', -- Distance function
+                 False,                  -- For weighted average
+                'kd_tree',               -- Use kd-tree
+                'depth=4, leaf_nodes=1'  -- Kd-tree options
+                 );
+SELECT * FROM knn_result_classification_kd ORDER BY id;
+</pre> <pre class="result">
+ id |  data   | k_nearest_neighbours | distance
+----+---------+----------------------+---------------------
+  1 | {2,1}   | {1}                  | {1}
+  2 | {2,6}   | {3,2}                | {10,16}
+  3 | {15,40} | {7}                  | {106}
+  5 | {2,90}  | {3,2}                | {7570,7744}
+  6 | {50,45} | {6,8}                | {925,1985}
+(5 rows)
+</pre></li>
+<li>Unsupervised nearest neighbors. Here the training set matches the test set so the nearest neighbor of each point is the point itself, with a zero distance: <pre class="example">
+DROP TABLE IF EXISTS knn_result_classification_unsup;
+SELECT * FROM madlib.knn(
+                'knn_train_data',      -- Table of training data
+                'data',                -- Col name of training data
+                'id',                  -- Col name of id in train data
+                 NULL,                 -- NULL training labels means just list neighbors
+                'knn_train_data',      -- Table of test data (same as training data)
+                'data',                -- Col name of test data
+                'id',                  -- Col name of id in test data
+                'knn_result_classification_unsup',  -- Output table
+                 3,                    -- Number of nearest neighbors
+                 True,                 -- True to list nearest-neighbors by id
+                'madlib.squared_dist_norm2' -- Distance function
+                );
+SELECT * from knn_result_classification_unsup ORDER BY id;
+</pre> Result, with point and neighbors sorted from closest to furthest: <pre class="result">
+ id |  data   | k_nearest_neighbours |   distance
+----+---------+----------------------+---------------
+  1 | {1,1}   | {1,2,3}              | {0,2,8}
+  2 | {2,2}   | {2,3,1}              | {0,2,2}
+  3 | {3,3}   | {3,2,4}              | {0,2,2}
+  4 | {4,4}   | {4,5,3}              | {0,1,2}
+  5 | {4,5}   | {5,4,3}              | {0,1,5}
+  6 | {20,50} | {6,7,5}              | {0,461,2281}
+  7 | {10,31} | {7,6,5}              | {0,461,712}
+  8 | {81,13} | {8,6,7}              | {0,5090,5365}
+  9 | {1,111} | {9,6,7}              | {0,4082,6481}
+(9 rows)
+</pre></li>
+<li>User defined distance function. There are several built-in distance functions, but you can create your own using a UDF if desired. For example, to create a Chebyshev distance function [6], first create the function: <pre class="example">
+CREATE OR REPLACE FUNCTION chebychev_distance (x double precision[], y double precision[])
+  RETURNS double precision
+AS $$
+    from scipy.spatial import distance
+    return distance.chebyshev(x, y)
+$$ LANGUAGE plpythonu;
+</pre> Then pass the function as an argument: <pre class="example">
+DROP TABLE IF EXISTS knn_result_classification_udf;
+SELECT * FROM madlib.knn(
+                'knn_train_data',      -- Table of training data
+                'data',                -- Col name of training data
+                'id',                  -- Col name of id in train data
+                'label',               -- Training labels
+                'knn_test_data',       -- Table of test data
+                'data',                -- Col name of test data
+                'id',                  -- Col name of id in test data
+                'knn_result_classification_udf',  -- Output table
+                 3,                    -- Number of nearest neighbors
+                 True,                 -- True to list nearest-neighbors by id
+                'chebychev_distance'   -- Distance function
+                );
+SELECT * from knn_result_classification_udf ORDER BY id;
+</pre> Result, with point and neighbors sorted from closest to furthest: <pre class="result">
+ id |  data   | prediction | k_nearest_neighbours |  distance
+----+---------+------------+----------------------+------------
+  1 | {2,1}   |          1 | {1,2,3}              | {1,1,2}
+  2 | {2,6}   |          1 | {5,4,3}              | {2,2,3}
+  3 | {15,40} |          0 | {7,6,5}              | {9,10,35}
+  4 | {12,1}  |          1 | {5,4,3}              | {8,8,9}
+  5 | {2,90}  |          0 | {9,6,7}              | {21,40,59}
+  6 | {50,45} |          0 | {6,8,7}              | {30,32,40}
+(6 rows)
+</pre></li>
+</ol>
+<p><a class="anchor" id="background"></a></p><dl class="section user"><dt>Technical Background</dt><dd></dd></dl>
+<p>The training data points are vectors in a multidimensional feature space, each with a class label. The training phase of the algorithm consists only of storing the feature vectors and class labels of the training points.</p>
+<p>In the prediction phase, \(k\) is a user-defined constant, and an unlabeled vector (a test point) is predicted by using the label from the the \(k\) training samples nearest to that test point.</p>
+<p>Since distances between points are used to find the nearest neighbors, the data should be standardized across features. This ensures that all features are given equal weightage in the distance computation.</p>
+<p>An approximation method can be used to speed the prediction phase by building appropriate data structures in the training phase. An example of such a data structure is kd-trees [5]. Using the kd-tree algorithm can improve the execution time of the \(k\)-NN operation, but at expense of sacrificing some accuracy. The kd-tree implementation divides the training dataset into multiple regions that correspond to the leaf nodes of a tree. For example, a tree of depth \(3\) will have a total of \(2^3 = 8\) regions. The algorithm will look for the nearest neighbors in a subset of all regions instead of searching the whole dataset. For a given test point, the first (home) region is found by traversing the tree and finding its associated node. If the user requests additional leaf nodes to be searched, we look at the distance between the point and the centroids of other regions and expand the search to the specified number of closest regions.</p>
+<p>It's important to note that the nodes that each level of the kd-tree search over a single feature and the features are explored in the same order as that in the data.</p>
+<p>The kd-tree accuracy might suffer on datasets with a high number of features (dimensions). For example, let's say we are using a dataset with 20 features and kd-tree depth of only 3. This means the kd-tree is constructed based on the first 3 features. Therefore, it is possible to miss nearest neighbors that are closer in those 17 dimensions because they got assigned to a further region (the distance computation would still uses all 20 features).</p>
+<p><a class="anchor" id="literature"></a></p><dl class="section user"><dt>Literature</dt><dd></dd></dl>
+<p><a class="anchor" id="knn-lit-1"></a>[1] Wikipedia, k-nearest neighbors algorithm, <a href="https://en.wikipedia.org/wiki/K-nearest_neighbors_algorithm">https://en.wikipedia.org/wiki/K-nearest_neighbors_algorithm</a></p>
+<p><a class="anchor" id="knn-lit-2"></a>[2] N. S. Altman: An Introduction to Kernel and Nearest-Neighbor Nonparametric Regression <a href="http://www.stat.washington.edu/courses/stat527/s13/readings/Altman_AmStat_1992.pdf">http://www.stat.washington.edu/courses/stat527/s13/readings/Altman_AmStat_1992.pdf</a></p>
+<p><a class="anchor" id="knn-lit-3"></a>[3] Gongde Guo1, Hui Wang, David Bell, Yaxin Bi, Kieran Greer: KNN Model-Based Approach in Classification, <a href="https://ai2-s2-pdfs.s3.amazonaws.com/a7e2/814ec5db800d2f8c4313fd436e9cf8273821.pdf">https://ai2-s2-pdfs.s3.amazonaws.com/a7e2/814ec5db800d2f8c4313fd436e9cf8273821.pdf</a></p>
+<p><a class="anchor" id="knn-lit-4"></a>[4] Shepard, Donald (1968). "A two-dimensional interpolation function for
+irregularly-spaced data". Proceedings of the 1968 ACM National Conference. pp. 517–524.</p>
+<p><a class="anchor" id="knn-lit-5"></a>[5] Bentley, J. L. (1975). "Multidimensional binary search trees used for
+associative searching". Communications of the ACM. 18 (9): 509. doi:10.1145/361002.361007.</p>
+<p><a class="anchor" id="knn-lit-6"></a>[6] <a href="https://en.wikipedia.org/wiki/Chebyshev_distance">https://en.wikipedia.org/wiki/Chebyshev_distance</a></p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__lda.html b/docs/rc/group__grp__lda.html
new file mode 100644
index 0000000..3c7129c
--- /dev/null
+++ b/docs/rc/group__grp__lda.html
@@ -0,0 +1,806 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Latent Dirichlet Allocation</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__lda.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Latent Dirichlet Allocation<div class="ingroups"><a class="el" href="group__grp__unsupervised.html">Unsupervised Learning</a> &raquo; <a class="el" href="group__grp__topic__modelling.html">Topic Modelling</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li>
+<a href="#background">Background</a> </li>
+<li>
+<a href="#train">Training Function</a> </li>
+<li>
+<a href="#predict">Prediction Function</a> </li>
+<li>
+<a href="#perplexity">Perplexity</a> </li>
+<li>
+<a href="#helper">Helper Functions</a> </li>
+<li>
+<a href="#examples">Examples</a> </li>
+<li>
+<a href="#literature">Literature</a> </li>
+<li>
+<a href="#related">Related Topics</a></li>
+<li>
+</li>
+</ul>
+</div><p>Latent Dirichlet Allocation (LDA) is a generative probabilistic model for natural texts. It is used in problems such as automated topic discovery, collaborative filtering, and document classification.</p>
+<p>In addition to an implementation of LDA, this MADlib module also provides a number of additional helper functions to interpret results of the LDA output.</p>
+<dl class="section note"><dt>Note</dt><dd>Topic modeling is often used as part of a larger text processing pipeline, which may include operations such as term frequency, stemming and stop word removal. You can use the function <a href="group__grp__text__utilities.html">Term Frequency</a> to generate the required vocabulary format from raw documents for the LDA training function. See the examples later on this page for more details.</dd></dl>
+<p><a class="anchor" id="background"></a></p><dl class="section user"><dt>Background</dt><dd></dd></dl>
+<p>The LDA model posits that each document is associated with a mixture of various topics (e.g., a document is related to Topic 1 with probability 0.7, and Topic 2 with probability 0.3), and that each word in the document is attributable to one of the document's topics. There is a (symmetric) Dirichlet prior with parameter \( \alpha \) on each document's topic mixture. In addition, there is another (symmetric) Dirichlet prior with parameter \( \beta \) on the distribution of words for each topic.</p>
+<p>The following generative process then defines a distribution over a corpus of documents:</p>
+<ul>
+<li>Sample for each topic \( i \), a per-topic word distribution \( \phi_i \) from the Dirichlet ( \(\beta\)) prior.</li>
+<li>For each document:<ul>
+<li>Sample a document length N from a suitable distribution, say, Poisson.</li>
+<li>Sample a topic mixture \( \theta \) for the document from the Dirichlet ( \(\alpha\)) distribution.</li>
+<li>For each of the N words:<ul>
+<li>Sample a topic \( z_n \) from the multinomial topic distribution \( \theta \).</li>
+<li>Sample a word \( w_n \) from the multinomial word distribution \( \phi_{z_n} \) associated with topic \( z_n \).</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<p>In practice, only the words in each document are observable. The topic mixture of each document and the topic for each word in each document are latent unobservable variables that need to be inferred from the observables, and this is referred to as the inference problem for LDA. Exact inference is intractable, but several approximate inference algorithms for LDA have been developed. The simple and effective Gibbs sampling algorithm described in Griffiths and Steyvers [2] appears to be the current algorithm of choice.</p>
+<p>This implementation provides a parallel and scalable in-database solution for LDA based on Gibbs sampling. It takes advantage of the shared-nothing MPP architecture and is a different implementation than one would find for MPI or map/reduce.</p>
+<p><a class="anchor" id="train"></a></p><dl class="section user"><dt>Training Function</dt><dd>The LDA training function has the following syntax: <pre class="syntax">
+lda_train( data_table,
+           model_table,
+           output_data_table,
+           voc_size,
+           topic_num,
+           iter_num,
+           alpha,
+           beta,
+           evaluate_every,
+           perplexity_tol
+         )
+</pre> <b>Arguments</b> <dl class="arglist">
+<dt>data_table </dt>
+<dd><p class="startdd">TEXT. Name of the table storing the training dataset. Each row is in the form <code>&lt;docid, wordid, count&gt;</code> where <code>docid</code>, <code>wordid</code>, and <code>count</code> are non-negative integers. The <code>docid</code> column refers to the document ID, the <code>wordid</code> column is the word ID (the index of a word in the vocabulary), and <code>count</code> is the number of occurrences of the word in the document. Please note:</p>
+<ul>
+<li><code>wordid</code> must be contiguous integers going from from 0 to <code>voc_size</code> &minus; <code>1</code>.</li>
+<li>column names for <code>docid</code>, <code>wordid</code>, and <code>count</code> are currently fixed, so you must use these exact names in the data_table.</li>
+</ul>
+<p>The function <a href="group__grp__text__utilities.html">Term Frequency</a> can be used to generate vocabulary in the required format from raw documents. </p>
+<p class="enddd"></p>
+</dd>
+<dt>model_table </dt>
+<dd>TEXT. This is an output table generated by LDA which contains the learned model. It has one row with the following columns: <table class="output">
+<tr>
+<th>voc_size </th><td>INTEGER. Size of the vocabulary. As mentioned above for the input table, <code>wordid</code> consists of contiguous integers going from 0 to <code>voc_size</code> &minus; <code>1</code>.   </td></tr>
+<tr>
+<th>topic_num </th><td>INTEGER. Number of topics.  </td></tr>
+<tr>
+<th>alpha </th><td>DOUBLE PRECISION. Dirichlet prior for the per-document topic multinomial.  </td></tr>
+<tr>
+<th>beta </th><td>DOUBLE PRECISION. Dirichlet prior for the per-topic word multinomial.  </td></tr>
+<tr>
+<th>model </th><td>BIGINT[]. The encoded model description (not human readable).  </td></tr>
+<tr>
+<th>num_iterations </th><td>INTEGER. Number of iterations that training ran for, which may be less than the maximum value specified in the parameter 'iter_num' if the perplexity tolerance was reached.  </td></tr>
+<tr>
+<th>perplexity </th><td>DOUBLE PRECISION[]. Array of perplexity values as per the 'evaluate_every' parameter. For example, if 'evaluate_every=5' this would be an array of perplexity values for every 5th iteration, plus the last iteration.  </td></tr>
+<tr>
+<th>perplexity_iters </th><td>INTEGER[]. Array indicating the iterations for which perplexity is calculated, as derived from the parameters 'iter_num' and 'evaluate_every'. For example, if 'iter_num=5' and 'evaluate_every=2', then 'perplexity_iters' value would be {2,4,5} indicating that perplexity is computed at iterations 2, 4 and 5 (at the end), unless of course it terminated earlier due to 'perplexity_tol'. If 'iter_num=5' and 'evaluate_every=1', then 'perplexity_iters' value would be {1,2,3,4,5} indicating that perplexity is computed at every iteration, again assuming it ran the full number of iterations.  </td></tr>
+</table>
+</dd>
+<dt>output_data_table </dt>
+<dd>TEXT. The name of the table generated by LDA that stores the output data. It has the following columns: <table class="output">
+<tr>
+<th>docid </th><td>INTEGER. Document id from input 'data_table'.  </td></tr>
+<tr>
+<th>wordcount </th><td>INTEGER. Count of number of words in the document, including repeats. For example, if a word appears 3 times in the document, it is counted 3 times.  </td></tr>
+<tr>
+<th>words </th><td>INTEGER[]. Array of <code>wordid</code> in the document, not including repeats. For example, if a word appears 3 times in the document, it appears only once in the <code>words</code> array.  </td></tr>
+<tr>
+<th>counts </th><td>INTEGER[]. Frequency of occurance of a word in the document, indexed the same as the <code>words</code> array above. For example, if the 2nd element of the <code>counts</code> array is 4, it means that the word in the 2nd element of the <code>words</code> array occurs 4 times in the document.  </td></tr>
+<tr>
+<th>topic_count </th><td>INTEGER[]. Array of the count of words in the document that correspond to each topic. This array is of length <code>topic_num</code>. Topic ids are continuous integers going from 0 to <code>topic_num</code> &minus; <code>1</code>.  </td></tr>
+<tr>
+<th>topic_assignment </th><td>INTEGER[]. Array indicating which topic each word in the document corresponds to. This array is of length <code>wordcount</code>. Words that are repeated <code>n</code> times in the document will show up consecutively <code>n</code> times in this array.  </td></tr>
+</table>
+</dd>
+<dt>voc_size </dt>
+<dd>INTEGER. Size of the vocabulary. As mentioned above for the input 'data_table', <code>wordid</code> consists of continuous integers going from 0 to <code>voc_size</code> &minus; <code>1</code>.  </dd>
+<dt>topic_num </dt>
+<dd>INTEGER. Desired number of topics. </dd>
+<dt>iter_num </dt>
+<dd>INTEGER. Maximum number of iterations. If a 'perplexity_tol' is set, LDA may train for less than the maximum number of iterations if the tolerance is reached. </dd>
+<dt>alpha </dt>
+<dd>DOUBLE PRECISION. Dirichlet prior for the per-document topic multinomial (e.g., 50/topic_num is a reasonable value to start with as per Griffiths and Steyvers [2]). </dd>
+<dt>beta </dt>
+<dd>DOUBLE PRECISION. Dirichlet prior for the per-topic word multinomial (e.g., 0.01 is a reasonable value to start with). </dd>
+<dt>evaluate_every (optional) </dt>
+<dd>INTEGER, default: 0. How often to evaluate perplexity. Set it to 0 or a negative number to not evaluate perplexity in training at all. Evaluating perplexity can help you check convergence during the training process, but it will also increase total training time. For example, evaluating perplexity in every iteration might increase training time up to two-fold. </dd>
+<dt>perplexity_tol (optional) </dt>
+<dd>DOUBLE PRECISION, default: 0.1. Perplexity tolerance to stop iteration. Only used when the parameter 'evaluate_every' is greater than 0. </dd>
+</dl>
+</dd></dl>
+<p><a class="anchor" id="predict"></a></p><dl class="section user"><dt>Prediction Function</dt><dd></dd></dl>
+<p>Prediction involves labelling test documents using a learned LDA model: </p><pre class="syntax">
+lda_predict( data_table,
+             model_table,
+             output_predict_table
+           );
+</pre><p> <b>Arguments</b> </p><dl class="arglist">
+<dt>data_table </dt>
+<dd>TEXT. Name of the table storing the test dataset (new document to be labeled).  </dd>
+<dt>model_table </dt>
+<dd>TEXT. The model table generated by the training process.  </dd>
+<dt>output_predict_table </dt>
+<dd>TEXT. The prediction output table. Each row in the table stores the topic distribution and the topic assignments for a document in the dataset. This table has the exact same columns and interpretation as the 'output_data_table' from the training function above.  </dd>
+</dl>
+<p><a class="anchor" id="perplexity"></a></p><dl class="section user"><dt>Perplexity</dt><dd>Perplexity describes how well the model fits the data by computing word likelihoods averaged over the documents. This function returns a single perplexity value. <pre class="syntax">
+lda_get_perplexity( model_table,
+                    output_data_table
+                  );
+</pre> <b>Arguments</b> <dl class="arglist">
+<dt>model_table </dt>
+<dd>TEXT. The model table generated by the training process.  </dd>
+<dt>output_data_table </dt>
+<dd>TEXT. Output table generated by the training or predict functions, containing the topic assignments by word.  </dd>
+</dl>
+</dd></dl>
+<p><a class="anchor" id="helper"></a></p><dl class="section user"><dt>Helper Functions</dt><dd></dd></dl>
+<p>The helper functions can help to interpret the output from LDA training and LDA prediction.</p>
+<p><b>Topic description by top-k words with highest probability</b></p>
+<p>Applies to LDA training only.</p>
+<pre class="syntax">
+lda_get_topic_desc( model_table,
+                    vocab_table,
+                    output_table,
+                    top_k
+                  )
+</pre><p> <b>Arguments</b> </p><dl class="arglist">
+<dt>model_table </dt>
+<dd>TEXT. The model table generated by the training process.  </dd>
+<dt>vocab_table </dt>
+<dd>TEXT. The vocabulary table in the form &lt;wordid, word&gt;. Reminder that this table can be created using the <code>term_frequency</code> function (<a class="el" href="group__grp__text__utilities.html">Term Frequency</a>) with the parameter <code>compute_vocab</code> set to TRUE.  </dd>
+<dt>output_table </dt>
+<dd>TEXT. The output table with per-topic description generated by this helper function. It has the following columns: <table class="output">
+<tr>
+<th>topicid </th><td>INTEGER. Topic id.  </td></tr>
+<tr>
+<th>wordid </th><td>INTEGER. Word id.  </td></tr>
+<tr>
+<th>prob </th><td>DOUBLE PRECISION. Probability that this topic will generate the word.  </td></tr>
+<tr>
+<th>word </th><td>TEXT. Word in text form.  </td></tr>
+</table>
+</dd>
+<dt>top_k </dt>
+<dd>TEXT. The desired number of top words to show for each topic.  </dd>
+</dl>
+<p><b>Per-word topic counts</b></p>
+<p>Applies to LDA training only.</p>
+<pre class="syntax">
+lda_get_word_topic_count( model_table,
+                          output_table
+                        )
+</pre><p> <b>Arguments</b> </p><dl class="arglist">
+<dt>model_table </dt>
+<dd>TEXT. The model table generated by the training process.  </dd>
+<dt>output_table </dt>
+<dd>TEXT. The output table with per-word topic counts generated by this helper function. It has the following columns: <table class="output">
+<tr>
+<th>wordid </th><td>INTEGER. Word id.  </td></tr>
+<tr>
+<th>topic_count </th><td>INTEGER[]. Count of word association with each topic, i.e., shows how many times a given word is assigned to a topic. Array is of length number of topics.  </td></tr>
+</table>
+</dd>
+</dl>
+<p><b>Per-topic word counts</b></p>
+<p>Applies to LDA training only.</p>
+<pre class="syntax">
+lda_get_topic_word_count( model_table,
+                          output_table
+                        )
+</pre><p> <b>Arguments</b> </p><dl class="arglist">
+<dt>model_table </dt>
+<dd>TEXT. The model table generated by the training process.  </dd>
+<dt>output_table </dt>
+<dd>TEXT. The output table with per-topic word counts generated by this helper function. It has the following columns: <table class="output">
+<tr>
+<th>topicid </th><td>INTEGER. Topic id.  </td></tr>
+<tr>
+<th>word_count </th><td>INTEGER[]. Array showing which words are associated with the topic by frequency. Array is of length number of words.  </td></tr>
+</table>
+</dd>
+</dl>
+<p><b>Per-document word to topic mapping</b></p>
+<p>Applies to both LDA training and LDA prediction.</p>
+<pre class="syntax">
+lda_get_word_topic_mapping( output_data_table,  -- From training or prediction
+                            output_table
+                          )
+</pre><p> <b>Arguments</b> </p><dl class="arglist">
+<dt>output_data_table </dt>
+<dd>TEXT. The output data table generated by either LDA training or LDA prediction.  </dd>
+<dt>output_table </dt>
+<dd>TEXT. The output table with word to topic mappings generated by this helper function. It has the following columns: <table class="output">
+<tr>
+<th>docid </th><td>INTEGER. Document id.  </td></tr>
+<tr>
+<th>wordid </th><td>INTEGER. Word id.  </td></tr>
+<tr>
+<th>topicid </th><td>INTEGER. Topic id.  </td></tr>
+</table>
+</dd>
+</dl>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<ol type="1">
+<li>Prepare a training dataset for LDA. The examples below are small strings extracted from various Wikipedia documents: <pre class="example">
+DROP TABLE IF EXISTS documents;
+CREATE TABLE documents(docid INT4, contents TEXT);
+INSERT INTO documents VALUES
+(0, 'Statistical topic models are a class of Bayesian latent variable models, originally developed for analyzing the semantic content of large document corpora.'),
+(1, 'By the late 1960s, the balance between pitching and hitting had swung in favor of the pitchers. In 1968 Carl Yastrzemski won the American League batting title with an average of just .301, the lowest in history.'),
+(2, 'Machine learning is closely related to and often overlaps with computational statistics; a discipline that also specializes in prediction-making. It has strong ties to mathematical optimization, which deliver methods, theory and application domains to the field.'),
+(3, 'California''s diverse geography ranges from the Sierra Nevada in the east to the Pacific Coast in the west, from the Redwood–Douglas fir forests of the northwest, to the Mojave Desert areas in the southeast. The center of the state is dominated by the Central Valley, a major agricultural area.');
+</pre> You can apply stemming, stop word removal and tokenization at this point in order to prepare the documents for text processing. Depending upon your database version, various tools are available. Databases based on more recent versions of PostgreSQL may do something like: <pre class="example">
+SELECT tsvector_to_array(to_tsvector('english',contents)) from documents;
+</pre> <pre class="result">
+                        tsvector_to_array
++-----------------------------------------------------------------------
+ {analyz,bayesian,class,content,corpora,develop,document,larg,...}
+ {1960s,1968,301,american,averag,balanc,bat,carl,favor,histori,...}
+ {also,applic,close,comput,deliv,disciplin,domain,field,learn,...}
+ {agricultur,area,california,center,central,coast,desert,divers,...}
+(4 rows)
+</pre> In this example, we assume a database based on an older version of PostgreSQL and just perform basic punctuation removal and tokenization. The array of words is added as a new column to the documents table: <pre class="example">
+ALTER TABLE documents ADD COLUMN words TEXT[];
+UPDATE documents SET words =
+    regexp_split_to_array(lower(
+    regexp_replace(contents, E'[,.;\']','', 'g')
+    ), E'[\\s+]');
+SELECT * FROM documents ORDER BY docid;
+</pre> <pre class="result">
+-[ RECORD 1 ]---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+docid    | 0
+contents | Statistical topic models are a class of Bayesian latent variable models, originally developed for analyzing the semantic content of large document corpora.
+words    | {statistical,topic,models,are,a,class,of,bayesian,latent,variable,models,originally,developed,for,analyzing,the,semantic,content,of,large,document,corpora}
+-[ RECORD 2 ]---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+docid    | 1
+contents | By the late 1960s, the balance between pitching and hitting had swung in favor of the pitchers. In 1968 Carl Yastrzemski won the American League batting title with an average of just .301, the lowest in history.
+words    | {by,the,late,1960s,the,balance,between,pitching,and,hitting,had,swung,in,favor,of,the,pitchers,in,1968,carl,yastrzemski,won,the,american,league,batting,title,with,an,average,of,just,301,the,lowest,in,history}
+-[ RECORD 3 ]---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+docid    | 2
+contents | Machine learning is closely related to and often overlaps with computational statistics; a discipline that also specializes in prediction-making. It has strong ties to mathematical optimization, which deliver methods, theory and application domains to the field.
+words    | {machine,learning,is,closely,related,to,and,often,overlaps,with,computational,statistics,a,discipline,that,also,specializes,in,prediction-making,it,has,strong,ties,to,mathematical,optimization,which,deliver,methods,theory,and,application,domains,to,the,field}
+-[ RECORD 4 ]---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+docid    | 3
+contents | California's diverse geography ranges from the Sierra Nevada in the east to the Pacific Coast in the west, from the Redwood–Douglas fir forests of the northwest, to the Mojave Desert areas in the southeast. The center of the state is dominated by the Central Valley, a major agricultural area.
+words    | {californias,diverse,geography,ranges,from,the,sierra,nevada,in,the,east,to,the,pacific,coast,in,the,west,from,the,redwood–douglas,fir,forests,of,the,northwest,to,the,mojave,desert,areas,in,the,southeast,the,center,of,the,state,is,dominated,by,the,central,valley,a,major,agricultural,area}
+</pre></li>
+<li>Build a word count table by extracting the words and building a histogram for each document using the <code>term_frequency</code> function (<a class="el" href="group__grp__text__utilities.html">Term Frequency</a>). <pre class="example">
+DROP TABLE IF EXISTS documents_tf, documents_tf_vocabulary;
+SELECT madlib.term_frequency('documents',    -- input table
+                             'docid',        -- document id column
+                             'words',        -- vector of words in document
+                             'documents_tf', -- output documents table with term frequency
+                             TRUE);          -- TRUE to created vocabulary table
+SELECT * FROM documents_tf ORDER BY docid LIMIT 20;
+</pre> <pre class="result">
+ docid | wordid | count
+-------+--------+-------
+     0 |     71 |     1
+     0 |     90 |     1
+     0 |     56 |     1
+     0 |     68 |     2
+     0 |     85 |     1
+     0 |     28 |     1
+     0 |     35 |     1
+     0 |     54 |     1
+     0 |     64 |     2
+     0 |      8 |     1
+     0 |     29 |     1
+     0 |     80 |     1
+     0 |     24 |     1
+     0 |     11 |     1
+     0 |     17 |     1
+     0 |     32 |     1
+     0 |      3 |     1
+     0 |     42 |     1
+     0 |     97 |     1
+     0 |     95 |     1
+(20 rows)
+</pre> Here is the associated vocabulary table. Note that wordid starts at 0: <pre class="example">
+SELECT * FROM documents_tf_vocabulary ORDER BY wordid LIMIT 20;
+</pre> <pre class="result">
+ wordid |     word
+--------+--------------
+      0 | 1960s
+      1 | 1968
+      2 | 301
+      3 | a
+      4 | agricultural
+      5 | also
+      6 | american
+      7 | an
+      8 | analyzing
+      9 | and
+     10 | application
+     11 | are
+     12 | area
+     13 | areas
+     14 | average
+     15 | balance
+     16 | batting
+     17 | bayesian
+     18 | between
+     19 | by
+(20 rows)
+</pre> The total number of words in the vocabulary across all documents is: <pre class="example">
+SELECT COUNT(*) FROM documents_tf_vocabulary;
+</pre> <pre class="result">
+ count
++------
+   103
+(1 row)
+</pre></li>
+<li>Train LDA model. For Dirichlet priors we use initial rule-of-thumb values of 50/(number of topics) for alpha and 0.01 for beta. Reminder that column names for docid, wordid, and count are currently fixed, so you must use these exact names in the input table. After a successful run of the LDA training function two tables are generated, one for storing the learned model and the other for storing the output data table. <pre class="example">
+DROP TABLE IF EXISTS lda_model, lda_output_data;
+SELECT madlib.lda_train( 'documents_tf',     -- documents table in the form of term frequency
+                         'lda_model',        -- model table created by LDA training (not human readable)
+                         'lda_output_data',  -- readable output data table
+                         103,                -- vocabulary size
+                         5,                  -- number of topics
+                         10,                 -- number of iterations
+                         5,                  -- Dirichlet prior for the per-doc topic multinomial (alpha)
+                         0.01                -- Dirichlet prior for the per-topic word multinomial (beta)
+                       );
+SELECT * FROM lda_output_data ORDER BY docid;
+</pre> <pre class="result">
+-[ RECORD 1 ]----+------------------------------------------------------------------------------------------------------
+docid            | 0
+wordcount        | 22
+words            | {24,17,11,95,90,85,68,54,42,35,28,8,3,97,80,71,64,56,32,29}
+counts           | {1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,2,1,1,1}
+topic_count      | {4,2,4,3,9}
+topic_assignment | {4,2,4,1,2,1,2,2,0,3,4,4,3,0,0,4,0,4,4,4,3,4}
+-[ RECORD 2 ]----+------------------------------------------------------------------------------------------------------
+docid            | 1
+wordcount        | 37
+words            | {1,50,49,46,19,16,14,9,7,0,90,68,57,102,101,100,93,88,75,74,59,55,53,48,39,21,18,15,6,2}
+counts           | {1,3,1,1,1,1,1,1,1,1,5,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}
+topic_count      | {2,5,14,9,7}
+topic_assignment | {0,3,3,3,1,4,2,2,2,1,3,1,2,2,2,2,2,2,2,1,4,3,2,0,4,2,4,2,3,4,3,1,3,4,3,2,4}
+-[ RECORD 3 ]----+------------------------------------------------------------------------------------------------------
+docid            | 2
+wordcount        | 36
+words            | {10,27,33,40,47,51,58,62,63,69,72,83,100,99,94,92,91,90,89,87,86,79,76,70,60,52,50,36,30,25,9,5,3}
+counts           | {1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1}
+topic_count      | {15,10,1,7,3}
+topic_assignment | {0,3,1,3,0,0,3,3,1,0,1,0,0,0,0,1,1,0,4,2,0,4,1,0,1,0,0,4,3,3,3,0,1,1,1,0}
+-[ RECORD 4 ]----+------------------------------------------------------------------------------------------------------
+docid            | 3
+wordcount        | 49
+words            | {77,78,81,82,67,65,51,45,44,43,34,26,13,98,96,94,90,84,73,68,66,61,50,41,38,37,31,23,22,20,19,12,4,3}
+counts           | {1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,2,11,1,1,2,1,1,3,1,1,1,1,1,1,1,1,1,1,1}
+topic_count      | {5,5,26,5,8}
+topic_assignment | {4,4,4,0,2,0,0,2,4,4,2,2,2,1,2,4,1,0,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,4,3,3,3,2,3,2,3,2,1,4,2,2,1,0}
+</pre> Review summary table: <pre class="example">
+SELECT voc_size, topic_num, alpha, beta, num_iterations, perplexity, perplexity_iters from lda_model;
+</pre> <pre class="result">
+-[ RECORD 1 ]----+-----
+voc_size         | 103
+topic_num        | 5
+alpha            | 5
+beta             | 0.01
+num_iterations   | 10
+perplexity       |
+perplexity_iters |
+</pre></li>
+<li>Review learned model using helper functions. First, we get topic description by top-k words. These are the k words with the highest probability for the topic. Note that if there are ties in probability, more than k words may actually be reported for each topic. Also note that topicid starts at 0: <pre class="example">
+DROP TABLE IF EXISTS helper_output_table;
+SELECT madlib.lda_get_topic_desc( 'lda_model',                -- LDA model generated in training
+                                  'documents_tf_vocabulary',  -- vocabulary table that maps wordid to word
+                                  'helper_output_table',      -- output table for per-topic descriptions
+                                  5);                         -- k: number of top words for each topic
+SELECT * FROM helper_output_table ORDER BY topicid, prob DESC LIMIT 40;
+</pre> <pre class="result">
+ topicid | wordid |        prob        |       word
+---------+--------+--------------------+-------------------
+       0 |      3 |  0.111357750647429 | a
+       0 |     51 |  0.074361820199778 | is
+       0 |     94 |  0.074361820199778 | to
+       0 |     70 | 0.0373658897521273 | optimization
+       0 |     82 | 0.0373658897521273 | southeast
+       0 |     60 | 0.0373658897521273 | machine
+       0 |     71 | 0.0373658897521273 | originally
+       0 |     69 | 0.0373658897521273 | often
+       0 |     99 | 0.0373658897521273 | which
+       0 |     83 | 0.0373658897521273 | specializes
+       0 |      1 | 0.0373658897521273 | 1968
+       0 |     97 | 0.0373658897521273 | variable
+       0 |     25 | 0.0373658897521273 | closely
+       0 |     93 | 0.0373658897521273 | title
+       0 |     47 | 0.0373658897521273 | has
+       0 |     65 | 0.0373658897521273 | mojave
+       0 |     79 | 0.0373658897521273 | related
+       0 |     89 | 0.0373658897521273 | that
+       0 |     10 | 0.0373658897521273 | application
+       0 |    100 | 0.0373658897521273 | with
+       0 |     92 | 0.0373658897521273 | ties
+       0 |     54 | 0.0373658897521273 | large
+       1 |     94 |  0.130699088145897 | to
+       1 |      9 |  0.130699088145897 | and
+       1 |      5 | 0.0438558402084238 | also
+       1 |     57 | 0.0438558402084238 | league
+       1 |     49 | 0.0438558402084238 | hitting
+       1 |     13 | 0.0438558402084238 | areas
+       1 |     39 | 0.0438558402084238 | favor
+       1 |     85 | 0.0438558402084238 | statistical
+       1 |     95 | 0.0438558402084238 | topic
+       1 |      0 | 0.0438558402084238 | 1960s
+       1 |     76 | 0.0438558402084238 | prediction-making
+       1 |     86 | 0.0438558402084238 | statistics
+       1 |     84 | 0.0438558402084238 | state
+       1 |     72 | 0.0438558402084238 | overlaps
+       1 |     22 | 0.0438558402084238 | center
+       1 |      4 | 0.0438558402084238 | agricultural
+       1 |     63 | 0.0438558402084238 | methods
+       1 |     33 | 0.0438558402084238 | discipline
+(40 rows)
+</pre> Get the per-word topic counts. This mapping shows how many times a given word is assigned to a topic. E.g., wordid 3 is assigned to topicid 0 three times: <pre class="example">
+DROP TABLE IF EXISTS helper_output_table;
+SELECT madlib.lda_get_word_topic_count( 'lda_model',            -- LDA model generated in training
+                                        'helper_output_table'); -- output table for per-word topic counts
+SELECT * FROM helper_output_table ORDER BY wordid LIMIT 20;
+</pre> <pre class="result">
+ wordid | topic_count
+--------+-------------
+      0 | {0,1,0,0,0}
+      1 | {1,0,0,0,0}
+      2 | {1,0,0,0,0}
+      3 | {3,0,0,0,0}
+      4 | {0,0,0,0,1}
+      5 | {0,1,0,0,0}
+      6 | {1,0,0,0,0}
+      7 | {0,0,0,1,0}
+      8 | {0,1,0,0,0}
+      9 | {0,0,0,3,0}
+     10 | {1,0,0,0,0}
+     11 | {1,0,0,0,0}
+     12 | {0,0,1,0,0}
+     13 | {0,0,0,0,1}
+     14 | {0,1,0,0,0}
+     15 | {0,0,0,0,1}
+     16 | {0,1,0,0,0}
+     17 | {0,0,1,0,0}
+     18 | {1,0,0,0,0}
+     19 | {2,0,0,0,0}
+(20 rows)
+</pre> Get the per-topic word counts. This mapping shows which words are associated with each topic by frequency: <pre class="example">
+DROP TABLE IF EXISTS topic_word_count;
+SELECT madlib.lda_get_topic_word_count( 'lda_model',
+                                        'topic_word_count');
+SELECT * FROM topic_word_count ORDER BY topicid;
+</pre> <pre class="result">
+-[ RECORD 1 ]----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+topicid    | 1
+word_count | {1,1,0,0,0,0,0,1,1,0,1,0,0,0,0,1,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,1,0,0,1,1,0,0,0,0,0,0,0,1,0}
+-[ RECORD 2 ]----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+topicid    | 2
+word_count | {0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,1,1,2,0,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,4,0,0,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,5,0,1,0,0,1,0,0,0}
+-[ RECORD 3 ]----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+topicid    | 3
+word_count | {0,0,0,0,0,0,0,0,0,3,0,1,0,1,1,0,0,0,0,2,0,0,0,0,1,0,0,1,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,2,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0}
+-[ RECORD 4 ]----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+topicid    | 4
+word_count | {0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,0,1,0,0,0,0,0,0,1,0,7,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,0,1,0,0,0,0,1,1,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1}
+-[ RECORD 5 ]----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+topicid    | 5
+word_count | {0,0,0,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,18,0,0,0,0,0,0,0,1,0,2,0,0}
+</pre> Get the per-document word to topic mapping: <pre class="example">
+DROP TABLE IF EXISTS helper_output_table;
+SELECT madlib.lda_get_word_topic_mapping('lda_output_data',  -- Output table from training
+                                         'helper_output_table');
+SELECT * FROM helper_output_table ORDER BY docid LIMIT 40;
+</pre> <pre class="result">
+ docid | wordid | topicid
+-------+--------+---------
+     0 |     56 |       1
+     0 |     54 |       1
+     0 |     42 |       2
+     0 |     35 |       1
+     0 |     32 |       1
+     0 |     29 |       3
+     0 |     28 |       4
+     0 |     24 |       3
+     0 |     17 |       2
+     0 |     11 |       0
+     0 |      8 |       1
+     0 |      3 |       0
+     0 |     97 |       0
+     0 |     95 |       3
+     0 |     90 |       0
+     0 |     85 |       0
+     0 |     80 |       2
+     0 |     71 |       2
+     0 |     68 |       0
+     0 |     64 |       1
+     1 |      2 |       0
+     1 |      1 |       0
+     1 |      0 |       1
+     1 |    102 |       4
+     1 |    101 |       2
+     1 |    100 |       1
+     1 |     93 |       3
+     1 |     90 |       2
+     1 |     90 |       0
+     1 |     88 |       1
+     1 |     75 |       1
+     1 |     74 |       3
+     1 |     68 |       0
+     1 |     59 |       2
+     1 |     57 |       4
+     1 |     55 |       3
+     1 |     53 |       3
+     1 |     50 |       0
+     1 |     49 |       1
+     1 |     48 |       0
+(40 rows)
+</pre></li>
+<li>Use a learned LDA model for prediction (that is, to label new documents). In this example, we use the same input table as we used to train, just for demonstration purpose. Normally, the test document is a new one that we want to predict on. <pre class="example">
+DROP TABLE IF EXISTS outdata_predict;
+SELECT madlib.lda_predict( 'documents_tf',          -- Document to predict
+                           'lda_model',             -- LDA model from training
+                           'outdata_predict'        -- Output table for predict results
+                         );
+SELECT * FROM outdata_predict;
+</pre> <pre class="result">
+-[ RECORD 1 ]----+------------------------------------------------------------------------------------------------------
+docid            | 0
+wordcount        | 22
+words            | {17,11,28,29,95,3,32,97,85,35,54,80,64,90,8,24,42,71,56,68}
+counts           | {1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,2}
+topic_count      | {1,3,16,1,1}
+topic_assignment | {2,2,1,0,2,2,2,3,2,2,2,2,2,2,4,2,2,2,2,2,1,1}
+-[ RECORD 2 ]----+------------------------------------------------------------------------------------------------------
+docid            | 1
+wordcount        | 37
+words            | {90,101,2,88,6,7,75,46,74,68,39,9,48,49,102,50,59,53,55,57,100,14,15,16,18,19,93,21,0,1}
+counts           | {5,1,1,1,1,1,1,1,1,2,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1}
+topic_count      | {0,1,11,6,19}
+topic_assignment | {4,4,4,4,4,4,4,4,4,2,4,2,2,1,3,2,2,4,4,4,3,3,3,4,3,3,2,4,4,2,2,4,2,4,2,4,2}
+-[ RECORD 3 ]----+------------------------------------------------------------------------------------------------------
+docid            | 2
+wordcount        | 36
+words            | {90,3,5,9,10,25,27,30,33,36,40,47,50,51,52,58,60,62,63,69,70,72,76,79,83,86,87,89,91,92,94,99,100}
+counts           | {1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1}
+topic_count      | {26,3,5,1,1}
+topic_assignment | {4,0,0,2,2,0,0,0,0,2,0,0,0,3,0,0,0,0,0,0,0,0,0,2,0,2,0,0,0,0,0,1,1,1,0,0}
+-[ RECORD 4 ]----+------------------------------------------------------------------------------------------------------
+docid            | 3
+wordcount        | 49
+words            | {41,38,3,77,78,94,37,81,82,19,84,34,96,13,31,98,90,51,26,61,23,22,50,65,66,67,45,44,68,4,12,43,20,73}
+counts           | {1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,11,1,1,1,1,1,3,1,1,1,1,2,2,1,1,1,1,1}
+topic_count      | {0,28,0,4,17}
+topic_assignment | {1,1,4,1,1,1,1,1,1,4,1,1,1,3,1,1,1,4,4,4,4,4,4,4,4,4,4,4,4,1,1,1,4,3,3,3,1,1,4,4,1,1,1,1,1,1,1,1,1}
+</pre> The test table is expected to be in the same form as the training table and can be created with the same process. The LDA prediction results have the same format as the output table generated by the LDA training function.</li>
+<li>Review prediction using helper function. (This is the same per-document word to topic mapping that we used on the learned model.) <pre class="example">
+DROP TABLE IF EXISTS helper_output_table;
+SELECT madlib.lda_get_word_topic_mapping('outdata_predict',  -- Output table from prediction
+                                         'helper_output_table');
+SELECT * FROM helper_output_table ORDER BY docid LIMIT 40;
+</pre> <pre class="result">
+ docid | wordid | topicid
+-------+--------+---------
+     0 |     54 |       4
+     0 |     42 |       1
+     0 |     35 |       4
+     0 |     32 |       4
+     0 |     29 |       4
+     0 |     28 |       1
+     0 |     24 |       4
+     0 |     17 |       1
+     0 |     11 |       4
+     0 |      8 |       4
+     0 |      3 |       0
+     0 |     97 |       4
+     0 |     95 |       1
+     0 |     90 |       2
+     0 |     85 |       4
+     0 |     80 |       0
+     0 |     71 |       0
+     0 |     68 |       0
+     0 |     64 |       4
+     0 |     64 |       1
+     0 |     56 |       4
+     1 |      2 |       4
+     1 |      1 |       4
+     1 |      0 |       2
+     1 |    102 |       4
+     1 |    101 |       4
+     1 |    100 |       4
+     1 |     93 |       4
+     1 |     90 |       2
+     1 |     90 |       0
+     1 |     88 |       2
+     1 |     75 |       2
+     1 |     74 |       0
+     1 |     68 |       0
+     1 |     59 |       4
+     1 |     57 |       2
+     1 |     55 |       2
+     1 |     53 |       1
+     1 |     50 |       0
+     1 |     49 |       2
+(40 rows)
+</pre></li>
+<li>Call the perplexity function to see how well the model fits the data. Perplexity computes word likelihoods averaged over the test documents. <pre class="example">
+SELECT madlib.lda_get_perplexity( 'lda_model',        -- LDA model from training
+                                  'outdata_predict'   -- Prediction output
+                                );
+</pre> <pre class="result">
+ lda_get_perplexity
++--------------------
+    79.481894411824
+(1 row)
+</pre></li>
+<li>Perplexity by iteration. Now let's look at how perplexity changes from one iteration to the next: <pre class="example">
+DROP TABLE IF EXISTS lda_model_perp, lda_output_data_perp;
+SELECT madlib.lda_train( 'documents_tf',          -- documents table in the form of term frequency
+                         'lda_model_perp',        -- model table created by LDA training (not human readable)
+                         'lda_output_data_perp',  -- readable output data table
+                         103,                     -- vocabulary size
+                         5,                       -- number of topics
+                         30,                      -- number of iterations
+                         5,                       -- Dirichlet prior for the per-doc topic multinomial (alpha)
+                         0.01,                    -- Dirichlet prior for the per-topic word multinomial (beta)
+                         2,                       -- Evaluate perplexity every n iterations
+                         0.3                      -- Tolerance to stop iteration
+                       );
+SELECT voc_size, topic_num, alpha, beta, num_iterations, perplexity, perplexity_iters from lda_model_perp;
+</pre> <pre class="result">
+-[ RECORD 1 ]----+----------------------------------------------------------------------------------------------------
+voc_size         | 103
+topic_num        | 5
+alpha            | 5
+beta             | 0.01
+num_iterations   | 14
+perplexity       | {70.0297335165,65.6497887327,70.2040806534,68.2594871716,70.3816093812,67.9193935299,67.6325562682}
+perplexity_iters | {2,4,6,8,10,12,14}
+</pre> Iterating stops at 14 since the tolerance is reached. There are 7 perplexity values because we computed it only every 2nd iteration to save time. As expected, the perplexity on the training data is that same as the final iteration value: <pre class="example">
+SELECT madlib.lda_get_perplexity( 'lda_model_perp',
+                                  'lda_output_data_perp'
+                                );
+</pre> <pre class="result">
+ lda_get_perplexity
+--------------------+
+    67.632556268157
+</pre></li>
+</ol>
+<p><a class="anchor" id="literature"></a></p><dl class="section user"><dt>Literature</dt><dd></dd></dl>
+<p>[1] D.M. Blei, A.Y. Ng, M.I. Jordan, <em>Latent Dirichlet Allocation</em>, Journal of Machine Learning Research, vol. 3, pp. 993-1022, 2003.</p>
+<p>[2] T. Griffiths and M. Steyvers, <em>Finding scientific topics</em>, PNAS, vol. 101, pp. 5228-5235, 2004.</p>
+<p>[3] Y. Wang, H. Bai, M. Stanton, W-Y. Chen, and E.Y. Chang, <em>lda: Parallel Dirichlet Allocation for Large-scale Applications</em>, AAIM, 2009.</p>
+<p>[4] <a href="http://en.wikipedia.org/wiki/Latent_Dirichlet_allocation">http://en.wikipedia.org/wiki/Latent_Dirichlet_allocation</a></p>
+<p>[5] J. Chang, Collapsed Gibbs sampling methods for topic models, R manual, 2010.</p>
+<p><a class="anchor" id="related"></a></p><dl class="section user"><dt>Related Topics</dt><dd>File <a class="el" href="lda_8sql__in.html" title="SQL functions for Latent Dirichlet Allocation. ">lda.sql_in</a> documenting the SQL functions. </dd></dl>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:59 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__linalg.html b/docs/rc/group__grp__linalg.html
new file mode 100644
index 0000000..edb9bbe
--- /dev/null
+++ b/docs/rc/group__grp__linalg.html
@@ -0,0 +1,307 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Norms and Distance Functions</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__linalg.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Norms and Distance Functions<div class="ingroups"><a class="el" href="group__grp__datatrans.html">Data Types and Transformations</a> &raquo; <a class="el" href="group__grp__arraysmatrix.html">Arrays and Matrices</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li class="level1">
+<a href="#functions">Linear Algebra Utility Functions</a> </li>
+<li class="level1">
+<a href="#examples">Examples</a> </li>
+<li class="level1">
+<a href="#literature">Literature</a> </li>
+<li class="level1">
+<a href="#related">Related Functions</a> </li>
+</ul>
+</div><p>The linalg module consists of useful utility functions for basic linear algebra operations. Several of these functions can be used while implementing new algorithms. These functions operate on vectors (1-D FLOAT8 array) and matrices (2-D FLOAT8 array). Note that other array types may need to be casted into FLOAT8[] before calling the functions.</p>
+<p>Refer to the <a class="el" href="linalg_8sql__in.html" title="SQL functions for linear algebra. ">linalg.sql_in</a> file for documentation on each of the utility functions.</p>
+<p><a class="anchor" id="functions"></a></p><dl class="section user"><dt>Linear Algebra Utility Functions</dt><dd><table class="output">
+<tr>
+<th><a class="el" href="linalg_8sql__in.html#a300300fe4b8576ba0b97b95d8dea3057" title="1-norm of a vector ">norm1()</a> </th><td><p class="starttd">1-norm of a vector, \(\|\vec{a}\|_1\).</p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th><a class="el" href="linalg_8sql__in.html#a50fdfe30cc0edc6888a909dbb4b4c239" title="2-norm of a vector ">norm2()</a> </th><td><p class="starttd">2-norm of a vector, \(\|\vec{a}\|_2\). </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th><a class="el" href="linalg_8sql__in.html#aad193850e79c4b9d811ca9bc53e13476" title="1-norm of the difference between two vectors ">dist_norm1()</a> </th><td><p class="starttd">1-norm of the difference between two vectors, \(\|\vec{a} - \vec{b}\|_1\). </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th><a class="el" href="linalg_8sql__in.html#aa58e51526edea6ea98db30b6f250adb4" title="2-norm of the difference between two vectors ">dist_norm2()</a> </th><td><p class="starttd">2-norm of the difference between two vectors, \(\|\vec{a} - \vec{b}\|_2\). </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th><a class="el" href="linalg_8sql__in.html#ad9cc156ae57bf7c0a2fe90798259105a" title="p-norm of the difference between two vectors ">dist_pnorm()</a> </th><td><p class="starttd">Generic p-norm of the difference between two vectors, \(\|\vec{a} - \vec{b}\|_p, p &gt; 0\). </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th><a class="el" href="linalg_8sql__in.html#a31fa9f2f5b45507c09f136464fdad1db" title="Infinity-norm of the difference between two vectors. ">dist_inf_norm()</a> </th><td><p class="starttd">Infinity-norm of the difference between two vectors, \(\|\vec{a} - \vec{b}\|_\infty\). </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th><a class="el" href="linalg_8sql__in.html#a00a08e69f27524f2096032214e15b668" title="Squared 2-norm of the difference between two vectors. ">squared_dist_norm2()</a> </th><td><p class="starttd">Squared 2-norm of the difference between two vectors, \(\|\vec{a} - \vec{b}\|_2^2\). </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th><a class="el" href="linalg_8sql__in.html#a1782f2ba00d9f9fab20894a576079f87" title="cosine similarity score between two vectors ">cosine_similarity()</a> </th><td><p class="starttd">Cosine score between two vectors, \(\frac{\vec{a} \cdot \vec{b}}{\|\vec{a}\|_2 \|\vec{b}\|_2}\). </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th><a class="el" href="linalg_8sql__in.html#a8c7b9281a72ff22caf06161701b27e84" title="Angle between two vectors. ">dist_angle()</a> </th><td><p class="starttd">Angle between two vectors in an Euclidean space, \(\cos^{-1}(\frac{\vec{a} \cdot \vec{b}}{\|\vec{a}\|_2 \|\vec{b}\|_2})\). </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th><a class="el" href="linalg_8sql__in.html#afa13b4c6122b99422d666dedea136c18" title="Tanimoto distance between two vectors. ">dist_tanimoto()</a> </th><td><p class="starttd">Tanimoto distance between two vectors. [1] </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th><a class="el" href="linalg_8sql__in.html#ac1397ac9f4a35b3b67c3be05b5e1a828" title="Jaccard distance between two vectors (treated as sets) ">dist_jaccard()</a> </th><td><p class="starttd">Jaccard distance between two varchar vectors treated as sets. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th><a class="el" href="linalg_8sql__in.html#af6b905fcac7746ef0ed0c36df4a1e070" title="Get an indexed row of the given matrix (2-D array) ">get_row()</a> </th><td><p class="starttd">Return the indexed row of a matrix (2-D array). </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th><a class="el" href="linalg_8sql__in.html#a20f34c9e661191e5225cca7bc23252c5" title="Get an indexed col of the given matrix (2-D array) ">get_col()</a> </th><td><p class="starttd">Return the indexed col of a matrix (2-D array). </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th><a class="el" href="linalg_8sql__in.html#a1aa37f73fb1cd8d7d106aa518dd8c0b4" title="Compute the average of vectors. ">avg()</a> </th><td><p class="starttd">Compute the average of vectors. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th><a class="el" href="linalg_8sql__in.html#a0b04663ca206f03e66aed5ea2b4cc461" title="Compute the normalized average of vectors. ">normalized_avg()</a> </th><td><p class="starttd">Compute the normalized average of vectors (unit vector in an Euclidean space). </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th><a class="el" href="linalg_8sql__in.html#a9c439706f35d6cac89f151d553a5f111" title="Combine vectors to a matrix. ">matrix_agg()</a> </th><td><p class="starttd">Combine vectors to a matrix. </p>
+<p class="endtd"></p>
+</td></tr>
+</table>
+</dd></dl>
+<p><a class="anchor" id="examples"></a></p>
+<p><b>Vector Norms and Distances</b></p>
+<ol type="1">
+<li>Create a database table with two vector columns and add some data. <pre class="example">
+CREATE TABLE two_vectors(
+    id  integer,
+    a   float8[],
+    b   float8[]);
+</pre> <pre class="example">
+INSERT INTO two_vectors VALUES
+(1, '{3,4}', '{4,5}'),
+(2, '{1,1,0,-4,5,3,4,106,14}', '{1,1,0,6,-3,1,2,92,2}');
+</pre></li>
+<li>Invoke norm functions. <pre class="example">
+SELECT
+    id,
+    madlib.norm1(a),
+    madlib.norm2(a)
+FROM two_vectors;
+</pre> Result: <pre class="result">
+ id | norm1 |      norm2
+----+-------+------------------
+  1 |     7 |                5
+  2 |   138 | 107.238052947636
+(2 rows)
+</pre></li>
+<li>Invoke distance functions. <pre class="example">
+SELECT
+    id,
+    madlib.dist_norm1(a, b),
+    madlib.dist_norm2(a, b),
+    madlib.dist_pnorm(a, b, 5) AS norm5,
+    madlib.dist_inf_norm(a, b),
+    madlib.squared_dist_norm2(a, b) AS sq_dist_norm2,
+    madlib.cosine_similarity(a, b),
+    madlib.dist_angle(a, b),
+    madlib.dist_tanimoto(a, b),
+    madlib.dist_jaccard(a::text[], b::text[])
+FROM two_vectors;
+</pre> Result: <pre class="result">
+ id | dist_norm1 |    dist_norm2    |      norm5       | dist_inf_norm | sq_dist_norm2 | cosine_similarity |     dist_angle     |   dist_tanimoto    |   dist_jaccard
+----+------------+------------------+------------------+---------------+---------------+-------------------+--------------------+--------------------+-------------------
+  1 |          2 |  1.4142135623731 | 1.14869835499704 |             1 |             2 | 0.999512076087079 | 0.0312398334302684 | 0.0588235294117647 | 0.666666666666667
+  2 |         48 | 22.6274169979695 |  15.585086360695 |            14 |           512 | 0.985403348449008 |   0.17106899659286 | 0.0498733684005455 | 0.833333333333333
+(2 rows)
+</pre></li>
+</ol>
+<p><b>Matrix Functions</b></p>
+<ol type="1">
+<li>Create a database table with a matrix column. <pre class="example">
+CREATE TABLE matrix(
+    id  integer,
+    m   float8[]);
+</pre> <pre class="example">
+INSERT INTO matrix VALUES
+(1, '{{4,5},{3,5},{9,0}}');
+</pre></li>
+<li>Invoke matrix functions. <pre class="example">
+SELECT
+    madlib.get_row(m, 1) AS row_1,
+    madlib.get_row(m, 2) AS row_2,
+    madlib.get_row(m, 3) AS row_3,
+    madlib.get_col(m, 1) AS col_1,
+    madlib.get_col(m, 2) AS col_2
+FROM matrix;
+</pre> Result: <pre class="result">
+ row_1 | row_2 | row_3 |  col_1  |  col_2
+-------+-------+-------+---------+---------
+ {4,5} | {3,5} | {9,0} | {4,3,9} | {5,5,0}
+(1 row)
+</pre></li>
+</ol>
+<p><b>Aggregate Functions</b></p>
+<ol type="1">
+<li>Create a database table with a vector column. <pre class="example">
+CREATE TABLE vector(
+    id  integer,
+    v   float8[]);
+</pre> <pre class="example">
+INSERT INTO vector VALUES
+(1, '{4,3}'),
+(2, '{8,6}'),
+(3, '{12,9}');
+</pre></li>
+<li>Invoke aggregate functions. <pre class="example">
+SELECT
+    madlib.avg(v),
+    madlib.normalized_avg(v),
+    madlib.matrix_agg(v)
+FROM vector;
+</pre> Result: <pre class="result">
+  avg  | normalized_avg |      matrix_agg
+-------+----------------+----------------------
+ {8,6} | {0.8,0.6}      | {{4,3},{8,6},{12,9}}
+(1 row)
+</pre></li>
+</ol>
+<p><a class="anchor" id="literature"></a></p><dl class="section user"><dt>Literature</dt><dd></dd></dl>
+<p>[1] <a href="http://en.wikipedia.org/wiki/Jaccard_index#Tanimoto_similarity_and_distance">http://en.wikipedia.org/wiki/Jaccard_index#Tanimoto_similarity_and_distance</a></p>
+<p><a class="anchor" id="related"></a></p><dl class="section user"><dt>Related Topics</dt><dd>File <a class="el" href="linalg_8sql__in.html" title="SQL functions for linear algebra. ">linalg.sql_in</a> documenting the SQL functions. </dd></dl>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__linear__solver.html b/docs/rc/group__grp__linear__solver.html
new file mode 100644
index 0000000..0327f6a
--- /dev/null
+++ b/docs/rc/group__grp__linear__solver.html
@@ -0,0 +1,142 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Linear Solvers</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__linear__solver.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#groups">Modules</a>  </div>
+  <div class="headertitle">
+<div class="title">Linear Solvers<div class="ingroups"><a class="el" href="group__grp__other__functions.html">Utilities</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Methods that implement solutions for systems of consistent linear equations. </p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group__grp__dense__linear__solver"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__dense__linear__solver.html">Dense Linear Systems</a></td></tr>
+<tr class="memdesc:group__grp__dense__linear__solver"><td class="mdescLeft">&#160;</td><td class="mdescRight">Implements solution methods for large dense linear systems. Currently, restricted to problems that fit in memory. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__sparse__linear__solver"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__sparse__linear__solver.html">Sparse Linear Systems</a></td></tr>
+<tr class="memdesc:group__grp__sparse__linear__solver"><td class="mdescLeft">&#160;</td><td class="mdescRight">Implements solution methods for linear systems with sparse matrix input. Currently, restricted to problems that fit in memory. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:59 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__linear__solver.js b/docs/rc/group__grp__linear__solver.js
new file mode 100644
index 0000000..01508a7
--- /dev/null
+++ b/docs/rc/group__grp__linear__solver.js
@@ -0,0 +1,5 @@
+var group__grp__linear__solver =
+[
+    [ "Dense Linear Systems", "group__grp__dense__linear__solver.html", null ],
+    [ "Sparse Linear Systems", "group__grp__sparse__linear__solver.html", null ]
+];
\ No newline at end of file
diff --git a/docs/rc/group__grp__linreg.html b/docs/rc/group__grp__linreg.html
new file mode 100644
index 0000000..4d797eb
--- /dev/null
+++ b/docs/rc/group__grp__linreg.html
@@ -0,0 +1,467 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Linear Regression</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__linreg.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Linear Regression<div class="ingroups"><a class="el" href="group__grp__super.html">Supervised Learning</a> &raquo; <a class="el" href="group__grp__regml.html">Regression Models</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li class="level1">
+<a href="#train">Training Function</a> </li>
+<li class="level1">
+<a href="#predict">Prediction Function</a> </li>
+<li class="level1">
+<a href="#examples">Examples</a> </li>
+<li class="level1">
+<a href="#background">Technical Background</a> </li>
+<li class="level1">
+<a href="#literature">Literature</a> </li>
+<li class="level1">
+<a href="#related">Related Topics</a> </li>
+</ul>
+</div><p>Linear regression models a linear relationship of a scalar dependent variable \( y \) to one or more explanatory independent variables \( x \) and builds a model of coefficients.</p>
+<p><a class="anchor" id="train"></a></p><dl class="section user"><dt>Training Function</dt><dd></dd></dl>
+<p>The linear regression training function has the following syntax. </p><pre class="syntax">
+linregr_train( source_table,
+               out_table,
+               dependent_varname,
+               independent_varname,
+               grouping_cols,
+               heteroskedasticity_option
+             )
+</pre><p><b>Arguments</b> </p><dl class="arglist">
+<dt>source_table </dt>
+<dd><p class="startdd">TEXT. Name of the table containing the training data.</p>
+<p class="enddd"></p>
+</dd>
+<dt>out_table </dt>
+<dd><p class="startdd">TEXT. Name of the generated table containing the output model.</p>
+<p>The output table contains the following columns: </p><table class="output">
+<tr>
+<th>&lt;...&gt; </th><td>Any grouping columns provided during training. Present only if the grouping option is used.  </td></tr>
+<tr>
+<th>coef </th><td>FLOAT8[]. Vector of the coefficients of the regression.  </td></tr>
+<tr>
+<th>r2 </th><td>FLOAT8. R-squared coefficient of determination of the model.  </td></tr>
+<tr>
+<th>std_err </th><td>FLOAT8[]. Vector of the standard error of the coefficients.  </td></tr>
+<tr>
+<th>t_stats </th><td>FLOAT8[]. Vector of the t-statistics of the coefficients.  </td></tr>
+<tr>
+<th>p_values </th><td>FLOAT8[]. Vector of the p-values of the coefficients.  </td></tr>
+<tr>
+<th>condition_no </th><td>FLOAT8 array. The condition number of the \(X^{*}X\) matrix. A high condition number is usually an indication that there may be some numeric instability in the result yielding a less reliable model. A high condition number often results when there is a significant amount of colinearity in the underlying design matrix, in which case other regression techniques, such as elastic net regression, may be more appropriate.  </td></tr>
+<tr>
+<th>bp_stats </th><td>FLOAT8. The Breush-Pagan statistic of heteroskedacity. Present only if the heteroskedacity argument was set to True when the model was trained.  </td></tr>
+<tr>
+<th>bp_p_value </th><td>FLOAT8. The Breush-Pagan calculated p-value. Present only if the heteroskedacity parameter was set to True when the model was trained.  </td></tr>
+<tr>
+<th>num_rows_processed </th><td>INTEGER. The number of rows that are actually used in each group.  </td></tr>
+<tr>
+<th>num_missing_rows_skipped </th><td>INTEGER. The number of rows that have NULL values in the dependent and independent variables, and were skipped in the computation for each group. </td></tr>
+<tr>
+<th>variance_covariance </th><td>FLOAT[]. Variance/covariance matrix. </td></tr>
+</table>
+<p class="enddd">A summary table named &lt;out_table&gt;_summary is created together with the output table. It has the following columns: </p><table class="output">
+<tr>
+<th>method </th><td>'linregr' for linear regression.  </td></tr>
+<tr>
+<th>source_table </th><td>The data source table name </td></tr>
+<tr>
+<th>out_table </th><td>The output table name </td></tr>
+<tr>
+<th>dependent_varname </th><td>The dependent variable </td></tr>
+<tr>
+<th>independent_varname </th><td>The independent variables </td></tr>
+<tr>
+<th>num_rows_processed </th><td>The total number of rows that were used in the computation. </td></tr>
+<tr>
+<th>num_missing_rows_skipped </th><td>The total number of rows that were skipped because of NULL values in them.  </td></tr>
+<tr>
+<th>grouping_cols </th><td>Names of the grouping columns.  </td></tr>
+</table>
+</dd>
+<dt></dt>
+<dd><dl class="section note"><dt>Note</dt><dd>For p-values, we just return the computation result directly. Other statistical packages like 'R' produce the same result, but on printing the result to screen, another format function is used and any p-value that is smaller than the machine epsilon (the smallest positive floating-point number 'x' such that '1 + x != 1') will be printed on screen as "&lt; xxx" (xxx is the value of the machine epsilon). Although the result may look different, they are in fact the same. </dd></dl>
+</dd>
+<dt>dependent_varname </dt>
+<dd><p class="startdd">TEXT. Expression to evaluate for the dependent variable.</p>
+<p class="enddd"></p>
+</dd>
+<dt>independent_varname </dt>
+<dd><p class="startdd">TEXT. Expression list to evaluate for the independent variables. An intercept variable is not assumed. It is common to provide an explicit intercept term by including a single constant <code>1</code> term in the independent variable list.</p>
+<p class="enddd"></p>
+</dd>
+<dt>grouping_cols (optional) </dt>
+<dd><p class="startdd">TEXT, default: NULL. An expression list used to group the input dataset into discrete groups, running one regression per group. Similar to the SQL <code>GROUP BY</code> clause. When this value is null, no grouping is used and a single result model is generated for the whole data set.</p>
+<p class="enddd"></p>
+</dd>
+<dt>heteroskedasticity_option (optional) </dt>
+<dd>BOOLEAN, default: FALSE. When TRUE, the heteroskedasticity of the model is also calculated and returned with the results. </dd>
+</dl>
+<p><a class="anchor" id="warning"></a></p><dl class="section warning"><dt>Warning</dt><dd>The aggregate 'linregr' has been deprecated in favor of the function 'linregr_train'. If the aggregate 'linregr' is used to output the results of linear regression to a table, it is recommended to follow the general pattern shown below (replace text within '&lt;...&gt;' with the appropriate variable names). <pre class="syntax">
+CREATE TABLE &lt;output table&gt; AS
+SELECT (r).*
+FROM (
+    SELECT linregr(&lt;dependent variable&gt;, &lt;independent variable&gt;) as r
+    FROM &lt;source table&gt;
+    ) q;
+</pre></dd></dl>
+<p><a class="anchor" id="predict"></a></p><dl class="section user"><dt>Prediction Function</dt><dd>The prediction function is as follows: <pre class="syntax">
+linregr_predict(coef, col_ind)
+</pre> <b>Arguments</b> <dl class="arglist">
+<dt>coef </dt>
+<dd>FLOAT8[]. Vector of the coefficients of regression from training. </dd>
+<dt>col_ind </dt>
+<dd><p class="startdd">FLOAT8[]. An array containing the independent variable column names, as was used for the training. </p>
+<p class="enddd"><a class="anchor" id="examples"></a></p>
+</dd>
+</dl>
+</dd></dl>
+<dl class="section user"><dt>Examples</dt><dd><ol type="1">
+<li>Create an input data set. <pre class="example">
+DROP TABLE IF EXISTS houses;
+CREATE TABLE houses (id INT, tax INT, bedroom INT, bath FLOAT, price INT,
+            size INT, lot INT);
+INSERT INTO houses VALUES
+  (1 ,  590 ,       2 ,    1 ,  50000 ,  770 , 22100),
+  (2 , 1050 ,       3 ,    2 ,  85000 , 1410 , 12000),
+  (3 ,   20 ,       3 ,    1 ,  22500 , 1060 ,  3500),
+  (4 ,  870 ,       2 ,    2 ,  90000 , 1300 , 17500),
+  (5 , 1320 ,       3 ,    2 , 133000 , 1500 , 30000),
+  (6 , 1350 ,       2 ,    1 ,  90500 ,  820 , 25700),
+  (7 , 2790 ,       3 ,  2.5 , 260000 , 2130 , 25000),
+  (8 ,  680 ,       2 ,    1 , 142500 , 1170 , 22000),
+  (9 , 1840 ,       3 ,    2 , 160000 , 1500 , 19000),
+ (10 , 3680 ,       4 ,    2 , 240000 , 2790 , 20000),
+ (11 , 1660 ,       3 ,    1 ,  87000 , 1030 , 17500),
+ (12 , 1620 ,       3 ,    2 , 118600 , 1250 , 20000),
+ (13 , 3100 ,       3 ,    2 , 140000 , 1760 , 38000),
+ (14 , 2070 ,       2 ,    3 , 148000 , 1550 , 14000),
+ (15 ,  650 ,       3 ,  1.5 ,  65000 , 1450 , 12000);
+</pre></li>
+<li>Train a regression model. First, we generate a single regression for all data. <pre class="example">
+DROP TABLE IF EXISTS houses_linregr, houses_linregr_summary;
+SELECT madlib.linregr_train( 'houses',
+                             'houses_linregr',
+                             'price',
+                             'ARRAY[1, tax, bath, size]'
+                           );
+</pre> (Note that in this example we are dynamically creating the array of independent variables from column names. If you have large numbers of independent variables beyond the PostgreSQL limit of maximum columns per table, you would pre-build the arrays and store them in a single column.)</li>
+<li>Next we generate three output models, one for each value of "bedroom". <pre class="example">
+DROP TABLE IF EXISTS houses_linregr_bedroom, houses_linregr_bedroom_summary;
+SELECT madlib.linregr_train( 'houses',
+                             'houses_linregr_bedroom',
+                             'price',
+                             'ARRAY[1, tax, bath, size]',
+                             'bedroom'
+                           );
+</pre></li>
+<li>Examine the resulting models. <pre class="example">
+-- Set extended display on for easier reading of output
+\x ON
+SELECT * FROM houses_linregr;
+</pre> Result: <pre class="result">
+-[ RECORD 1 ]+---------------------------------------------------------------------------
+coef                     | {-12849.4168959872,28.9613922651765,10181.6290712648,50.516894915354}
+r2                       | 0.768577580597443
+std_err                  | {33453.0344331391,15.8992104963997,19437.7710925923,32.928023174087}
+t_stats                  | {-0.38410317968819,1.82156166004184,0.523806408809133,1.53416118083605}
+p_values                 | {0.708223134615422,0.0958005827189772,0.610804093526536,0.153235085548186}
+condition_no             | 9002.50457085737
+num_rows_processed       | 15
+num_missing_rows_skipped | 0
+variance_covariance      | {{1119105512.78479,217782.067878023,-283344228.394562,-616679.69319088}, ...
+</pre> Alternatively you can unnest the results for easier reading of output. <pre class="example">
+\x OFF
+SELECT unnest(ARRAY['intercept','tax','bath','size']) as attribute,
+       unnest(coef) as coefficient,
+       unnest(std_err) as standard_error,
+       unnest(t_stats) as t_stat,
+       unnest(p_values) as pvalue
+FROM houses_linregr;
+</pre> Result: <pre class="result">
+ attribute |    coefficient    |  standard_error  |      t_stat       |       pvalue
+-----------+-------------------+------------------+-------------------+--------------------
+ intercept | -12849.4168959872 | 33453.0344331391 | -0.38410317968819 |  0.708223134615422
+ tax       |  28.9613922651765 | 15.8992104963997 |  1.82156166004184 | 0.0958005827189772
+ bath      |  10181.6290712648 | 19437.7710925923 | 0.523806408809133 |  0.610804093526536
+ size      |   50.516894915354 |  32.928023174087 |  1.53416118083605 |  0.153235085548186
+(4 rows)
+</pre></li>
+<li>View the results grouped by bedroom. <pre class="example">
+\x ON
+SELECT * FROM houses_linregr_bedroom ORDER BY bedroom;
+</pre> Result: <pre class="result">
+-[ RECORD 1 ]------------+----------------------------------------------------------------
+bedroom                  | 4
+coef                     | {0.0112536020318378,41.4132554771633,0.0225072040636757,31.3975496688276}
+r2                       | 1
+std_err                  | {0,0,0,0}
+t_stats                  | {Infinity,Infinity,Infinity,Infinity}
+p_values                 |
+condition_no             | Infinity
+num_rows_processed       | 1
+num_missing_rows_skipped | 0
+variance_covariance      | {{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}
+-[ RECORD 2 ]------------+----------------------------------------------------------------
+bedroom                  | 3
+coef                     | {-88155.8292501601,27.1966436294429,41404.0293363612,62.637521075324}
+r2                       | 0.841699901311252
+std_err                  | {57867.9999702625,17.8272309154689,43643.1321511114,70.8506824863954}
+t_stats                  | {-1.52339512849005,1.52556747362508,0.948695185143966,0.884077878676067}
+p_values                 | {0.188161432894871,0.187636685729869,0.386340032374927,0.417132778705789}
+condition_no             | 11722.6225642147
+num_rows_processed       | 9
+num_missing_rows_skipped | 0
+variance_covariance      | {{3348705420.5583,433697.545104226,-70253017.45773,-2593488.13800193}, ...
+-[ RECORD 3 ]------------+----------------------------------------------------------------
+bedroom                  | 2
+coef                     | {-84242.0345406597,55.4430144648696,-78966.9753675319,225.611910021192}
+r2                       | 0.968809546465313
+std_err                  | {35018.9991665742,19.5731125320686,23036.8071292552,49.0448678148784}
+t_stats                  | {-2.40560942761235,2.83261103077151,-3.42786111480046,4.60011251070697}
+p_values                 | {0.250804617665239,0.21605133377602,0.180704400437373,0.136272031474122}
+condition_no             | 10086.1048721726
+num_rows_processed       | 5
+num_missing_rows_skipped | 0
+variance_covariance      | {{1226330302.62852,-300921.595596804,551696673.397849,-1544160.63236119}, ...
+</pre></li>
+<li>Compare predicted price with actual. (This example uses the original data table to perform the prediction. Typically a different test dataset with the same features as the original training dataset would be used for prediction.) <pre class="example">
+\x OFF
+SELECT houses.*,
+       madlib.linregr_predict( m.coef,
+                               ARRAY[1,tax,bath,size]
+                             ) as predict,
+        price -
+          madlib.linregr_predict( m.coef,
+                                  ARRAY[1,tax,bath,size]
+                                ) as residual
+FROM houses, houses_linregr m ORDER BY id;
+</pre> Result: <pre class="result">
+ id | tax  | bedroom | bath | price  | size |  lot  |     predict      |     residual
+----+------+---------+------+--------+------+-------+------------------+-------------------
+  1 |  590 |       2 |    1 |  50000 |  770 | 22100 | 53317.4426965542 | -3317.44269655424
+  2 | 1050 |       3 |    2 |  85000 | 1410 | 12000 | 109152.124955627 | -24152.1249556268
+  3 |   20 |       3 |    1 |  22500 | 1060 |  3500 | 51459.3486308563 | -28959.3486308563
+  4 |  870 |       2 |    2 |  90000 | 1300 | 17500 |  98382.215907206 | -8382.21590720605
+  5 | 1320 |       3 |    2 | 133000 | 1500 | 30000 | 121518.221409606 |  11481.7785903937
+  6 | 1350 |       2 |    1 |  90500 |  820 | 25700 | 77853.9455638561 |  12646.0544361439
+  7 | 2790 |       3 |  2.5 | 260000 | 2130 | 25000 | 201007.926371721 |  58992.0736282788
+  8 |  680 |       2 |    1 | 142500 | 1170 | 22000 | 76130.7259665617 |  66369.2740334383
+  9 | 1840 |       3 |    2 | 160000 | 1500 | 19000 | 136578.145387498 |  23421.8546125019
+ 10 | 3680 |       4 |    2 | 240000 | 2790 | 20000 |  255033.90159623 | -15033.9015962295
+ 11 | 1660 |       3 |    1 |  87000 | 1030 | 17500 | 97440.5250982852 | -10440.5250982852
+ 12 | 1620 |       3 |    2 | 118600 | 1250 | 20000 | 117577.415360321 |  1022.58463967926
+ 13 | 3100 |       3 |    2 | 140000 | 1760 | 38000 | 186203.892319613 | -46203.8923196126
+ 14 | 2070 |       2 |    3 | 148000 | 1550 | 14000 | 155946.739425521 | -7946.73942552117
+ 15 |  650 |       3 |  1.5 |  65000 | 1450 | 12000 | 94497.4293105379 | -29497.4293105379
+(15 rows)
+</pre></li>
+<li>Compare predicted price with actual with grouping. It means a different model is used depending on the number of bedrooms. <pre class="example">
+\x OFF
+SELECT houses.*,
+       madlib.linregr_predict( m.coef,
+                              ARRAY[1,tax,bath,size]
+                             ) as predict,
+        price -
+          madlib.linregr_predict( m.coef,
+                                 ARRAY[1,tax,bath,size]
+                                ) as residual
+FROM houses, houses_linregr_bedroom m
+WHERE houses.bedroom = m.bedroom
+ORDER BY id;
+</pre> Result: <pre class="result">
+ id | tax  | bedroom | bath | price  | size |  lot  |     predict      |     residual
+----+------+---------+------+--------+------+-------+------------------+-------------------
+  1 |  590 |       2 |    1 |  50000 |  770 | 22100 | 43223.5393423978 |  6776.46065760222
+  2 | 1050 |       3 |    2 |  85000 | 1410 | 12000 | 111527.609949684 |  -26527.609949684
+  3 |   20 |       3 |    1 |  22500 | 1060 |  3500 | 20187.9052986341 |  2312.09470136587
+  4 |  870 |       2 |    2 |  90000 | 1300 | 17500 | 99354.9203362612 | -9354.92033626116
+  5 | 1320 |       3 |    2 | 133000 | 1500 | 30000 | 124508.080626412 |  8491.91937358756
+  6 | 1350 |       2 |    1 |  90500 |  820 | 25700 | 96640.8258367579 |  -6140.8258367579
+  7 | 2790 |       3 |  2.5 | 260000 | 2130 | 25000 | 224650.799707327 |  35349.2002926733
+  8 |  680 |       2 |    1 | 142500 | 1170 | 22000 | 138458.174652714 |  4041.82534728572
+  9 | 1840 |       3 |    2 | 160000 | 1500 | 19000 | 138650.335313722 |  21349.6646862777
+ 10 | 3680 |       4 |    2 | 240000 | 2790 | 20000 |           240000 |                 0
+ 11 | 1660 |       3 |    1 |  87000 | 1030 | 17500 | 62911.2752186594 |  24088.7247813406
+ 12 | 1620 |       3 |    2 | 118600 | 1250 | 20000 | 117007.693446414 |  1592.30655358579
+ 13 | 3100 |       3 |    2 | 140000 | 1760 | 38000 | 189203.861766403 | -49203.8617664034
+ 14 | 2070 |       2 |    3 | 148000 | 1550 | 14000 | 143322.539831869 |  4677.46016813093
+ 15 |  650 |       3 |  1.5 |  65000 | 1450 | 12000 | 82452.4386727394 | -17452.4386727394
+(15 rows)
+</pre></li>
+</ol>
+</dd></dl>
+<p><a class="anchor" id="notes"></a></p><dl class="section user"><dt>Note</dt><dd>All table names can be optionally schema qualified (current_schemas() would be searched if a schema name is not provided) and all table and column names should follow case-sensitivity and quoting rules per the database. (For instance, 'mytable' and 'MyTable' both resolve to the same entity, i.e. 'mytable'. If mixed-case or multi-byte characters are desired for entity names then the string should be double-quoted; in this case the input would be '"MyTable"').</dd></dl>
+<p><a class="anchor" id="background"></a></p><dl class="section user"><dt>Technical Background</dt><dd></dd></dl>
+<p>Ordinary least-squares (OLS) linear regression refers to a stochastic model in which the conditional mean of the dependent variable (usually denoted \( Y \)) is an affine function of the vector of independent variables (usually denoted \( \boldsymbol x \)). That is, </p><p class="formulaDsp">
+\[ E[Y \mid \boldsymbol x] = \boldsymbol c^T \boldsymbol x \]
+</p>
+<p> for some unknown vector of coefficients \( \boldsymbol c \). The assumption is that the residuals are i.i.d. distributed Gaussians. That is, the (conditional) probability density of \( Y \) is given by </p><p class="formulaDsp">
+\[ f(y \mid \boldsymbol x) = \frac{1}{\sqrt{2 \pi \sigma^2}} \cdot \exp\left(-\frac{1}{2 \sigma^2} \cdot (y - \boldsymbol x^T \boldsymbol c)^2 \right) \,. \]
+</p>
+<p> OLS linear regression finds the vector of coefficients \( \boldsymbol c \) that maximizes the likelihood of the observations.</p>
+<p>Let</p><ul>
+<li>\( \boldsymbol y \in \mathbf R^n \) denote the vector of observed dependent variables, with \( n \) rows, containing the observed values of the dependent variable,</li>
+<li>\( X \in \mathbf R^{n \times k} \) denote the design matrix with \( k \) columns and \( n \) rows, containing all observed vectors of independent variables. \( \boldsymbol x_i \) as rows,</li>
+<li>\( X^T \) denote the transpose of \( X \),</li>
+<li>\( X^+ \) denote the pseudo-inverse of \( X \).</li>
+</ul>
+<p>Maximizing the likelihood is equivalent to maximizing the log-likelihood \( \sum_{i=1}^n \log f(y_i \mid \boldsymbol x_i) \), which simplifies to minimizing the <b>residual sum of squares</b> \( RSS \) (also called sum of squared residuals or sum of squared errors of prediction), </p><p class="formulaDsp">
+\[ RSS = \sum_{i=1}^n ( y_i - \boldsymbol c^T \boldsymbol x_i )^2 = (\boldsymbol y - X \boldsymbol c)^T (\boldsymbol y - X \boldsymbol c) \,. \]
+</p>
+<p> The first-order conditions yield that the \( RSS \) is minimized at </p><p class="formulaDsp">
+\[ \boldsymbol c = (X^T X)^+ X^T \boldsymbol y \,. \]
+</p>
+<p>Computing the <b>total sum of squares</b> \( TSS \), the <b>explained sum of squares</b> \( ESS \) (also called the regression sum of squares), and the <b>coefficient of determination</b> \( R^2 \) is done according to the following formulas: </p><p class="formulaDsp">
+\begin{align*} ESS &amp; = \boldsymbol y^T X \boldsymbol c - \frac{ \| y \|_1^2 }{n} \\ TSS &amp; = \sum_{i=1}^n y_i^2 - \frac{ \| y \|_1^2 }{n} \\ R^2 &amp; = \frac{ESS}{TSS} \end{align*}
+</p>
+<p> Note: The last equality follows from the definition \( R^2 = 1 - \frac{RSS}{TSS} \) and the fact that for linear regression \( TSS = RSS + ESS \). A proof of the latter can be found, e.g., at: <a href="http://en.wikipedia.org/wiki/Sum_of_squares">http://en.wikipedia.org/wiki/Sum_of_squares</a></p>
+<p>We estimate the variance \( Var[Y - \boldsymbol c^T \boldsymbol x \mid \boldsymbol x] \) as </p><p class="formulaDsp">
+\[ \sigma^2 = \frac{RSS}{n - k} \]
+</p>
+<p> and compute the t-statistic for coefficient \( i \) as </p><p class="formulaDsp">
+\[ t_i = \frac{c_i}{\sqrt{\sigma^2 \cdot \left( (X^T X)^{-1} \right)_{ii} }} \,. \]
+</p>
+<p>The \( p \)-value for coefficient \( i \) gives the probability of seeing a value at least as extreme as the one observed, provided that the null hypothesis ( \( c_i = 0 \)) is true. Letting \( F_\nu \) denote the cumulative density function of student-t with \( \nu \) degrees of freedom, the \( p \)-value for coefficient \( i \) is therefore </p><p class="formulaDsp">
+\[ p_i = \Pr(|T| \geq |t_i|) = 2 \cdot (1 - F_{n - k}( |t_i| )) \]
+</p>
+<p> where \( T \) is a student-t distributed random variable with mean 0.</p>
+<p>The condition number [2] \( \kappa(X) = \|X\|_2\cdot\|X^{-1}\|_2\) is computed as the product of two spectral norms [3]. The spectral norm of a matrix \(X\) is the largest singular value of \(X\) i.e. the square root of the largest eigenvalue of the positive-semidefinite matrix \(X^{*}X\):</p>
+<p class="formulaDsp">
+\[ \|X\|_2 = \sqrt{\lambda_{\max}\left(X^{*}X\right)}\ , \]
+</p>
+<p> where \(X^{*}\) is the conjugate transpose of \(X\). The condition number of a linear regression problem is a worst-case measure of how sensitive the result is to small perturbations of the input. A large condition number (say, more than 1000) indicates the presence of significant multicollinearity.</p>
+<p><a class="anchor" id="literature"></a></p><dl class="section user"><dt>Literature</dt><dd></dd></dl>
+<p>[1] Cosma Shalizi: Statistics 36-350: Data Mining, Lecture Notes, 21 October 2009, <a href="http://www.stat.cmu.edu/~cshalizi/350/lectures/17/lecture-17.pdf">http://www.stat.cmu.edu/~cshalizi/350/lectures/17/lecture-17.pdf</a></p>
+<p>[2] Wikipedia: Condition Number, <a href="http://en.wikipedia.org/wiki/Condition_number">http://en.wikipedia.org/wiki/Condition_number</a>.</p>
+<p>[3] Wikipedia: Spectral Norm, <a href="http://en.wikipedia.org/wiki/Spectral_norm#Spectral_norm">http://en.wikipedia.org/wiki/Spectral_norm#Spectral_norm</a></p>
+<p>[4] Wikipedia: Breusch–Pagan test, <a href="http://en.wikipedia.org/wiki/Breusch%E2%80%93Pagan_test">http://en.wikipedia.org/wiki/Breusch%E2%80%93Pagan_test</a></p>
+<p>[5] Wikipedia: Heteroscedasticity-consistent standard errors, <a href="http://en.wikipedia.org/wiki/Heteroscedasticity-consistent_standard_errors">http://en.wikipedia.org/wiki/Heteroscedasticity-consistent_standard_errors</a></p>
+<p><a class="anchor" id="related"></a></p><dl class="section user"><dt>Related Topics</dt><dd></dd></dl>
+<p><a class="el" href="group__grp__robust.html">Robust Variance</a></p>
+<p><a class="el" href="group__grp__clustered__errors.html">Clustered Variance</a></p>
+<p><a class="el" href="group__grp__validation.html">Cross Validation</a></p>
+<p>File <a class="el" href="linear_8sql__in.html" title="SQL functions for linear regression. ">linear.sql_in</a>, source file for the SQL functions</p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:59 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__lmf.html b/docs/rc/group__grp__lmf.html
new file mode 100644
index 0000000..ff027d7
--- /dev/null
+++ b/docs/rc/group__grp__lmf.html
@@ -0,0 +1,277 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Low-Rank Matrix Factorization</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__lmf.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Low-Rank Matrix Factorization<div class="ingroups"><a class="el" href="group__grp__datatrans.html">Data Types and Transformations</a> &raquo; <a class="el" href="group__grp__arraysmatrix.html">Arrays and Matrices</a> &raquo; <a class="el" href="group__grp__matrix__factorization.html">Matrix Factorization</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li>
+<a href="#syntax">Function Syntax</a> </li>
+<li>
+<a href="#examples">Examples</a> </li>
+<li>
+<a href="#literature">Literature</a> </li>
+</ul>
+</div><p>This module implements "factor model" for representing an incomplete matrix using a low-rank approximation [1]. Mathematically, this model seeks to find matrices U and V (also referred as factors) that, for any given incomplete matrix A, minimizes:</p>
+<p class="formulaDsp">
+\[ \|\boldsymbol A - \boldsymbol UV^{T} \|_2 \]
+</p>
+<p>subject to \(rank(\boldsymbol UV^{T}) \leq r\), where \(\|\cdot\|_2\) denotes the Frobenius norm. Let \(A\) be a \(m \times n\) matrix, then \(U\) will be \(m \times r\) and \(V\) will be \(n \times r\), in dimension, and \(1 \leq r \ll \min(m, n)\). This model is not intended to do the full decomposition, or to be used as part of inverse procedure. This model has been widely used in recommendation systems (e.g., Netflix [2]) and feature selection (e.g., image processing [3]).</p>
+<p><a class="anchor" id="syntax"></a></p><dl class="section user"><dt>Function Syntax</dt><dd></dd></dl>
+<p>Low-rank matrix factorization of an incomplete matrix into two factors.</p>
+<pre class="syntax">
+lmf_igd_run( rel_output,
+             rel_source,
+             col_row,
+             col_column,
+             col_value,
+             row_dim,
+             column_dim,
+             max_rank,
+             stepsize,
+             scale_factor,
+             num_iterations,
+             tolerance
+           )
+</pre><p> <b>Arguments</b> </p><dl class="arglist">
+<dt>rel_output </dt>
+<dd><p class="startdd">TEXT. The name of the table to receive the output.</p>
+<p>Output factors matrix U and V are in a flattened format. </p><pre>RESULT AS (
+        matrix_u    DOUBLE PRECISION[],
+        matrix_v    DOUBLE PRECISION[],
+        rmse        DOUBLE PRECISION
+);</pre><p class="enddd">Features correspond to row i is <code>matrix_u[i:i][1:r]</code>. Features correspond to column j is <code>matrix_v[j:j][1:r]</code>.  </p>
+</dd>
+<dt>rel_source </dt>
+<dd><p class="startdd">TEXT. The name of the table containing the input data.</p>
+<p>The input matrix&gt; is expected to be of the following form: </p><pre>{TABLE|VIEW} <em>input_table</em> (
+    <em>row</em>    INTEGER,
+    <em>col</em>    INTEGER,
+    <em>value</em>  DOUBLE PRECISION
+)</pre><p class="enddd">Input is contained in a table that describes an incomplete matrix, with available entries specified as (row, column, value). The input matrix should be 1-based, which means row &gt;= 1, and col &gt;= 1. NULL values are not expected.  </p>
+</dd>
+<dt>col_row </dt>
+<dd>TEXT. The name of the column containing the row number. </dd>
+<dt>col_column </dt>
+<dd>TEXT. The name of the column containing the column number. </dd>
+<dt>col_value </dt>
+<dd>DOUBLE PRECISION. The value at (row, col). </dd>
+<dt>row_dim (optional) </dt>
+<dd>INTEGER, default: "SELECT max(col_row) FROM rel_source". The number of columns in the matrix. </dd>
+<dt>column_dim (optional) </dt>
+<dd>INTEGER, default: "SELECT max(col_col) FROM rel_source". The number of rows in the matrix. </dd>
+<dt>max_rank </dt>
+<dd>INTEGER, default: 20. The rank of desired approximation. </dd>
+<dt>stepsize (optional) </dt>
+<dd>DOUBLE PRECISION, default: 0.01. Hyper-parameter that decides how aggressive the gradient steps are.  </dd>
+<dt>scale_factor (optional) </dt>
+<dd>DOUBLE PRECISION, default: 0.1. Hyper-parameter that decides scale of initial factors. </dd>
+<dt>num_iterations (optional) </dt>
+<dd>INTEGER, default: 10. Maximum number if iterations to perform regardless of convergence. </dd>
+<dt>tolerance (optional) </dt>
+<dd>DOUBLE PRECISION, default: 0.0001. Acceptable level of error in convergence. </dd>
+</dl>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<ol type="1">
+<li>Prepare an input table/view: <pre class="example">
+DROP TABLE IF EXISTS lmf_data;
+CREATE TABLE lmf_data (
+ row INT,
+ col INT,
+ val FLOAT8
+);
+</pre></li>
+<li>Populate the input table with some data. <pre class="example">
+INSERT INTO lmf_data VALUES (1, 1, 5.0);
+INSERT INTO lmf_data VALUES (3, 100, 1.0);
+INSERT INTO lmf_data VALUES (999, 10000, 2.0);
+</pre></li>
+<li>Call the <a class="el" href="lmf_8sql__in.html#ac1acb1f0e1f7008118f21c83546a4602" title="Low-rank matrix factorization of a incomplete matrix into two factors. ">lmf_igd_run()</a> stored procedure. <pre class="example">
+DROP TABLE IF EXISTS lmf_model;
+SELECT madlib.lmf_igd_run( 'lmf_model',
+                           'lmf_data',
+                           'row',
+                           'col',
+                           'val',
+                           999,
+                           10000,
+                           3,
+                           0.1,
+                           2,
+                           10,
+                           1e-9
+                         );
+</pre> Example result (the exact result may not be the same). <pre class="result">
+NOTICE:
+Finished low-rank matrix factorization using incremental gradient
+DETAIL:
+   table : lmf_data (row, col, val)
+Results:
+   RMSE = 0.0145966345300041
+Output:
+   view : SELECT * FROM lmf_model WHERE id = 1
+ lmf_igd_run
+&#160;-----------
+           1
+ (1 row)
+</pre></li>
+<li>Sanity check of the result. You may need a model id returned and also indicated by the function <a class="el" href="lmf_8sql__in.html#ac1acb1f0e1f7008118f21c83546a4602" title="Low-rank matrix factorization of a incomplete matrix into two factors. ">lmf_igd_run()</a>, assuming 1 here: <pre class="example">
+SELECT array_dims(matrix_u) AS u_dims, array_dims(matrix_v) AS v_dims
+FROM lmf_model
+WHERE id = 1;
+</pre> Result: <pre class="result">
+     u_dims    |     v_dims
+ --------------+----------------
+  [1:999][1:3] | [1:10000][1:3]
+ (1 row)
+</pre></li>
+<li>Query the result value. <pre class="example">
+SELECT matrix_u[2:2][1:3] AS row_2_features
+FROM lmf_model
+WHERE id = 1;
+</pre> Example output (the exact result may not be the same): <pre class="result">
+                       row_2_features
+&#160;---------------------------------------------------------
+  {{1.12030523084104,0.522217971272767,0.0264869043603539}}
+ (1 row)
+</pre></li>
+<li>Make prediction of a missing entry (row=2, col=7654). <pre class="example">
+SELECT madlib.array_dot(
+    matrix_u[2:2][1:3],
+    matrix_v[7654:7654][1:3]
+    ) AS row_2_col_7654
+FROM lmf_model
+WHERE id = 1;
+</pre> Example output (the exact result may not be the same due the randomness of the algorithm): <pre class="result">
+   row_2_col_7654
+&#160;------------------
+  1.3201582940851
+ (1 row)
+</pre></li>
+</ol>
+<p><a class="anchor" id="literature"></a></p><dl class="section user"><dt>Literature</dt><dd></dd></dl>
+<p>[1] N. Srebro and T. Jaakkola. “Weighted Low-Rank Approximations.” In: ICML. Ed. by T. Fawcett and N. Mishra. AAAI Press, 2003, pp. 720–727. isbn: 1-57735-189-4.</p>
+<p>[2] Simon Funk, Netflix Update: Try This at Home, December 11 2006, <a href="http://sifter.org/~simon/journal/20061211.html">http://sifter.org/~simon/journal/20061211.html</a></p>
+<p>[3] J. Wright, A. Ganesh, S. Rao, Y. Peng, and Y. Ma. “Robust Principal Component Analysis: Exact Recovery of Corrupted Low-Rank Matrices via Convex Optimization.” In: NIPS. Ed. by Y. Bengio, D. Schuurmans, J. D. Lafferty, C. K. I. Williams, and A. Culotta. Curran Associates, Inc., 2009, pp. 2080–2088. isbn: 9781615679119. </p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__logreg.html b/docs/rc/group__grp__logreg.html
new file mode 100644
index 0000000..3ad176e
--- /dev/null
+++ b/docs/rc/group__grp__logreg.html
@@ -0,0 +1,500 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Logistic Regression</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__logreg.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Logistic Regression<div class="ingroups"><a class="el" href="group__grp__super.html">Supervised Learning</a> &raquo; <a class="el" href="group__grp__regml.html">Regression Models</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b><ul>
+<li class="level1">
+<a href="#train">Training Function</a> </li>
+<li class="level1">
+<a href="#predict">Prediction Function</a> </li>
+<li class="level1">
+<a href="#examples">Examples</a> </li>
+<li class="level1">
+<a href="#background">Technical Background</a> </li>
+<li class="level1">
+<a href="#literature">Literature</a> </li>
+<li class="level1">
+<a href="#related">Related Topics</a> </li>
+</ul>
+</div><p>Binomial logistic regression models the relationship between a dichotomous dependent variable and one or more predictor variables. The dependent variable may be a Boolean value or a categorial variable that can be represented with a Boolean expression. The probabilities describing the possible outcomes of a single trial are modeled, as a function of the predictor variables, using a logistic function.</p>
+<p><a class="anchor" id="train"></a></p><dl class="section user"><dt>Training Function</dt><dd>The logistic regression training function has the following format: <pre class="syntax">
+logregr_train( source_table,
+               out_table,
+               dependent_varname,
+               independent_varname,
+               grouping_cols,
+               max_iter,
+               optimizer,
+               tolerance,
+               verbose
+             )
+</pre> <b>Arguments</b> <dl class="arglist">
+<dt>source_table </dt>
+<dd><p class="startdd">TEXT. Name of the table containing the training data.</p>
+<p class="enddd"></p>
+</dd>
+<dt>out_table </dt>
+<dd><p class="startdd">TEXT. Name of the generated table containing the output model.</p>
+<p>The output table produced by the logistic regression training function contains the following columns:</p>
+<table class="output">
+<tr>
+<th>&lt;...&gt; </th><td><p class="starttd">TEXT. Grouping columns, if provided in input. This could be multiple columns depending on the <code>grouping_cols</code> input. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>coef </th><td><p class="starttd">FLOAT8. Vector of the coefficients of the regression. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>log_likelihood </th><td><p class="starttd">FLOAT8. The log-likelihood \( l(\boldsymbol c) \). </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>std_err </th><td><p class="starttd">FLOAT8[]. Vector of the standard error of the coefficients. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>z_stats </th><td><p class="starttd">FLOAT8[]. Vector of the z-statistics of the coefficients. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>p_values </th><td><p class="starttd">FLOAT8[]. Vector of the p-values of the coefficients. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>odds_ratios </th><td><p class="starttd">FLOAT8[]. The odds ratio, \( \exp(c_i) \). </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>condition_no </th><td><p class="starttd">FLOAT8[]. The condition number of the \(X^{*}X\) matrix. A high condition number is usually an indication that there may be some numeric instability in the result yielding a less reliable model. A high condition number often results when there is a significant amount of colinearity in the underlying design matrix, in which case other regression techniques may be more appropriate. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>num_rows_processed </th><td><p class="starttd">INTEGER. The number of rows actually processed, which is equal to the total number of rows in the source table minus the number of skipped rows. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>num_missing_rows_skipped </th><td><p class="starttd">INTEGER. The number of rows skipped during the training. A row will be skipped if the independent_varname is NULL or contains NULL values. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>num_iterations </th><td><p class="starttd">INTEGER. The number of iterations actually completed. This would be different from the <code>nIterations</code> argument if a <code>tolerance</code> parameter is provided and the algorithm converges before all iterations are completed. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>variance_covariance </th><td>FLOAT[]. Variance/covariance matrix.  </td></tr>
+</table>
+<p>A summary table named &lt;out_table&gt;_summary is also created at the same time, which has the following columns: </p><table class="output">
+<tr>
+<th>method </th><td><p class="starttd">'logregr' for logistic regression. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>source_table </th><td><p class="starttd">The data source table name. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>out_table </th><td><p class="starttd">The output table name. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>dependent_varname </th><td><p class="starttd">The dependent variable name. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>independent_varname </th><td><p class="starttd">The independent variable names. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>optimizer_params </th><td><p class="starttd">A string that contains all the optimizer parameters, and has the form of 'optimizer=..., max_iter=..., tolerance=...' </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>num_all_groups </th><td><p class="starttd">How many groups of data were fit by the logistic model. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>num_failed_groups </th><td><p class="starttd">How many groups failed in training. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>num_rows_processed </th><td><p class="starttd">The total number of rows used in the computation. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>num_missing_rows_skipped </th><td><p class="starttd">The total number of rows skipped. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>grouping_cols </th><td>Names of the grouping columns.  </td></tr>
+</table>
+<p class="enddd"></p>
+</dd>
+<dt>dependent_varname </dt>
+<dd><p class="startdd">TEXT. Name of the dependent variable column (of type BOOLEAN) in the training data, or an expression evaluating to a BOOLEAN.</p>
+<p class="enddd"></p>
+</dd>
+<dt>independent_varname </dt>
+<dd><p class="startdd">TEXT. Expression list to evaluate for the independent variables. An intercept variable is not assumed so it is common to provide an explicit intercept term by including a single constant <code>1</code> term in the independent variable list.</p>
+<p class="enddd"></p>
+</dd>
+<dt>grouping_cols (optional) </dt>
+<dd><p class="startdd">TEXT, default: NULL. An expression list used to group the input dataset into discrete groups, running one regression per group. Similar to the SQL "GROUP BY" clause. When this value is NULL, no grouping is used and a single model is generated for the whole data set.</p>
+<p class="enddd"></p>
+</dd>
+<dt>max_iter (optional) </dt>
+<dd><p class="startdd">INTEGER, default: 20. The maximum number of iterations allowed.</p>
+<p class="enddd"></p>
+</dd>
+<dt>optimizer (optional) </dt>
+<dd><p class="startdd">TEXT, default: 'irls'. The name of the optimizer to use: </p><table class="output">
+<tr>
+<th>'newton' or 'irls' </th><td>Iteratively reweighted least squares  </td></tr>
+<tr>
+<th>'cg' </th><td>conjugate gradient  </td></tr>
+<tr>
+<th>'igd' </th><td>incremental gradient descent.  </td></tr>
+</table>
+<p class="enddd"></p>
+</dd>
+<dt>tolerance (optional) </dt>
+<dd><p class="startdd">FLOAT8, default: 0.0001. The difference between log-likelihood values in successive iterations that indicate convergence. A zero disables the convergence criterion, so that execution stops after the maximum iterations have completed, as set in the 'max_iter' parameter above.</p>
+<p class="enddd"></p>
+</dd>
+<dt>verbose (optional) </dt>
+<dd>BOOLEAN, default: FALSE. Provides verbose output of the results of training. </dd>
+</dl>
+</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>For p-values, we just return the computation result directly. Other statistical packages like 'R' produce the same result, but on printing the result to screen, another format function is used and any p-value that is smaller than the machine epsilon (the smallest positive floating-point number 'x' such that '1 + x != 1') will be printed on screen as "&lt; xxx" (xxx is the value of the machine epsilon). Although the result may look different, they are in fact the same.</dd></dl>
+<p><a class="anchor" id="predict"></a></p><dl class="section user"><dt>Prediction Function</dt><dd>Two prediction functions are provided. One predicts the boolean value of the dependent variable, and the other predicts the probability of the value of the dependent variable being 'True'. Syntax is the same for both functions.</dd></dl>
+<p>The function to predict the boolean value (True/False) of the dependent variable has the following syntax: </p><pre class="syntax">
+logregr_predict(coefficients,
+                ind_var
+               )
+</pre><p>The function to predict the probability of the dependent variable being 'True' has the following syntax: </p><pre class="syntax">
+logregr_predict_prob(coefficients,
+                     ind_var
+                    )
+</pre><p><b>Arguments</b> </p><dl class="arglist">
+<dt>coefficients </dt>
+<dd><p class="startdd">DOUBLE PRECISION[]. Model coefficients obtained from training <a class="el" href="logistic_8sql__in.html#a74210a7ef513dfcbdfdd9f3b37bfe428">logregr_train()</a>.</p>
+<p class="enddd"></p>
+</dd>
+<dt>ind_var </dt>
+<dd>Independent variables expressed as a DOUBLE array. This should be the same length as the array obtained by evaluation of the 'independent_varname' argument in <a class="el" href="logistic_8sql__in.html#a74210a7ef513dfcbdfdd9f3b37bfe428">logregr_train()</a>. </dd>
+</dl>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd><ol type="1">
+<li>Create the training data table. This data set is related to predicting a second heart attack given treatment and health factors. <pre class="example">
+DROP TABLE IF EXISTS patients;
+CREATE TABLE patients( id INTEGER NOT NULL,
+                       second_attack INTEGER,
+                       treatment INTEGER,
+                       trait_anxiety INTEGER);
+INSERT INTO patients VALUES
+(1,  1, 1, 70),
+(2,  1, 1, 80),
+(3,  1, 1, 50),
+(4,  1, 0, 60),
+(5,  1, 0, 40),
+(6,  1, 0, 65),
+(7,  1, 0, 75),
+(8,  1, 0, 80),
+(9,  1, 0, 70),
+(10, 1, 0, 60),
+(11, 0, 1, 65),
+(12, 0, 1, 50),
+(13, 0, 1, 45),
+(14, 0, 1, 35),
+(15, 0, 1, 40),
+(16, 0, 1, 50),
+(17, 0, 0, 55),
+(18, 0, 0, 45),
+(19, 0, 0, 50),
+(20, 0, 0, 60);
+</pre></li>
+<li>Train a regression model. <pre class="example">
+DROP TABLE IF EXISTS patients_logregr, patients_logregr_summary;
+SELECT madlib.logregr_train( 'patients',                             -- Source table
+                             'patients_logregr',                     -- Output table
+                             'second_attack',                        -- Dependent variable
+                             'ARRAY[1, treatment, trait_anxiety]',   -- Feature vector
+                             NULL,                                   -- Grouping
+                             20,                                     -- Max iterations
+                             'irls'                                  -- Optimizer to use
+                           );
+</pre> Note that in the example above we are dynamically creating the array of independent variables from column names. If you have large numbers of independent variables beyond the PostgreSQL limit of maximum columns per table, you would typically pre-build the arrays and store them in a single column.</li>
+<li>View the regression results. <pre class="example">
+-- Set extended display on for easier reading of output
+\x on
+SELECT * from patients_logregr;
+</pre> Result: <pre class="result">
+coef                     | {-6.36346994178192,-1.02410605239327,0.119044916668607}
+log_likelihood           | -9.41018298388876
+std_err                  | {3.21389766375099,1.17107844860319,0.0549790458269317}
+z_stats                  | {-1.97998524145757,-0.874498248699539,2.16527796868916}
+p_values                 | {0.0477051870698145,0.381846973530455,0.0303664045046183}
+odds_ratios              | {0.00172337630923221,0.359117354054956,1.12642051220895}
+condition_no             | 326.081922791575
+num_rows_processed       | 20
+num_missing_rows_skipped | 0
+num_iterations           | 5
+variance_covariance      | {{10.329138193064,-0.474304665195738,-0.171995901260057}, ...
+</pre></li>
+<li>Alternatively, unnest the arrays in the results for easier reading of output: <pre class="example">
+\x off
+SELECT unnest(array['intercept', 'treatment', 'trait_anxiety']) as attribute,
+       unnest(coef) as coefficient,
+       unnest(std_err) as standard_error,
+       unnest(z_stats) as z_stat,
+       unnest(p_values) as pvalue,
+       unnest(odds_ratios) as odds_ratio
+    FROM patients_logregr;
+</pre> Result: <pre class="result">
+   attribute   |    coefficient    |   standard_error   |       z_stat       |       pvalue       |     odds_ratio
+---------------+-------------------+--------------------+--------------------+--------------------+---------------------
+ intercept     | -6.36346994178192 |   3.21389766375099 |  -1.97998524145757 | 0.0477051870698145 | 0.00172337630923221
+ treatment     | -1.02410605239327 |   1.17107844860319 | -0.874498248699539 |  0.381846973530455 |   0.359117354054956
+ trait_anxiety | 0.119044916668607 | 0.0549790458269317 |   2.16527796868916 | 0.0303664045046183 |    1.12642051220895
+(3 rows)
+</pre></li>
+<li>Predict the dependent variable using the logistic regression model. (This example uses the original data table to perform the prediction. Typically a different test dataset with the same features as the original training dataset would be used for prediction.) <pre class="example">
+\x off
+-- Display prediction value along with the original value
+SELECT p.id, madlib.logregr_predict(coef, ARRAY[1, treatment, trait_anxiety]),
+       p.second_attack::BOOLEAN
+FROM patients p, patients_logregr m
+ORDER BY p.id;
+</pre> Result: <pre class="result">
+  id | logregr_predict | second_attack
+----+-----------------+---------------
+  1 | t               | t
+  2 | t               | t
+  3 | f               | t
+  4 | t               | t
+  5 | f               | t
+  6 | t               | t
+  7 | t               | t
+  8 | t               | t
+  9 | t               | t
+ 10 | t               | t
+ 11 | t               | f
+ 12 | f               | f
+ 13 | f               | f
+ 14 | f               | f
+ 15 | f               | f
+ 16 | f               | f
+ 17 | t               | f
+ 18 | f               | f
+ 19 | f               | f
+ 20 | t               | f
+(20 rows)
+</pre></li>
+<li>Predict the probability of the dependent variable being TRUE. <pre class="example">
+\x off
+-- Display prediction value along with the original value
+SELECT p.id, madlib.logregr_predict_prob(coef, ARRAY[1, treatment, trait_anxiety]),
+       p.second_attack::BOOLEAN
+FROM patients p, patients_logregr m
+ORDER BY p.id;
+</pre> Result: <pre class="result">
+ id | logregr_predict_prob | second_attack
+----+----------------------+---------------
+  1 |    0.720223028941527 | t
+  2 |    0.894354902502048 | t
+  3 |    0.192269541755171 | t
+  4 |    0.685513072239347 | t
+  5 |    0.167747881508857 | t
+  6 |     0.79809810891514 | t
+  7 |    0.928568075752503 | t
+  8 |    0.959305763693571 | t
+  9 |    0.877576117431452 | t
+ 10 |    0.685513072239347 | t
+ 11 |    0.586700895943317 | f
+ 12 |    0.192269541755171 | f
+ 13 |    0.116032010632994 | f
+ 14 |   0.0383829143134982 | f
+ 15 |   0.0674976224147597 | f
+ 16 |    0.192269541755171 | f
+ 17 |    0.545870774302621 | f
+ 18 |    0.267675422387132 | f
+ 19 |    0.398618639285111 | f
+ 20 |    0.685513072239347 | f
+(20 rows)
+</pre></li>
+</ol>
+</dd></dl>
+<p><a class="anchor" id="notes"></a></p><dl class="section user"><dt>Notes</dt><dd>All table names can be optionally schema qualified (current_schemas() would be searched if a schema name is not provided) and all table and column names should follow case-sensitivity and quoting rules per the database. (For instance, 'mytable' and 'MyTable' both resolve to the same entity, i.e. 'mytable'. If mixed-case or multi-byte characters are desired for entity names then the string should be double-quoted; in this case the input would be '"MyTable"').</dd></dl>
+<p><a class="anchor" id="background"></a></p><dl class="section user"><dt>Technical Background</dt><dd></dd></dl>
+<p>(Binomial) logistic regression refers to a stochastic model in which the conditional mean of the dependent dichotomous variable (usually denoted \( Y \in \{ 0,1 \} \)) is the logistic function of an affine function of the vector of independent variables (usually denoted \( \boldsymbol x \)). That is, </p><p class="formulaDsp">
+\[ E[Y \mid \boldsymbol x] = \sigma(\boldsymbol c^T \boldsymbol x) \]
+</p>
+<p> for some unknown vector of coefficients \( \boldsymbol c \) and where \( \sigma(x) = \frac{1}{1 + \exp(-x)} \) is the logistic function. Logistic regression finds the vector of coefficients \( \boldsymbol c \) that maximizes the likelihood of the observations.</p>
+<p>Let</p><ul>
+<li>\( \boldsymbol y \in \{ 0,1 \}^n \) denote the vector of observed dependent variables, with \( n \) rows, containing the observed values of the dependent variable,</li>
+<li>\( X \in \mathbf R^{n \times k} \) denote the design matrix with \( k \) columns and \( n \) rows, containing all observed vectors of independent variables \( \boldsymbol x_i \) as rows.</li>
+</ul>
+<p>By definition, </p><p class="formulaDsp">
+\[ P[Y = y_i | \boldsymbol x_i] = \sigma((-1)^{(1 - y_i)} \cdot \boldsymbol c^T \boldsymbol x_i) \,. \]
+</p>
+<p> Maximizing the likelihood \( \prod_{i=1}^n \Pr(Y = y_i \mid \boldsymbol x_i) \) is equivalent to maximizing the log-likelihood \( \sum_{i=1}^n \log \Pr(Y = y_i \mid \boldsymbol x_i) \), which simplifies to </p><p class="formulaDsp">
+\[ l(\boldsymbol c) = -\sum_{i=1}^n \log(1 + \exp((-1)^{(1 - y_i)} \cdot \boldsymbol c^T \boldsymbol x_i)) \,. \]
+</p>
+<p> The Hessian of this objective is \( H = -X^T A X \) where \( A = \text{diag}(a_1, \dots, a_n) \) is the diagonal matrix with \( a_i = \sigma(\boldsymbol c^T \boldsymbol x) \cdot \sigma(-\boldsymbol c^T \boldsymbol x) \,. \) Since \( H \) is non-positive definite, \( l(\boldsymbol c) \) is convex. There are many techniques for solving convex optimization problems. Currently, logistic regression in MADlib can use one of three algorithms:</p><ul>
+<li>Iteratively Reweighted Least Squares</li>
+<li>A conjugate-gradient approach, also known as Fletcher-Reeves method in the literature, where we use the Hestenes-Stiefel rule for calculating the step size.</li>
+<li>Incremental gradient descent, also known as incremental gradient methods or stochastic gradient descent in the literature.</li>
+</ul>
+<p>We estimate the standard error for coefficient \( i \) as </p><p class="formulaDsp">
+\[ \mathit{se}(c_i) = \left( (X^T A X)^{-1} \right)_{ii} \,. \]
+</p>
+<p> The Wald z-statistic is </p><p class="formulaDsp">
+\[ z_i = \frac{c_i}{\mathit{se}(c_i)} \,. \]
+</p>
+<p>The Wald \( p \)-value for coefficient \( i \) gives the probability (under the assumptions inherent in the Wald test) of seeing a value at least as extreme as the one observed, provided that the null hypothesis ( \( c_i = 0 \)) is true. Letting \( F \) denote the cumulative density function of a standard normal distribution, the Wald \( p \)-value for coefficient \( i \) is therefore </p><p class="formulaDsp">
+\[ p_i = \Pr(|Z| \geq |z_i|) = 2 \cdot (1 - F( |z_i| )) \]
+</p>
+<p> where \( Z \) is a standard normally distributed random variable.</p>
+<p>The odds ratio for coefficient \( i \) is estimated as \( \exp(c_i) \).</p>
+<p>The condition number is computed as \( \kappa(X^T A X) \) during the iteration immediately <em>preceding</em> convergence (i.e., \( A \) is computed using the coefficients of the previous iteration). A large condition number (say, more than 1000) indicates the presence of significant multicollinearity.</p>
+<p><a class="anchor" id="literature"></a></p><dl class="section user"><dt>Literature</dt><dd></dd></dl>
+<p>A selection of references pertaining to logistic regression, with some good pointers to other literature.</p>
+<p>[1] Cosma Shalizi: Statistics 36-350: Data Mining, Lecture Notes, 18 November 2009, <a href="http://www.stat.cmu.edu/~cshalizi/350/lectures/26/lecture-26.pdf">http://www.stat.cmu.edu/~cshalizi/350/lectures/26/lecture-26.pdf</a></p>
+<p>[2] Thomas P. Minka: A comparison of numerical optimizers for logistic regression, 2003 (revised Mar 26, 2007), <a href="http://research.microsoft.com/en-us/um/people/minka/papers/logreg/minka-logreg.pdf">http://research.microsoft.com/en-us/um/people/minka/papers/logreg/minka-logreg.pdf</a></p>
+<p>[3] Paul Komarek, Andrew W. Moore: Making Logistic Regression A Core Data Mining Tool With TR-IRLS, IEEE International Conference on Data Mining 2005, pp. 685-688, <a href="http://komarix.org/ac/papers/tr-irls.short.pdf">http://komarix.org/ac/papers/tr-irls.short.pdf</a></p>
+<p>[4] D. P. Bertsekas: Incremental gradient, subgradient, and proximal methods for convex optimization: a survey, Technical report, Laboratory for Information and Decision Systems, 2010, <a href="http://web.mit.edu/dimitrib/www/Incremental_Survey_LIDS.pdf">http://web.mit.edu/dimitrib/www/Incremental_Survey_LIDS.pdf</a></p>
+<p>[5] A. Nemirovski, A. Juditsky, G. Lan, and A. Shapiro: Robust stochastic approximation approach to stochastic programming, SIAM Journal on Optimization, 19(4), 2009, <a href="http://www2.isye.gatech.edu/~nemirovs/SIOPT_RSA_2009.pdf">http://www2.isye.gatech.edu/~nemirovs/SIOPT_RSA_2009.pdf</a></p>
+<p><a class="anchor" id="related"></a></p><dl class="section user"><dt>Related Topics</dt><dd></dd></dl>
+<p>File <a class="el" href="logistic_8sql__in.html" title="SQL functions for logistic regression. ">logistic.sql_in</a> documenting the training function</p>
+<p><a class="el" href="logistic_8sql__in.html#a74210a7ef513dfcbdfdd9f3b37bfe428" title="Compute logistic-regression coefficients and diagnostic statistics. ">logregr_train()</a></p>
+<p><a class="el" href="elastic__net_8sql__in.html#a735038a5090c112505c740a90a203e83" title="Interface for elastic net. ">elastic_net_train()</a></p>
+<p><a class="el" href="group__grp__linreg.html">Linear Regression</a></p>
+<p><a class="el" href="group__grp__multinom.html">Multinomial Regression</a></p>
+<p><a class="el" href="group__grp__ordinal.html">Ordinal Regression</a></p>
+<p><a class="el" href="group__grp__robust.html">Robust Variance</a></p>
+<p><a class="el" href="group__grp__clustered__errors.html">Clustered Variance</a></p>
+<p><a class="el" href="group__grp__validation.html">Cross Validation</a></p>
+<p><a class="el" href="group__grp__marginal.html">Marginal Effects</a></p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:59 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__marginal.html b/docs/rc/group__grp__marginal.html
new file mode 100644
index 0000000..806b1c9
--- /dev/null
+++ b/docs/rc/group__grp__marginal.html
@@ -0,0 +1,433 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Marginal Effects</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__marginal.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Marginal Effects<div class="ingroups"><a class="el" href="group__grp__super.html">Supervised Learning</a> &raquo; <a class="el" href="group__grp__regml.html">Regression Models</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li>
+<a href="#margins">Marginal Effects with Interaction Terms</a> </li>
+<li>
+<a href="#examples">Examples</a> </li>
+<li>
+<a href="#notes">Notes</a> </li>
+<li>
+<a href="#background">Technical Background</a> </li>
+<li>
+<a href="#literature">Literature</a> </li>
+<li>
+<a href="#related">Related Topics</a> </li>
+</ul>
+</div><p>A marginal effect (ME) or partial effect measures the effect on the conditional mean of \( y \) for a change in one of the regressors, say \(X_k\). In the linear regression model, the ME equals the relevant slope coefficient, greatly simplifying analysis. For nonlinear models, specialized algorithms are required for calculating ME. The marginal effect computed is the average of the marginal effect at every data point present in the source table.</p>
+<p>MADlib provides marginal effects regression functions for linear, logistic and multinomial logistic regressions.</p>
+<dl class="section warning"><dt>Warning</dt><dd>The <a class="el" href="marginal_8sql__in.html#a9517d679ee4209126895445cbed51fe3">margins_logregr()</a> and <a class="el" href="marginal_8sql__in.html#ae39ad0e1beca060fd153dba35901a4e7">margins_mlogregr()</a> functions have been deprecated in favor of the <a class="el" href="marginal_8sql__in.html#a36fcae5245ca31517723fce38b183c90" title="Marginal effects with default variable_names. ">margins()</a> function.</dd></dl>
+<p><a class="anchor" id="margins"></a></p><dl class="section user"><dt>Marginal Effects with Interaction Terms</dt><dd><pre class="syntax">
+margins( model_table,
+         output_table,
+         x_design,
+         source_table,
+         marginal_vars
+       )
+</pre> <b>Arguments</b> <dl class="arglist">
+<dt>model_table </dt>
+<dd>VARCHAR. The name of the model table, which is the output of <a class="el" href="logistic_8sql__in.html#a74210a7ef513dfcbdfdd9f3b37bfe428" title="Compute logistic-regression coefficients and diagnostic statistics. ">logregr_train()</a> or <a class="el" href="multilogistic_8sql__in.html#aedc13474e6abbc88451d120ad97e44d4" title="Compute multinomial logistic regression coefficients. ">mlogregr_train()</a>. </dd>
+<dt>output_table </dt>
+<dd>VARCHAR. The name of the result table. The output table has the following columns. <table class="output">
+<tr>
+<th>variables </th><td>INTEGER[]. The indices of the basis variables.  </td></tr>
+<tr>
+<th>margins </th><td>DOUBLE PRECISION[]. The marginal effects.  </td></tr>
+<tr>
+<th>std_err </th><td>DOUBLE PRECISION[]. An array of the standard errors, computed using the delta method.  </td></tr>
+<tr>
+<th>z_stats </th><td>DOUBLE PRECISION[]. An array of the z-stats of the marginal effects.  </td></tr>
+<tr>
+<th>p_values </th><td>DOUBLE PRECISION[]. An array of the Wald p-values of the marginal effects.  </td></tr>
+</table>
+</dd>
+<dt>x_design (optional) </dt>
+<dd><p class="startdd">VARCHAR, default: NULL. The design of independent variables, necessary only if interaction term or indicator (categorical) terms are present. This parameter is necessary since the independent variables in the underlying regression is not parsed to extract the relationship between variables.</p>
+<p>Example: The <em>independent_varname</em> in the regression method can be specified in either of the following ways:</p><ul>
+<li><code> ‘array[1, color_blue, color_green, gender_female, gpa, gpa^2, gender_female*gpa, gender_female*gpa^2, weight]’ </code></li>
+<li><code> ‘x’ </code></li>
+</ul>
+<p>In the second version, the column <em>x</em> is an array containing data identical to that expressed in the first version, computed in a prior data preparation step. Supply an <em>x_design argument</em> to the <a class="el" href="marginal_8sql__in.html#a36fcae5245ca31517723fce38b183c90" title="Marginal effects with default variable_names. ">margins()</a> function in the following way:</p><ul>
+<li><code> ‘1, i.color_blue.color, i.color_green.color, i.gender_female, gpa, gpa^2, gender_female*gpa, gender_female*gpa^2, weight’</code></li>
+</ul>
+<p>The variable names (<em>'gpa', 'weight', ...</em>), referred to here as <em>identifiers</em>, should be unique for each basis variable and need not be the same as the original variable name in <em>independent_varname</em>. They should, however, be in the same order as the corresponding variables in <em>independent_varname</em>. The length of <em>x_design</em> is expected to be the same as the length of <em>independent_varname</em>. Each <em>identifier</em> name can contain only alphanumeric characters and the underscore.</p>
+<p>Indicator (dummy) variables are prefixed with an 'i.' (This is only necessary for the basis term; it is not needed in the interaction terms.) Indicator variables that are obtained from the same categorical variable (for example, 'color_blue' and 'color_green') need to have a common and unique suffix (for example, '.color'). The '.' is used to add the prefix and suffix. If a reference indicator variable is present, it should contain the prefix 'ir.'.</p>
+<p>An identifier may contain alphanumeric characters and underscores. To include other characters, the string must be double-quoted. Escape-characters are not currently supported. </p>
+<p class="enddd"></p>
+</dd>
+<dt>source_table (optional) </dt>
+<dd><p class="startdd">VARCHAR, default: NULL. Name of the data table to apply marginal effects on. If not provided or NULL then the marginal effects are computed on the training table.</p>
+<p class="enddd"></p>
+</dd>
+<dt>marginal_vars (optional) </dt>
+<dd>VARCHAR, default: NULL. Comma-separated string containing specific variable identifiers to calculate marginal effects on. When NULL, marginal effects for all variables are returned. </dd>
+</dl>
+</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>No output will be provided for the reference indicator variable, since the marginal effect for that variable is undefined. If a reference variable is included in the independent variables and <em>marginal_vars</em>, the <a class="el" href="marginal_8sql__in.html#a36fcae5245ca31517723fce38b183c90" title="Marginal effects with default variable_names. ">margins()</a> function will ignore that variable for the output. The variable can still be included in the regression and margins, since it will affect the values for other related indicator variables.</dd></dl>
+<p><a class="anchor" id="logregr_train"></a></p><dl class="section user"><dt>Marginal Effects for Logistic Regression</dt><dd></dd></dl>
+<dl class="section warning"><dt>Warning</dt><dd>This function has been deprecated in favor of the <a class="el" href="marginal_8sql__in.html#a36fcae5245ca31517723fce38b183c90" title="Marginal effects with default variable_names. ">margins()</a> function.</dd></dl>
+<pre class="syntax">
+margins_logregr( source_table,
+                 output_table,
+                 dependent_variable,
+                 independent_variable,
+                 grouping_cols,
+                 marginal_vars,
+                 max_iter,
+                 optimizer,
+                 tolerance,
+                 verbose_mode
+               )
+</pre><p> <b>Arguments</b> </p><dl class="arglist">
+<dt>source_table </dt>
+<dd>VARCHAR. The name of the data table. </dd>
+<dt>output_table </dt>
+<dd><p class="startdd">VARCHAR. The name of the result table. The output table has the following columns. </p><table class="output">
+<tr>
+<th>margins </th><td>DOUBLE PRECISION[]. The marginal effects.  </td></tr>
+<tr>
+<th>std_err </th><td>DOUBLE PRECISION[]. An array of the standard errors, using the delta method.  </td></tr>
+<tr>
+<th>z_stats </th><td>DOUBLE PRECISION[]. An array of the z-stats of the marginal effects.  </td></tr>
+<tr>
+<th>p_values </th><td>DOUBLE PRECISION[]. An array of the Wald p-values of the marginal effects.  </td></tr>
+</table>
+<p>A summary table named &lt;output_table&gt;_summary is also created, which is the same as the summary table created by <a class="el" href="logistic_8sql__in.html#a74210a7ef513dfcbdfdd9f3b37bfe428" title="Compute logistic-regression coefficients and diagnostic statistics. ">logregr_train()</a> function. Refer to the documentation for logistic regression for details.</p>
+<p class="enddd"></p>
+</dd>
+<dt>dependent_variable </dt>
+<dd>VARCHAR. The name of the column for dependent variables. </dd>
+<dt>independent_variable </dt>
+<dd>VARCHAR. The name of the column for independent variables. Can be any SQL expression that evaluates to an array. </dd>
+<dt>grouping_cols (optional) </dt>
+<dd>VARCHAR, default: NULL. <em>Not currently implemented. Any non-NULL value is ignored.</em> An expression list used to group the input dataset into discrete groups, running one regression per group. Similar to the SQL "GROUP BY" clause. When this value is NULL, no grouping is used and a single result model is generated. </dd>
+<dt>marginal_vars (optional) </dt>
+<dd>INTEGER[], default: NULL. An index list (base 1) representing the independent variables to compute marginal effects on. When NULL, computes marginal effects on all variables. </dd>
+<dt>max_iter (optional) </dt>
+<dd>INTEGER, default: 20. The maximum number of iterations for the logistic regression. </dd>
+<dt>optimizer (optional) </dt>
+<dd>VARCHAR, default: 'irls'. The optimizer to use for the logistic regression: newton/irls, cg, or igd. </dd>
+<dt>tolerance (optional) </dt>
+<dd>DOUBLE PRECISION, default: 1e-4. Termination criterion for logistic regression (relative). </dd>
+<dt>verbose_mode (optional) </dt>
+<dd>BOOLEAN, default FALSE. When TRUE, provides verbose output of the results of training.  </dd>
+</dl>
+<p><a class="anchor" id="mlogregr_train"></a></p><dl class="section user"><dt>Marginal Effects for Multinomial Logistic Regression</dt><dd></dd></dl>
+<dl class="section warning"><dt>Warning</dt><dd>This function has been deprecated in favor of the <a class="el" href="marginal_8sql__in.html#a36fcae5245ca31517723fce38b183c90" title="Marginal effects with default variable_names. ">margins()</a> function.</dd></dl>
+<pre class="syntax">
+margins_mlogregr( source_table,
+                  out_table,
+                  dependent_varname,
+                  independent_varname,
+                  ref_category,
+                  grouping_cols,
+                  marginal_vars,
+                  optimizer_params,
+                  verbose_mode
+                )
+</pre><p> <b>Arguments</b> </p><dl class="arglist">
+<dt>source_table </dt>
+<dd>VARCHAR. The name of data table. </dd>
+<dt>out_table </dt>
+<dd><p class="startdd">VARCHAR. The name of result table. The output table has the following columns. </p><table class="output">
+<tr>
+<th>category </th><td>The category.  </td></tr>
+<tr>
+<th>ref_category </th><td>The refererence category used for modeling.  </td></tr>
+<tr>
+<th>margins </th><td>DOUBLE PRECISION[]. The marginal effects.  </td></tr>
+<tr>
+<th>std_err </th><td>DOUBLE PRECISION[]. An array of the standard errors, using the delta method.  </td></tr>
+<tr>
+<th>z_stats </th><td>DOUBLE PRECISION[]. An array of the z-stats of the marginal effects.  </td></tr>
+<tr>
+<th>p_values </th><td>DOUBLE PRECISION[]. An array of the Wald p-values of the marginal effects.  </td></tr>
+</table>
+<p>A summary table named &lt;out_table&gt;_summary is also created, which is the same as the summary table created by <a class="el" href="multilogistic_8sql__in.html#aedc13474e6abbc88451d120ad97e44d4" title="Compute multinomial logistic regression coefficients. ">mlogregr_train()</a> function. Refer to the documentation for multinomial logistic regression for details.</p>
+<p class="enddd"></p>
+</dd>
+<dt>dependent_varname </dt>
+<dd>VARCHAR. The name of the column for dependent variables. </dd>
+<dt>independent_varname </dt>
+<dd>VARCHAR. The name of the column for independent variables. Can be any SQL expression that evaluates to an array. </dd>
+<dt>ref_category (optional) </dt>
+<dd>INTEGER, default: 0. Reference category for the multinomial logistic regression. </dd>
+<dt>grouping_cols (optional) </dt>
+<dd>VARCHAR, default: NULL. <em>Not currently implemented. Any non-NULL value is ignored.</em> An expression list used to group the input dataset into discrete groups, running one regression per group. Similar to the SQL "GROUP BY" clause. When this value is NULL, no grouping is used and a single result model is generated. </dd>
+<dt>marginal_vars(optional) </dt>
+<dd>INTEGER[], default: NULL. An index list (base 1) representing the independent variables to compute marginal effects on. When NULL, computes marginal effects on all variables. </dd>
+<dt>optimizer_params (optional) </dt>
+<dd>TEXT, default: NULL, which uses the default values of optimizer parameters: max_iter=20, optimizer='newton', tolerance=1e-4. It should be a string that contains 'key=value' pairs separated by commas. </dd>
+<dt>verbose_mode (optional) </dt>
+<dd>BOOLEAN, default FALSE. When TRUE, provides verbose output of the results of training.  </dd>
+</dl>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<ol type="1">
+<li>View online help for the marginal effects function. <pre class="example">
+SELECT madlib.margins();
+</pre></li>
+<li>Create the sample data set. Use the <code>patients</code> dataset from the <a href="group__grp__logreg.html#examples">Logistic Regression examples</a>. <pre class="example">
+SELECT * FROM patients;
+</pre> Result: <pre class="result">
+ id | second_attack | treatment | trait_anxiety
+&#160;---+---------------+-----------+---------------
+  1 |             1 |         1 |            70
+  3 |             1 |         1 |            50
+  5 |             1 |         0 |            40
+  7 |             1 |         0 |            75
+  9 |             1 |         0 |            70
+ 11 |             0 |         1 |            65
+ 13 |             0 |         1 |            45
+ 15 |             0 |         1 |            40
+ 17 |             0 |         0 |            55
+ 19 |             0 |         0 |            50
+  2 |             1 |         1 |            80
+  4 |             1 |         0 |            60
+  6 |             1 |         0 |            65
+  8 |             1 |         0 |            80
+ 10 |             1 |         0 |            60
+ 12 |             0 |         1 |            50
+ 14 |             0 |         1 |            35
+ 16 |             0 |         1 |            50
+ 18 |             0 |         0 |            45
+ 20 |             0 |         0 |            60
+</pre></li>
+<li>Run logistic regression to get the model, compute the marginal effects of all variables, and view the results. <pre class="example">
+DROP TABLE IF EXISTS model_table;
+DROP TABLE IF EXISTS model_table_summary;
+DROP TABLE IF EXISTS margins_table;
+SELECT madlib.logregr_train( 'patients',
+                             'model_table',
+                             'second_attack',
+                             'ARRAY[1, treatment, trait_anxiety, treatment^2, treatment * trait_anxiety]'
+                           );
+SELECT madlib.margins( 'model_table',
+                       'margins_table',
+                       'intercept, treatment, trait_anxiety, treatment^2, treatment*trait_anxiety',
+                       NULL,
+                       NULL
+                     );
+\x ON
+SELECT * FROM margins_table;
+</pre> Result: <pre class="result">
+variables | {intercept, treatment, trait_anxiety}
+margins   | {-0.876046514609573,-0.0648833521465306,0.0177196513589633}
+std_err   | {0.551714275062467,0.373592457067442,0.00458001207971933}
+z_stats   | {-1.58786269307674,-0.173674149247659,3.86890930646828}
+p_values  | {0.112317391159946,0.862121554662231,0.000109323294026272}
+</pre></li>
+<li>Compute the marginal effects of the first variable using the previous model and view the results (using different names in 'x_design'). <pre class="example">
+DROP TABLE IF EXISTS result_table;
+SELECT madlib.margins( 'model_table',
+                       'result_table',
+                       'i, tre, tra, tre^2, tre*tra',
+                       NULL,
+                       'tre'
+                     );
+SELECT * FROM result_table;
+</pre> Result: <pre class="result">
+-[ RECORD 1 ]-------------------
+variables | {tre}
+margins   | {-0.110453283517281}
+std_err   | {0.228981529064089}
+z_stats   | {-0.482367656329023}
+p_values  | {0.629544793219806}
+</pre></li>
+<li>Create a sample data set for multinomial logistic regression. (The full dataset has three categories.) Use the dataset from the <a href="group__grp__mlogreg.html#examples">Multinomial Regression example</a>. <pre class="example">
+\x OFF
+SELECT * FROM test3;
+</pre> Result: <pre class="result">
+ feat1 | feat2 | cat
+-------+-------+-----
+     2 |    33 |   0
+     2 |    31 |   1
+     2 |    36 |   1
+     2 |    31 |   1
+     2 |    41 |   1
+     2 |    37 |   1
+     2 |    44 |   1
+     2 |    46 |   1
+     2 |    46 |   2
+     2 |    39 |   0
+     2 |    44 |   1
+     2 |    44 |   0
+     2 |    67 |   2
+     2 |    59 |   2
+     2 |    59 |   0
+...
+</pre></li>
+<li>Run the regression function and then compute the marginal effects of all variables in the regression. <pre class="example">
+DROP TABLE IF EXISTS model_table;
+DROP TABLE IF EXISTS model_table_summary;
+DROP TABLE IF EXISTS result_table;
+SELECT madlib.mlogregr_train('test3', 'model_table', 'cat',
+                             'ARRAY[1, feat1, feat2, feat1*feat2]',
+                             0);
+SELECT madlib.margins('model_table',
+                      'result_table',
+                      'intercept, feat1, feat2, feat1*feat2');
+\x ON
+SELECT * FROM result_table;
+</pre> Result: <pre class="result">
+-[ RECORD 1 ]+-------------------------------------------------------------
+category     | 1
+ref_category | 0
+variables    | {intercept,feat1,feat2}
+margins      | {2.38176571752675,-0.0545733108729351,-0.0147264917310351}
+std_err      | {0.851299967007829,0.0697049196489632,0.00374946341567828}
+z_stats      | {2.79779843748643,-0.782919070099622,-3.92762646235104}
+p_values     | {0.00514522099923651,0.43367463815468,8.57883141882439e-05}
+-[ RECORD 2 ]+-------------------------------------------------------------
+category     | 2
+ref_category | 0
+variables    | {intercept,feat1,feat2}
+margins      | {-1.99279068434949,0.0922540608068343,0.0168049205501686}
+std_err      | {0.742790306495022,0.0690712705200096,0.00202015384479213}
+z_stats      | {-2.68284422524683,1.33563578767686,8.31863404536785}
+p_values     | {0.00729989838349161,0.181668346802398,8.89828265128986e-17}
+</pre></li>
+</ol>
+<p><a class="anchor" id="notes"></a> </p><dl class="section note"><dt>Note</dt><dd>The <em>marginal_vars</em> argument is a list with the names matching those in 'x_design'. If no 'x_design' is present (i.e. no interaction and no indicator variables), then <em>marginal_vars</em> must be the indices (base 1) of variables in 'independent_varname'. Use <em>NULL</em> to use all independent variables. It is important to note that the <em>independent_varname</em> array in the underlying regression is assumed to start with a lower bound index of 1. Arrays that don't follow this would result in an incorrect solution.</dd></dl>
+<p><a class="anchor" id="background"></a></p><dl class="section user"><dt>Technical Background</dt><dd></dd></dl>
+<p>The standard approach to modeling dichotomous/binary variables (so \(y \in \{0, 1\} \)) is to estimate a generalized linear model under the assumption that \( y \) follows some form of Bernoulli distribution. Thus the expected value of \( y \) becomes, </p><p class="formulaDsp">
+\[ y = G(X&#39; \beta), \]
+</p>
+<p>where G is the specified binomial distribution. For logistic regression, the function \( G \) represents the inverse logit function.</p>
+<p>In logistic regression: </p><p class="formulaDsp">
+\[ P = \frac{1}{1 + e^{-(\beta_0 + \beta_1 x_1 + \dots \beta_j x_j)}} = \frac{1}{1 + e^{-z}} \implies \frac{\partial P}{\partial X_k} = \beta_k \cdot \frac{1}{1 + e^{-z}} \cdot \frac{e^{-z}}{1 + e^{-z}} \\ = \beta_k \cdot P \cdot (1-P) \]
+</p>
+<p>There are several methods for calculating the marginal effects for dichotomous dependent variables. This package uses the average of the marginal effects at every sample observation.</p>
+<p>This is calculated as follows: </p><p class="formulaDsp">
+\[ \frac{\partial y}{\partial x_k} = \beta_k \frac{\sum_{i=1}^n P(y_i = 1)(1-P(y_i = 1))}{n}, \\ \text{where}, P(y_i=1) = g(X^{(i)}\beta) \]
+</p>
+<p>We use the delta method for calculating standard errors on the marginal effects.</p>
+<p><a class="anchor" id="literature"></a></p><dl class="section user"><dt>Literature</dt><dd></dd></dl>
+<p>[1] mfx function in STATA: <a href="http://www.stata.com/help.cgi?mfx_option">http://www.stata.com/help.cgi?mfx_option</a></p>
+<p><a class="anchor" id="related"></a></p><dl class="section user"><dt>Related Topics</dt><dd></dd></dl>
+<p>File <a class="el" href="marginal_8sql__in.html" title="SQL functions for linear regression. ">marginal.sql_in</a> documenting the SQL functions.</p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:59 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__matrix.html b/docs/rc/group__grp__matrix.html
new file mode 100644
index 0000000..acbfbbf
--- /dev/null
+++ b/docs/rc/group__grp__matrix.html
@@ -0,0 +1,888 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Matrix Operations</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__matrix.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Matrix Operations<div class="ingroups"><a class="el" href="group__grp__datatrans.html">Data Types and Transformations</a> &raquo; <a class="el" href="group__grp__arraysmatrix.html">Arrays and Matrices</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li class="level1">
+<a href="#description">Description</a> </li>
+<li class="level1">
+<a href="#operations">Matrix Operations</a> </li>
+<li class="level1">
+<a href="#arguments">Arguments</a> </li>
+<li class="level1">
+<a href="#examples">Examples</a> </li>
+<li class="level1">
+<a href="#related">Related Topics</a> </li>
+</ul>
+</div><p><a class="anchor" id="description"></a>This module provides a set of basic matrix operations for matrices that are too big to fit in memory. We provide two storage formats for a matrix:</p>
+<ul>
+<li><b>Dense</b>: The matrix is represented as a distributed collection of 1-D arrays. An example 3x10 matrix would be the table below: <pre>
+ row_id |         row_vec
+--------+-------------------------
+   1    | {9,6,5,8,5,6,6,3,10,8}
+   2    | {8,2,2,6,6,10,2,1,9,9}
+   3    | {3,9,9,9,8,6,3,9,5,6}
+</pre></li>
+</ul>
+<p>A '<em>row</em>' column (called <em>row_id</em> above) provides the row number of each row and a '<em>val</em>' column (called <em>row_vec</em> above) provides each row as an array. <b>The <em>row</em> column should contain a series of integers from 1 to <em>N</em> with no duplicates, where <em>N</em> is the row dimensionality</b>.</p>
+<ul>
+<li><b>Sparse</b>: The matrix is represented using the row and column indices for each non-zero entry of the matrix. This representation is useful for sparse matrices, containing multiple zero elements. Given below is an example of a sparse 4x7 matrix with just 6 out of 28 entries being non-zero. The dimensionality of the matrix is inferred using the max value in <em>row</em> and <em>col</em> columns. Note the last entry is included (even though it is 0) to provide the dimensionality of the matrix, indicating that the 4th row and 7th column contain all zeros. <pre>
+ row_id | col_id | value
+--------+--------+-------
+      1 |      1 |     9
+      1 |      5 |     6
+      1 |      6 |     6
+      2 |      1 |     8
+      3 |      1 |     3
+      3 |      2 |     9
+      4 |      7 |     0
+(6 rows)
+</pre></li>
+</ul>
+<p><b>For sparse matrices, the <em>row</em> and <em>col</em> columns together should not contain a duplicate entry and the <em>val</em> column should be of scalar (non-array) data type</b>. <br />
+ For comparison, the dense representation of this matrix is shown below. Note the dimensionality of the dense matrix is 4 x 7 since the max value of <em>row</em> and <em>col</em> is 4 and 7 respectively, leading to all zeros in the last row and last column. &#160; </p><pre>
+ row_id |         row_vec
+--------+-------------------------
+   1    | {9,0,0,0,6,6,0}
+   2    | {8,0,0,0,0,0,0}
+   3    | {3,9,0,0,0,0,0}
+   4    | {0,0,0,0,0,0,0}
+</pre><dl class="section note"><dt>Note</dt><dd>The functions below support several numeric types (unless otherwise noted) including SMALLINT, INTEGER, BIGINT, DOUBLE PRECISION (FLOAT8), NUMERIC (internally casted into FLOAT8, so loss of precision can happen).</dd></dl>
+<p><a class="anchor" id="operations"></a></p><dl class="section user"><dt>Matrix Operations</dt><dd></dd></dl>
+<p>Below are the supported matrix operations. The meaning of the arguments and other terms are common to all functions and are provided at the end of the list in the glossary of arguments.</p>
+<ul>
+<li><b>Representation</b> <pre class="syntax">
+-- Convert to sparse representation
+&#160; <b>matrix_sparsify</b>( matrix_in, in_args, matrix_out, out_args)
+&#160;
+-- Convert to dense representation
+&#160; <b>matrix_densify</b>( matrix_in, in_args, matrix_out, out_args)
+&#160;
+-- Get dimensions of matrix
+&#160; <b>matrix_ndims</b>( matrix_in, in_args )
+</pre></li>
+<li><b>Mathematical operations</b> <pre class="syntax">
+-- Matrix transposition
+&#160; <b>matrix_trans</b>( matrix_in, in_args, matrix_out, out_args)
+&#160;
+-- Matrix addition
+&#160; <b>matrix_add</b>( matrix_a, a_args, matrix_b, b_args, matrix_out, out_args)
+&#160;
+-- Matrix subtraction
+&#160; <b>matrix_sub</b>( matrix_a, a_args, matrix_b, b_args, matrix_out, out_args)
+&#160;
+-- Matrix multiplication
+&#160; <b>matrix_mult</b>( matrix_a, a_args, matrix_b, b_args, matrix_out, out_args)
+&#160;
+-- Element-wise matrix multiplication
+&#160; <b>matrix_elem_mult</b>( matrix_a, a_args, matrix_b, b_args, matrix_out, out_args)
+&#160;
+-- Multiply matrix with scalar
+&#160; <b>matrix_scalar_mult</b>( matrix_in, in_args, scalar, matrix_out, out_args)
+&#160;
+-- Multiply matrix with vector
+&#160; <b>matrix_vec_mult</b>( matrix_in, in_args, vector)
+</pre></li>
+<li><b>Extraction/visitor methods</b> <pre class="syntax">
+-- Extract row from matrix given row index
+&#160; <b>matrix_extract_row</b>( matrix_in, in_args, index)
+&#160;
+-- Extract column from matrix given column index
+&#160; <b>matrix_extract_col</b>( matrix_in, in_args, index)
+&#160;
+-- Extract main (principal) diagonal elements
+&#160; <b>matrix_extract_diag</b>( matrix_in, in_args)
+</pre></li>
+<li><b>Reduction operations (aggregate across specific dimension)</b> <pre class="syntax">
+-- Get max value along dim. Returns corresponding index if <em>fetch_index</em> = True
+&#160; <b>matrix_max</b>( matrix_in, in_args, dim, matrix_out, fetch_index)
+&#160;
+-- Get min value along dim. Returns corresponding index if <em>fetch_index</em> = True
+&#160; <b>matrix_min</b>( matrix_in, in_args, dim, matrix_out, fetch_index)
+&#160;
+-- Get sum value along dimension
+&#160; <b>matrix_sum</b>( matrix_in, in_args, dim)
+&#160;
+-- Get mean value along dimension
+&#160; <b>matrix_mean</b>( matrix_in, in_args, dim)
+&#160;
+-- Get matrix norm
+&#160; <b>matrix_norm</b>( matrix_in, in_args, norm_type)
+</pre></li>
+<li><b>Creation methods</b> <pre class="syntax">
+-- Create a matrix initialized with ones of given row and column dimension
+&#160; <b>matrix_ones</b>( row_dim, col_dim, matrix_out, out_args)
+&#160;
+-- Create a matrix initialized with zeros of given row and column dimension
+&#160; <b>matrix_zeros</b>( row_dim, col_dim, matrix_out, out_args)
+&#160;
+-- Create an square identity matrix of size dim x dim
+&#160; <b>matrix_identity</b>( dim, matrix_out, out_args)
+&#160;
+-- Create a diag matrix initialized with given diagonal elements
+&#160; <b>matrix_diag</b>( diag_elements, matrix_out, out_args)
+-- Create a matrix initialized with values sampled from a distribution
+-- Supported distributions: normal, uniform, bernoulli
+&#160; <b>matrix_random</b>( distribution, row_dim, col_dim, in_args, matrix_out, out_args )
+</pre></li>
+<li><b>Decomposition operations</b> <dl class="section note"><dt>Note</dt><dd>Please note that the decomposition operations below are only implemented for in-memory operations. The matrix data is collected on a single node and the decomposition is computed. This makes the operations applicable to smaller matrices since the calculation is not distributed across multiple nodes.</dd></dl>
+<pre class="syntax">
+-- Matrix inverse
+&#160; <b>matrix_inverse</b>( matrix_in, in_args, matrix_out, out_args)
+&#160;
+-- Matrix generic inverse
+&#160; <b>matrix_pinv</b>( matrix_in, in_args, matrix_out, out_args)
+&#160;
+-- Matrix eigenvalue extraction
+&#160; <b>matrix_eigen</b>( matrix_in, in_args, matrix_out, out_args)
+&#160;
+-- Matrix Cholesky decomposition
+&#160; <b>matrix_cholesky</b>( matrix_in, in_args, matrix_out_prefix, out_args)
+&#160;
+-- Matrix QR decomposition
+&#160; <b>matrix_qr</b>( matrix_in, in_args, matrix_out_prefix, out_args)
+&#160;
+-- Matrix LU decomposition
+&#160; <b>matrix_lu</b>( matrix_in, in_args, matrix_out_prefix, out_args)
+&#160;
+-- Matrix nuclear norm computing
+&#160; <b>matrix_nuclear_norm</b>( matrix_in, in_args)
+&#160;
+-- Matrix rank computing
+&#160; <b>matrix_rank</b>( matrix_in, in_args)
+</pre></li>
+</ul>
+<p><a class="anchor" id="arguments"></a><b>Arguments</b> </p>
+<p>The table below provides a glossary of the arguments used in the matrix operations.</p>
+<dl class="arglist">
+<dt>matrix_in, matrix_a, matrix_b </dt>
+<dd><p class="startdd">TEXT. Name of the table containing the input matrix.</p><ul>
+<li>For functions accepting one matrix, <em>matrix_in</em> denotes the input matrix.</li>
+<li>For functions accepting two matrices, <em>matrix_a</em> denotes the first matrix and <em>matrix_b</em> denotes the second matrix. These two matrices can <b>independently</b> be in either dense or sparse format. </li>
+</ul>
+<p class="enddd"></p>
+</dd>
+<dt>in_args, a_args, b_args </dt>
+<dd><p class="startdd">TEXT. A comma-delimited string containing multiple named arguments of the form "name=value". This argument is used as a container for multiple parameters related to a single matrix.</p>
+<p>The following parameters are supported for this string argument: </p><table class="output">
+<tr>
+<th>row </th><td>(Default: 'row_num') Name of the column containing row index of the matrix.   </td></tr>
+<tr>
+<th>col </th><td>(Default: 'col_num') Name of the column containing column index of the matrix.  </td></tr>
+<tr>
+<th>val </th><td>(Default: 'val') Name of the column containing the entries of the matrix.  </td></tr>
+<tr>
+<th>trans </th><td>(Default: False) Boolean flag to indicate if the matrix should be transposed before the operation. This is currently functional only for <em>matrix_mult</em>.  </td></tr>
+</table>
+<p>For example, the string argument with default values will be 'row=row_num, col=col_num, val=val, trans=False'. Alternatively, the string argument can be set to <em>NULL</em> or be blank ('') if default values are to be used. </p>
+<p class="enddd"></p>
+</dd>
+<dt>matrix_out </dt>
+<dd><p class="startdd">TEXT. Name of the table to store the result matrix.</p>
+<p>For Cholesky, QR and LU decompositions, a prefix (<em>matrix_out_prefix</em>) is used as a basis to build the names of the various output tables.</p>
+<p>For Cholesky decomposition ( \( PA = LDL* \)), the following suffixes are added to <em>matrix_out_prefix</em>:</p><ul>
+<li><em>_p</em> for row permutation matrix P</li>
+<li><em>_l</em> for lower triangular factor L</li>
+<li><em>_d</em> for diagonal matrix D</li>
+</ul>
+<p>For QR decomposition ( \( A = QR \)) the following suffixes are added to <em>matrix_out_prefix</em>:</p><ul>
+<li><em>_q</em> for orthogonal matrix Q</li>
+<li><em>_r</em> for upper triangular factor R</li>
+</ul>
+<p>For LU decomposition with full pivoting ( \( PAQ = LU \)), the following suffixes are added to <em>matrix_out_prefix</em>:</p><ul>
+<li><em>_p</em> for row permutation matrix P</li>
+<li><em>_q</em> for column permutation matrix Q</li>
+<li><em>_l</em> for lower triangular factor L</li>
+<li><em>_u</em> for upper triangular factor U </li>
+</ul>
+<p class="enddd"></p>
+</dd>
+<dt>out_args </dt>
+<dd><p class="startdd">TEXT. A comma-delimited string containing named arguments of the form "name=value". This is an <b>optional parameter</b> and the default value is set as follows:</p><ul>
+<li>For functions with one input matrix, default <em>out_args</em> will the be same as specified in <em>in_args</em>.</li>
+<li>For functions with two input matrices, default <em>out_args</em> will be the same as specified in <em>a_args</em>.</li>
+</ul>
+<p>The following parameters are supported for this string argument: </p><table class="output">
+<tr>
+<th>row </th><td>Name of the column containing row index of the matrix.   </td></tr>
+<tr>
+<th>col </th><td>Name of the column containing column index of the matrix.  </td></tr>
+<tr>
+<th>val </th><td>Name of the column containing the entries of the matrix.  </td></tr>
+<tr>
+<th>fmt </th><td>Format of the output matrix. It could be either 'dense' or 'sparse'. When 'fmt' is not provided, the output fmt is inferred from the input matrices.  </td></tr>
+</table>
+<dl class="section note"><dt>Note</dt><dd>One exception is for <em>matrix_eigen</em>: the default output column name is <em>’eigen_values’</em> in the format <em>(real, imaginary)</em>.</dd></dl>
+</dd>
+<dt>index </dt>
+<dd><p class="startdd">INTEGER. An integer representing a row or column index of the matrix. Should be a number from 1 to <em>N</em>, where <em>N</em> is the maximum size of the dimension.</p>
+<p class="enddd"></p>
+</dd>
+<dt>dim </dt>
+<dd><p class="startdd">INTEGER. Should either be 1 or 2. This value indicates the dimension to operate along for the reduction/aggregation operations. <b>The value of <em>dim</em> should be interpreted as the dimension to be flattened i.e. whose length reduces to 1 in the result.</b></p>
+<p>For any reduction function applied on an <em>N x M</em> matrix:</p>
+<ul>
+<li>if <em>dim=1</em>, operation is applied on successive elements in each column; return value is a single vector with <em>M</em> elements (i.e. matrix with 1 row and <em>M</em> columns). <br />
+</li>
+<li>if <em>dim=2</em>, operation is applied on successive elements in each row; return value is a single vector with <em>N</em> elements (i.e. matrix with <em>N</em> rows and 1 column). </li>
+</ul>
+<p class="enddd"></p>
+</dd>
+<dt>row_dim </dt>
+<dd><p class="startdd">INTEGER. Should be greater than 0. This value indicates the row dimension of result matrix. </p>
+<p class="enddd"></p>
+</dd>
+<dt>col_dim </dt>
+<dd><p class="startdd">INTEGER. Should be greater than 0. This value indicates the column dimension of result matrix. </p>
+<p class="enddd"></p>
+</dd>
+<dt>diag_elements </dt>
+<dd><p class="startdd">ARRAY OF FLOAT. Should not be empty. This value indicates the float array which is used to generate diag elements of result output matrix. </p>
+<p class="enddd"></p>
+</dd>
+<dt>norm_type </dt>
+<dd><p class="startdd">TEXT. Optional parameter. Defaults to Frobenius norm. Other supported norms for this string argument:</p>
+<table class="output">
+<tr>
+<th>'one' or 'o' </th><td>1 norm   </td></tr>
+<tr>
+<th>float &gt; 0 </th><td>Element-wise norm  </td></tr>
+<tr>
+<th>'inf' or 'i' </th><td>Infinite norm  </td></tr>
+<tr>
+<th>'max' or 'm' </th><td>Max absolute value norm  </td></tr>
+<tr>
+<th>'fro' or 'f' </th><td>Frobenius norm (default)  </td></tr>
+</table>
+<p class="enddd"></p>
+</dd>
+</dl>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples (Dense Format)</dt><dd></dd></dl>
+<p>Here are some examples of matrix operations in dense format. Later on this page we will show examples of matrix operations in sparse format.</p>
+<ol type="1">
+<li>First let’s create example data tables in dense format: <pre class="syntax">
+CREATE TABLE "mat_A" (
+        row_id integer,
+        row_vec integer[]
+);
+INSERT INTO "mat_A" (row_id, row_vec) VALUES (1, '{9,6,5,8,5,6,6,3,10,8}');
+INSERT INTO "mat_A" (row_id, row_vec) VALUES (2, '{8,2,2,6,6,10,2,1,9,9}');
+INSERT INTO "mat_A" (row_id, row_vec) VALUES (3, '{3,9,9,9,8,6,3,9,5,6}');
+INSERT INTO "mat_A" (row_id, row_vec) VALUES (4, '{6,4,2,2,2,7,8,8,0,7}');
+INSERT INTO "mat_A" (row_id, row_vec) VALUES (5, '{6,8,9,9,4,6,9,5,7,7}');
+INSERT INTO "mat_A" (row_id, row_vec) VALUES (6, '{4,10,7,3,9,5,9,2,3,4}');
+INSERT INTO "mat_A" (row_id, row_vec) VALUES (7, '{8,10,7,10,1,9,7,9,8,7}');
+INSERT INTO "mat_A" (row_id, row_vec) VALUES (8, '{7,4,5,6,2,8,1,1,4,8}');
+INSERT INTO "mat_A" (row_id, row_vec) VALUES (9, '{8,8,8,5,2,6,9,1,8,3}');
+INSERT INTO "mat_A" (row_id, row_vec) VALUES (10, '{4,6,3,2,6,4,1,2,3,8}');
+
+CREATE TABLE "mat_B" (
+    row_id integer,
+    vector integer[]
+);
+INSERT INTO "mat_B" (row_id, vector) VALUES (1, '{9,10,2,4,6,5,3,7,5,6}');
+INSERT INTO "mat_B" (row_id, vector) VALUES (2, '{5,3,5,2,8,6,9,7,7,6}');
+INSERT INTO "mat_B" (row_id, vector) VALUES (3, '{0,1,2,3,2,7,7,3,10,1}');
+INSERT INTO "mat_B" (row_id, vector) VALUES (4, '{2,9,0,4,3,6,8,6,3,4}');
+INSERT INTO "mat_B" (row_id, vector) VALUES (5, '{3,8,7,7,0,5,3,9,2,10}');
+INSERT INTO "mat_B" (row_id, vector) VALUES (6, '{5,3,1,7,6,3,5,3,6,4}');
+INSERT INTO "mat_B" (row_id, vector) VALUES (7, '{4,8,4,4,2,7,10,0,3,3}');
+INSERT INTO "mat_B" (row_id, vector) VALUES (8, '{4,6,0,1,3,1,6,6,9,8}');
+INSERT INTO "mat_B" (row_id, vector) VALUES (9, '{6,5,1,7,2,7,10,6,0,6}');
+INSERT INTO "mat_B" (row_id, vector) VALUES (10, '{1,4,4,4,8,5,2,8,5,5}');
+</pre></li>
+<li>Transpose a matrix <pre class="syntax">
+SELECT madlib.matrix_trans('"mat_B"', 'row=row_id, val=vector',
+                           'mat_r');
+SELECT * FROM mat_r ORDER BY row_id;
+</pre> <pre class="result">
+-- Note that the result matrix has inherited 'vector' as the name of the value column by default
+ row_id |         vector
+--------+-------------------------
+      1 | {9,5,0,2,3,5,4,4,6,1}
+      2 | {10,3,1,9,8,3,8,6,5,4}
+      3 | {2,5,2,0,7,1,4,0,1,4}
+      4 | {4,2,3,4,7,7,4,1,7,4}
+      5 | {6,8,2,3,0,6,2,3,2,8}
+      6 | {5,6,7,6,5,3,7,1,7,5}
+      7 | {3,9,7,8,3,5,10,6,10,2}
+      8 | {7,7,3,6,9,3,0,6,6,8}
+      9 | {5,7,10,3,2,6,3,9,0,5}
+      10 | {6,6,1,4,10,4,3,8,6,5}
+(10 rows)
+</pre></li>
+<li>Extract main diagonal of a matrix <pre class="syntax">
+SELECT madlib.matrix_extract_diag('"mat_B"', 'row=row_id, val=vector');
+</pre> <pre class="result">
+-- Note the result is an array
+         matrix_extract_diag
+---------------------------------
+{9,3,2,4,0,3,10,6,0,5}
+(1 row)
+</pre></li>
+<li>Add two matrices <pre class="syntax">
+SELECT madlib.matrix_add('"mat_A"', 'row=row_id, val=row_vec',
+                         '"mat_B"', 'row=row_id, val=vector',
+                         'mat_r', 'val=vector, fmt=dense');
+SELECT * FROM mat_r ORDER BY row_id;
+</pre> <pre class="result">
+ row_id |            vector
+--------+-------------------------------
+      1 | {18,16,7,12,11,11,9,10,15,14}
+      2 | {13,5,7,8,14,16,11,8,16,15}
+      3 | {3,10,11,12,10,13,10,12,15,7}
+      4 | {8,13,2,6,5,13,16,14,3,11}
+      5 | {9,16,16,16,4,11,12,14,9,17}
+      6 | {9,13,8,10,15,8,14,5,9,8}
+      7 | {12,18,11,14,3,16,17,9,11,10}
+      8 | {11,10,5,7,5,9,7,7,13,16}
+      9 | {14,13,9,12,4,13,19,7,8,9}
+      10 | {5,10,7,6,14,9,3,10,8,13}
+(10 rows)
+</pre></li>
+<li>Multiply two matrices <pre class="syntax">
+SELECT madlib.matrix_mult('"mat_A"', 'row=row_id, val=row_vec',
+                          '"mat_B"', 'row=row_id, val=vector, trans=true',
+                          'mat_r');
+SELECT * FROM mat_r ORDER BY row_id;
+</pre> <pre class="result">
+ row_id |                  row_vec
+--------+-------------------------------------------
+     1  | {380,373,251,283,341,303,302,309,323,281}
+     2  | {318,318,222,221,269,259,236,249,264,248}
+     3  | {382,366,216,300,397,276,277,270,313,338}
+     4  | {275,284,154,244,279,183,226,215,295,204}
+     5  | {381,392,258,319,394,298,342,302,360,300}
+     6  | {321,333,189,276,278,232,300,236,281,250}
+     7  | {443,411,282,365,456,318,360,338,406,330}
+     8  | {267,240,150,186,270,194,210,184,233,193}
+     9  | {322,328,234,264,291,245,317,253,291,219}
+     10 | {246,221,109,173,222,164,167,185,181,189}
+(10 rows)
+</pre></li>
+<li>Create a diagonal matrix <pre class="syntax">
+SELECT madlib.matrix_diag(array[9,6,3,10],
+                          'mat_r', 'row=row_id, col=col_id, val=val');
+SELECT * FROM mat_r ORDER BY row_id::bigint;
+</pre> <pre class="result">
+ row_id | col_id  |  val
+--------+---------+--------
+      1 |       1 |      9
+      2 |       2 |      6
+      3 |       3 |      3
+      4 |       4 |     10
+(11 rows)
+</pre></li>
+<li>Create an identity matrix <pre class="syntax">
+SELECT madlib.matrix_identity(4, 'mat_r', 'row=row_id,col=col_id,val=val');
+SELECT * FROM mat_r ORDER BY row_id;
+</pre> <pre class="result">
+ row_id | col_id  |  val
+--------+---------+--------
+      1 |       1 |      1
+      2 |       2 |      1
+      3 |       3 |      1
+      4 |       4 |      1
+(5 rows)
+</pre></li>
+<li>Extract row and column from a matrix by specifying index <pre class="syntax">
+SELECT madlib.matrix_extract_row('"mat_A"', 'row=row_id, val=row_vec', 2) as row,
+       madlib.matrix_extract_col('"mat_A"', 'row=row_id, val=row_vec', 3) as col;
+</pre> <pre class="result">
+          row           |          col
+------------------------+-----------------------
+ {8,2,2,6,6,10,2,1,9,9} | {5,2,9,2,9,7,7,5,8,3}
+(1 rows)
+</pre></li>
+<li>Get min and max values along a specific dimension, as well as the corresponding indices. Note that in this example <em>dim=2</em> implies that the min and max is computed on each row, returning a column vector i.e. the column (dim=2) is flattened. <pre class="syntax">
+SELECT madlib.matrix_max('"mat_A"', 'row=row_id, val=row_vec', 2, 'mat_max_r', true),
+       madlib.matrix_min('"mat_A"', 'row=row_id, val=row_vec', 2, 'mat_min_r', true);
+SELECT * from mat_max_r;
+SELECT * from mat_min_r;
+</pre> <pre class="result">
+         index         |            max
+-----------------------+---------------------------
+ {9,6,2,7,3,2,2,6,7,10} | {10,10,9,8,9,10,10,8,9,8}
+(1 rows)
+&#160;
+         index         |          min
+-----------------------+-----------------------
+ {8,8,1,9,5,8,5,7,8,7} | {3,1,3,0,4,2,1,1,1,1}
+(1 rows)
+</pre></li>
+<li>Initialize matrix with zeros in sparse format <pre class="syntax">
+SELECT madlib.matrix_zeros(5, 4, 'mat_r', 'row=row_id, col=col_id, val=entry');
+SELECT * FROM mat_r;
+</pre> <pre class="result">
+ row_id |  col_id | entry
+--------+---------+--------
+      5 |       4 |    0
+(1 rows)
+</pre></li>
+<li>Initialize matrix with zeros in dense format  <pre class="syntax">
+SELECT madlib.matrix_zeros(5, 4, 'mat_r', 'fmt=dense');
+SELECT * FROM mat_r ORDER BY row;
+</pre> <pre class="result">
+  row |    val
+-----+-----------
+   1 | {0,0,0,0}
+   2 | {0,0,0,0}
+   3 | {0,0,0,0}
+   4 | {0,0,0,0}
+   5 | {0,0,0,0}
+(5 rows)
+</pre></li>
+<li>Initialize matrix with ones  <pre class="syntax">
+SELECT madlib.matrix_ones(5, 4, 'mat_r', 'row=row,col=col, val=val');
+SELECT * FROM mat_r;
+</pre> <pre class="result">
+ row | col | val
+-----+-----+-----
+   1 |   1 |   1
+   1 |   2 |   1
+   1 |   3 |   1
+   1 |   4 |   1
+   2 |   1 |   1
+   2 |   2 |   1
+   2 |   3 |   1
+   2 |   4 |   1
+   3 |   1 |   1
+   3 |   2 |   1
+   3 |   3 |   1
+   3 |   4 |   1
+   4 |   1 |   1
+   4 |   2 |   1
+   4 |   3 |   1
+   4 |   4 |   1
+   5 |   1 |   1
+   5 |   2 |   1
+   5 |   3 |   1
+   5 |   4 |   1
+(20 rows)
+</pre></li>
+<li>Initialize matrix with ones in dense format  <pre class="syntax">
+SELECT madlib.matrix_ones(5, 4, 'mat_r', 'fmt=dense');
+SELECT * FROM mat_r ORDER BY row;
+</pre> <pre class="result">
+  row |    val
+-----+-----------
+   1 | {1,1,1,1}
+   2 | {1,1,1,1}
+   3 | {1,1,1,1}
+   4 | {1,1,1,1}
+   5 | {1,1,1,1}
+(5 rows)
+</pre></li>
+<li>Element-wise multiplication between two matrices <pre class="syntax">
+SELECT madlib.matrix_elem_mult('"mat_A"', 'row=row_id, val=row_vec',
+                               '"mat_B"', 'row=row_id, val=vector',
+                               'mat_r', 'val=vector');
+SELECT * FROM mat_r ORDER BY row_id;
+</pre> <pre class="result">
+ row_id |             vector
+--------+---------------------------------
+     1  | {81,60,10,32,30,30,18,21,50,48}
+     2  | {40,6,10,12,48,60,18,7,63,54}
+     3  | {0,9,18,27,16,42,21,27,50,6}
+     4  | {12,36,0,8,6,42,64,48,0,28}
+     5  | {18,64,63,63,0,30,27,45,14,70}
+     6  | {20,30,7,21,54,15,45,6,18,16}
+     7  | {32,80,28,40,2,63,70,0,24,21}
+     8  | {28,24,0,6,6,8,6,6,36,64}
+     9  | {48,40,8,35,4,42,90,6,0,18}
+     10 | {4,24,12,8,48,20,2,16,15,40}
+</pre></li>
+<li>Get sum values along a dimension. In this example, the sum is computed for each row (i.e. column is flattened since dim=2). <pre class="syntax">
+SELECT madlib.matrix_sum('"mat_A"', 'row=row_id, val=row_vec', 2);
+</pre> <pre class="result">
+           matrix_sum
+---------------------------------
+ {66,55,67,46,70,56,76,46,58,39}
+(1 rows)
+</pre></li>
+<li>Get mean values along dimension <pre class="syntax">
+SELECT madlib.matrix_mean('"mat_A"', 'row=row_id, val=row_vec', 2);
+</pre> <pre class="result">
+               matrix_mean
+-----------------------------------------
+ {6.6,5.5,6.7,4.6,7,5.6,7.6,4.6,5.8,3.9}
+(1 rows)
+</pre></li>
+<li>Compute matrix norm. In this example, we ask for the Euclidean norm: <pre class="syntax">
+SELECT madlib.matrix_norm('"mat_A"', 'row=row_id, val=row_vec', '2');
+</pre> <pre class="result">
+  matrix_norm
+---------------
+ 64.1014820421
+(1 row)
+</pre></li>
+<li>Multiply matrix with scalar <pre class="syntax">
+SELECT madlib.matrix_scalar_mult('"mat_A"', 'row=row_id, val=row_vec', 3, 'mat_r');
+SELECT * FROM mat_r ORDER BY row_id;
+</pre> <pre class="result">
+ row_id |             row_vec
+--------+---------------------------------
+      1 | {27,18,15,24,15,18,18,9,30,24}
+      2 | {24,6,6,18,18,30,6,3,27,27}
+      3 | {9,27,27,27,24,18,9,27,15,18}
+      4 | {18,12,6,6,6,21,24,24,0,21}
+      5 | {18,24,27,27,12,18,27,15,21,21}
+      6 | {12,30,21,9,27,15,27,6,9,12}
+      7 | {24,30,21,30,3,27,21,27,24,21}
+      8 | {21,12,15,18,6,24,3,3,12,24}
+      9 | {24,24,24,15,6,18,27,3,24,9}
+     10 | {12,18,9,6,18,12,3,6,9,24}
+(10 rows)
+</pre></li>
+<li>Get the row dimension and column dimension of matrix <pre class="syntax">
+SELECT madlib.matrix_ndims('"mat_A"', 'row=row_id, val=row_vec');
+</pre> <pre class="result">
+ matrix_ndims
+--------------
+ {10,10}
+(1 row)
+</pre></li>
+<li>Multiply matrix with vector <pre class="syntax">
+SELECT madlib.matrix_vec_mult('"mat_A"', 'row=row_id, val=row_vec',
+                              array[1,2,3,4,5,6,7,8,9,10]);
+</pre> <pre class="result">
+              matrix_vec_mult
+-------------------------------------------
+ {365,325,358,270,377,278,411,243,287,217}
+(10 rows)
+</pre></li>
+<li>Inverse of matrix <pre class="syntax">
+SELECT madlib.matrix_inverse('"mat_A"', 'row=row_id, val=row_vec', 'mat_r');
+SELECT row_vec FROM mat_r ORDER BY row_id;
+</pre></li>
+<li>Generic inverse of matrix <pre class="syntax">
+SELECT madlib.matrix_pinv('"mat_A"', 'row=row_id, val=row_vec', 'mat_r');
+SELECT row_vec FROM mat_r ORDER BY row_id;
+</pre></li>
+<li>Eigenvalues of matrix (note default column name of eigenvalues) <pre class="syntax">
+SELECT madlib.matrix_eigen('"mat_A"', 'row=row_id, val=row_vec', 'mat_r');
+SELECT eigen_values FROM mat_r ORDER BY row_id;
+</pre></li>
+<li>Cholesky decomposition of matrix <pre class="syntax">
+SELECT madlib.matrix_cholesky('"mat_A"', 'row=row_id, val=row_vec', 'matrix_out_prefix');
+SELECT row_vec FROM matrix_out_prefix_p ORDER BY row_id;
+SELECT row_vec FROM matrix_out_prefix_l ORDER BY row_id;
+SELECT row_vec FROM matrix_out_prefix_d ORDER BY row_id;
+</pre></li>
+<li>QR decomposition of matrix <pre class="syntax">
+SELECT madlib.matrix_qr('"mat_A"', 'row=row_id, val=row_vec', 'matrix_out_prefix');
+SELECT row_vec FROM matrix_out_prefix_q ORDER BY row_id;
+SELECT row_vec FROM matrix_out_prefix_r ORDER BY row_id;
+</pre></li>
+<li>LU decomposition of matrix <pre class="syntax">
+SELECT madlib.matrix_lu('"mat_A"', 'row=row_id, val=row_vec', 'matrix_out_prefix');
+SELECT row_vec FROM matrix_out_prefix_l ORDER BY row_id;
+SELECT row_vec FROM matrix_out_prefix_u ORDER BY row_id;
+SELECT row_vec FROM matrix_out_prefix_p ORDER BY row_id;
+SELECT row_vec FROM matrix_out_prefix_q ORDER BY row_id;
+</pre></li>
+<li>Nuclear norm of matrix <pre class="syntax">
+SELECT madlib.matrix_nuclear_norm('"mat_A"', 'row=row_id, val=row_vec');
+</pre> <pre class="result">
+ matrix_nuclear_norm
+---------------------
+       118.852685995
+(1 row)
+</pre></li>
+<li>Rank of matrix <pre class="syntax">
+SELECT madlib.matrix_rank('"mat_A"', 'row=row_id, val=row_vec');
+</pre> <pre class="result">
+ matrix_rank
+-------------
+          10
+(1 row)
+</pre></li>
+</ol>
+<dl class="section user"><dt>Examples (Sparse Format)</dt><dd></dd></dl>
+<p>Below are some examples of matrix operations in sparse format.</p>
+<ol type="1">
+<li>Convert a matrix from dense to sparse format <pre class="syntax">
+SELECT madlib.matrix_sparsify('"mat_B"', 'row=row_id, val=vector',
+                              '"mat_B_sparse"', 'col=col_id, val=val');
+SELECT * FROM "mat_B_sparse" ORDER BY row_id, col_id;
+</pre></li>
+<li>Create a matrix in sparse format. <pre class="syntax">
+CREATE TABLE "mat_A_sparse" (
+    "rowNum" integer,
+    col_num integer,
+    entry integer
+);
+INSERT INTO "mat_A_sparse" ("rowNum", col_num, entry) VALUES (1, 1, 9);
+INSERT INTO "mat_A_sparse" ("rowNum", col_num, entry) VALUES (1, 2, 6);
+INSERT INTO "mat_A_sparse" ("rowNum", col_num, entry) VALUES (1, 7, 3);
+INSERT INTO "mat_A_sparse" ("rowNum", col_num, entry) VALUES (1, 8, 10);
+INSERT INTO "mat_A_sparse" ("rowNum", col_num, entry) VALUES (1, 9, 8);
+INSERT INTO "mat_A_sparse" ("rowNum", col_num, entry) VALUES (2, 1, 8);
+INSERT INTO "mat_A_sparse" ("rowNum", col_num, entry) VALUES (2, 2, 2);
+INSERT INTO "mat_A_sparse" ("rowNum", col_num, entry) VALUES (2, 3, 6);
+INSERT INTO "mat_A_sparse" ("rowNum", col_num, entry) VALUES (3, 5, 6);
+INSERT INTO "mat_A_sparse" ("rowNum", col_num, entry) VALUES (3, 6, 3);
+INSERT INTO "mat_A_sparse" ("rowNum", col_num, entry) VALUES (7, 1, 7);
+INSERT INTO "mat_A_sparse" ("rowNum", col_num, entry) VALUES (8, 2, 8);
+INSERT INTO "mat_A_sparse" ("rowNum", col_num, entry) VALUES (8, 3, 5);
+INSERT INTO "mat_A_sparse" ("rowNum", col_num, entry) VALUES (9, 1, 6);
+INSERT INTO "mat_A_sparse" ("rowNum", col_num, entry) VALUES (9, 2, 3);
+INSERT INTO "mat_A_sparse" ("rowNum", col_num, entry) VALUES (10, 10, 0);
+</pre></li>
+<li>Get the row_dims and col_dims of a matrix in sparse format <pre class="syntax">
+SELECT madlib.matrix_ndims('"mat_A_sparse"', 'row="rowNum", val=entry')
+</pre> <pre class="result">
+ matrix_ndims
+--------------
+ {10,10}
+(1 row)
+</pre></li>
+<li>Transpose a matrix in sparse format <pre class="syntax">
+-- Note the double quotes for "rowNum" are required as per PostgreSQL rules since “N” is capitalized
+SELECT madlib.matrix_trans('"mat_A_sparse"', 'row="rowNum", val=entry',
+                           'matrix_r_sparse');
+SELECT "rowNum", col_num, entry FROM matrix_r_sparse ORDER BY col_num;
+</pre> <pre class="result">
+ rowNum | col_num | entry
+--------+---------+-------
+      1 |       1 |     9
+      2 |       1 |     6
+      7 |       1 |     3
+      8 |       1 |    10
+      9 |       1 |     8
+      1 |       2 |     8
+      2 |       2 |     2
+      3 |       2 |     6
+      5 |       3 |     6
+      6 |       3 |     3
+      1 |       7 |     7
+      2 |       8 |     8
+      3 |       8 |     5
+      1 |       9 |     6
+      2 |       9 |     3
+     10 |      10 |     0
+(16 rows)
+</pre></li>
+<li>Main diagonal of a matrix in sparse format <pre class="syntax">
+SELECT madlib.matrix_extract_diag('"mat_A_sparse"', 'row="rowNum", val=entry');
+</pre> <pre class="result">
+ matrix_extract_diag
+-----------------
+{9,2,0,0,0,0,0,0,0,0}
+(1 row)
+</pre></li>
+<li>Add two sparse matrices then convert to dense format <pre class="syntax">
+SELECT madlib.matrix_add('"mat_A_sparse"', 'row="rowNum", val=entry',
+                         '"mat_B_sparse"', 'row=row_id, col=col_id, val=val',
+                         'matrix_r_sparse', 'col=col_out');
+SELECT madlib.matrix_densify('matrix_r_sparse', 'row="rowNum", col=col_out, val=entry',
+                             'matrix_r');
+SELECT * FROM matrix_r ORDER BY "rowNum";
+</pre> <pre class="result">
+ rowNum |           entry
+--------+---------------------------
+      1 | {18,16,2,4,6,5,6,17,13,6}
+      2 | {13,5,11,2,8,6,9,7,7,6}
+      3 | {0,1,2,3,8,10,7,3,10,1}
+      4 | {2,9,0,4,3,6,8,6,3,4}
+      5 | {3,8,7,7,0,5,3,9,2,10}
+      6 | {5,3,1,7,6,3,5,3,6,4}
+      7 | {11,8,4,4,2,7,10,0,3,3}
+      8 | {4,14,5,1,3,1,6,6,9,8}
+      9 | {12,8,1,7,2,7,10,6,0,6}
+     10 | {1,4,4,4,8,5,2,8,5,5}
+(10 rows)
+</pre></li>
+<li>Multiply two sparse matrices <pre class="syntax">
+SELECT madlib.matrix_mult('"mat_A_sparse"', 'row="rowNum", col=col_num, val=entry',
+                          '"mat_B_sparse"', 'row=row_id, col=col_id, val=val, trans=true',
+                          'matrix_r');
+SELECT * FROM matrix_r ORDER BY "rowNum";
+</pre> <pre class="result">
+ rowNum |                   entry
+--------+-------------------------------------------
+      1 | {260,216,137,180,190,156,138,222,174,159}
+      2 | {104,76,14,34,82,52,72,44,64,40}
+      3 | {51,66,33,36,15,45,33,21,33,63}
+      4 | {0,0,0,0,0,0,0,0,0,0}
+      5 | {0,0,0,0,0,0,0,0,0,0}
+      6 | {0,0,0,0,0,0,0,0,0,0}
+      7 | {63,35,0,14,21,35,28,28,42,7}
+      8 | {90,49,18,72,99,29,84,48,45,52}
+      9 | {84,39,3,39,42,39,48,42,51,18}
+     10 | {0,0,0,0,0,0,0,0,0,0}
+(10 rows)
+</pre></li>
+<li>Initialize matrix with ones  <pre class="syntax">
+SELECT madlib.matrix_ones(5, 4, 'mat_r', 'row=row,col=col, val=val');
+SELECT * FROM mat_r ORDER BY row, col;
+</pre> <pre class="result">
+ row | col | val
+-----+-----+-----
+   1 |   1 |   1
+   1 |   2 |   1
+   1 |   3 |   1
+   1 |   4 |   1
+   2 |   1 |   1
+   2 |   2 |   1
+   2 |   3 |   1
+   2 |   4 |   1
+   3 |   1 |   1
+   3 |   2 |   1
+   3 |   3 |   1
+   3 |   4 |   1
+   4 |   1 |   1
+   4 |   2 |   1
+   4 |   3 |   1
+   4 |   4 |   1
+   5 |   1 |   1
+   5 |   2 |   1
+   5 |   3 |   1
+   5 |   4 |   1
+(20 rows)
+</pre></li>
+<li>Initialize matrix with zeros in sparse format  <pre class="syntax">
+SELECT madlib.matrix_zeros(5, 4, 'mat_r', 'row=row_id, col=col_id, val=entry');
+SELECT * FROM mat_r;
+</pre> <pre class="result">
+ row_id |  col_id | entry
+--------+---------+--------
+      5 |       4 |    0
+(1 rows)
+</pre></li>
+<li>Compute matrix norm on sparse matrix. In this example, we ask for the Euclidean norm: <pre class="syntax">
+SELECT madlib.matrix_norm('"mat_A_sparse"', 'row="rowNum", col=col_num, val=entry', '2');
+</pre> <pre class="result">
+  matrix_norm
+---------------
+ 24.9399278267
+(1 row)
+</pre></li>
+</ol>
+<p><a class="anchor" id="related"></a></p><dl class="section user"><dt>Related Topics</dt><dd></dd></dl>
+<p>File <a class="el" href="array__ops_8sql__in.html" title="implementation of array operations in SQL ">array_ops.sql_in</a> documents the array operations <a class="el" href="group__grp__array.html">Array Operations</a></p>
+<p>File <a class="el" href="matrix__ops_8sql__in.html" title="Implementation of matrix operations in SQL. ">matrix_ops.sql_in</a> for list of functions and usage. </p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__matrix__factorization.html b/docs/rc/group__grp__matrix__factorization.html
new file mode 100644
index 0000000..9632d31
--- /dev/null
+++ b/docs/rc/group__grp__matrix__factorization.html
@@ -0,0 +1,142 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Matrix Factorization</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__matrix__factorization.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#groups">Modules</a>  </div>
+  <div class="headertitle">
+<div class="title">Matrix Factorization<div class="ingroups"><a class="el" href="group__grp__datatrans.html">Data Types and Transformations</a> &raquo; <a class="el" href="group__grp__arraysmatrix.html">Arrays and Matrices</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Linear algebra methods that factorize a matrix into a product of matrices. </p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group__grp__lmf"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__lmf.html">Low-Rank Matrix Factorization</a></td></tr>
+<tr class="memdesc:group__grp__lmf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Performs low-rank matrix factorization for an incomplete matrix. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__svd"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__svd.html">Singular Value Decomposition</a></td></tr>
+<tr class="memdesc:group__grp__svd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Performs factorization of dense and sparse matrices. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__matrix__factorization.js b/docs/rc/group__grp__matrix__factorization.js
new file mode 100644
index 0000000..5d3e1c9
--- /dev/null
+++ b/docs/rc/group__grp__matrix__factorization.js
@@ -0,0 +1,5 @@
+var group__grp__matrix__factorization =
+[
+    [ "Low-Rank Matrix Factorization", "group__grp__lmf.html", null ],
+    [ "Singular Value Decomposition", "group__grp__svd.html", null ]
+];
\ No newline at end of file
diff --git a/docs/rc/group__grp__mdl.html b/docs/rc/group__grp__mdl.html
new file mode 100644
index 0000000..e5ab763
--- /dev/null
+++ b/docs/rc/group__grp__mdl.html
@@ -0,0 +1,145 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Model Selection</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__mdl.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#groups">Modules</a>  </div>
+  <div class="headertitle">
+<div class="title">Model Selection</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Functions for model selection and model evaluation. </p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group__grp__validation"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__validation.html">Cross Validation</a></td></tr>
+<tr class="memdesc:group__grp__validation"><td class="mdescLeft">&#160;</td><td class="mdescRight">Estimates the fit of a predictive model given a data set and specifications for the training, prediction, and error estimation functions. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__pred"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__pred.html">Prediction Metrics</a></td></tr>
+<tr class="memdesc:group__grp__pred"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provides various prediction accuracy metrics. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__train__test__split"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__train__test__split.html">Train-Test Split</a></td></tr>
+<tr class="memdesc:group__grp__train__test__split"><td class="mdescLeft">&#160;</td><td class="mdescRight">A method for splitting a data set into separate training and testing sets. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__mdl.js b/docs/rc/group__grp__mdl.js
new file mode 100644
index 0000000..4dc5e5d
--- /dev/null
+++ b/docs/rc/group__grp__mdl.js
@@ -0,0 +1,6 @@
+var group__grp__mdl =
+[
+    [ "Cross Validation", "group__grp__validation.html", null ],
+    [ "Prediction Metrics", "group__grp__pred.html", null ],
+    [ "Train-Test Split", "group__grp__train__test__split.html", null ]
+];
\ No newline at end of file
diff --git a/docs/rc/group__grp__mfvsketch.html b/docs/rc/group__grp__mfvsketch.html
new file mode 100644
index 0000000..c765ac6
--- /dev/null
+++ b/docs/rc/group__grp__mfvsketch.html
@@ -0,0 +1,176 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: MFV (Most Frequent Values)</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__mfvsketch.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">MFV (Most Frequent Values)<div class="ingroups"><a class="el" href="group__grp__stats.html">Statistics</a> &raquo; <a class="el" href="group__grp__desc__stats.html">Descriptive Statistics</a> &raquo; <a class="el" href="group__grp__sketches.html">Cardinality Estimators</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li>
+<a href="#syntax">Syntax</a> </li>
+<li>
+<a href="#examples">Examples</a> </li>
+<li>
+<a href="#literature">Literature</a> </li>
+<li>
+<a href="#related">Related Topics</a> </li>
+</ul>
+</div><p>MFVSketch: Most Frequent Values variant of CountMin sketch, implemented as a UDA.</p>
+<p>Produces an n-bucket histogram for a column where each bucket counts one of the most frequent values in the column. The output is an array of doubles {value, count} in descending order of frequency; counts are approximated via CountMin sketches. Ties are handled arbitrarily.</p>
+<p><a class="anchor" id="syntax"></a> The MFV frequent-value UDA comes in two different versions:</p><ul>
+<li>a faithful implementation that preserves the approximation guarantees of Cormode/Muthukrishnan, <pre class="syntax">
+mfvsketch_top_histogram( col_name,
+                         n )
+</pre></li>
+<li>and a "quick and dirty" version that can do parallel aggregation in Greenplum at the expense of missing some of the most frequent values. <pre class="syntax">
+mfvsketch_quick_histogram( col_name,
+                           n )
+</pre></li>
+</ul>
+<p>In PostgreSQL the two UDAs are identical. In Greenplum, the quick version should produce good results unless the number of values requested is small, or the distribution is flat.</p>
+<dl class="section note"><dt>Note</dt><dd>This is a <a href="https://www.postgresql.org/docs/current/static/xaggr.html">User Defined Aggregate</a> which returns the results when used in a query. Use "CREATE TABLE AS ", with the UDA as subquery if the results are to be stored. This is unlike the usual MADlib stored procedure interface which places the results in a table instead of returning it.</dd></dl>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<ol type="1">
+<li>Generate some data. <pre class="example">
+CREATE TABLE data(class INT, a1 INT);
+INSERT INTO data SELECT 1,1 FROM generate_series(1,10000);
+INSERT INTO data SELECT 1,2 FROM generate_series(1,15000);
+INSERT INTO data SELECT 1,3 FROM generate_series(1,10000);
+INSERT INTO data SELECT 2,5 FROM generate_series(1,1000);
+INSERT INTO data SELECT 2,6 FROM generate_series(1,1000);
+</pre></li>
+<li>Produce a histogram of 5 bins and return the most frequent value and associated count in each bin. <pre class="example">
+SELECT mfvsketch_top_histogram( a1, 5 )
+FROM data;
+</pre> Result: <pre class="result">
+                mfvsketch_top_histogram
+&#160;-------------------------------------------------------------
+[0:4][0:1]={{2,15000},{1,10000},{3,10000},{5,1000},{6,1000}}
+(1 row)
+</pre></li>
+</ol>
+<p><a class="anchor" id="literature"></a></p><dl class="section user"><dt>Literature</dt><dd>This method is not usually called an MFV sketch in the literature; it is a natural extension of the CountMin sketch.</dd></dl>
+<p><a class="anchor" id="related"></a></p><dl class="section user"><dt>Related Topics</dt><dd></dd></dl>
+<p>File <a class="el" href="sketch_8sql__in.html" title="SQL functions for sketch-based approximations of descriptive statistics. ">sketch.sql_in</a> documenting the SQL functions.</p>
+<p>Module <a class="el" href="group__grp__countmin.html">CountMin (Cormode-Muthukrishnan)</a>. </p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__minibatch__preprocessing.html b/docs/rc/group__grp__minibatch__preprocessing.html
new file mode 100644
index 0000000..2f5fa7b
--- /dev/null
+++ b/docs/rc/group__grp__minibatch__preprocessing.html
@@ -0,0 +1,455 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Mini-Batch Preprocessor</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__minibatch__preprocessing.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Mini-Batch Preprocessor<div class="ingroups"><a class="el" href="group__grp__other__functions.html">Utilities</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b><ul>
+<li class="level1">
+<a href="#minibatch_preprocessor">Mini-Batch Preprocessor</a> </li>
+<li class="level1">
+<a href="#example">Examples</a> </li>
+<li class="level1">
+<a href="#literature">Literature</a> </li>
+<li class="level1">
+<a href="#related">Related Topics</a> </li>
+</ul>
+</div><p>The mini-batch preprocessor is a utility that prepares input data for use by models that support mini-batch as an optimization option. (This is currently only the case for <a href="group__grp__nn.html">Neural Networks</a>.) It is effectively a packing operation that builds arrays of dependent and independent variables from the source data table.</p>
+<p>The advantage of using mini-batching is that it can perform better than stochastic gradient descent (default MADlib optimizer) because it uses more than one training example at a time, typically resulting in faster and smoother convergence [1].</p>
+<p><a class="anchor" id="minibatch_preprocessor"></a></p><dl class="section user"><dt>Mini-Batch Preprocessor</dt><dd>The mini-batch preprocessor has the following format:</dd></dl>
+<pre class="syntax">
+minibatch_preprocessor( source_table,
+                        output_table,
+                        dependent_varname,
+                        independent_varname,
+                        grouping_col,
+                        buffer_size,
+                        one_hot_encode_int_dep_var
+                        )
+</pre><p><b>Arguments</b> </p><dl class="arglist">
+<dt>source_table </dt>
+<dd><p class="startdd">TEXT. Name of the table containing input data. Can also be a view. </p>
+<p class="enddd"></p>
+</dd>
+<dt>output_table </dt>
+<dd><p class="startdd">TEXT. Name of the output table from the preprocessor which will be used as input to algorithms that support mini-batching. Note that the arrays packed into the output table are randomized and normalized, so they will not match up in an obvious way with the rows in the source table. </p>
+<p class="enddd"></p>
+</dd>
+<dt>dependent_varname </dt>
+<dd><p class="startdd">TEXT. Name of the dependent variable column. </p>
+<p class="enddd"></p>
+</dd>
+<dt>independent_varname </dt>
+<dd>TEXT. Column name or expression list to evaluate for the independent variable. Please note that independent variables are cast to double precision by the preprocessor, so categorical variables should be one-hot or dummy encoded as appropriate. See <a href="group__grp__encode__categorical.html">Encoding Categorical Variables</a> for more details on this. <dl class="section note"><dt>Note</dt><dd>Supported expressions for independent variables include:<ul>
+<li>‘ARRAY[x1,x2,x3]’, where x1, x2, and x3 are columns in the source table containing scalar values.</li>
+<li>Single column in the source table containing an array like ARRAY[1,2,3] or {1,2,3}. </li>
+</ul>
+</dd>
+<dd>
+The following forms are not currently supported:<ul>
+<li>‘x1,x2,x3’, where x1,x2,x3 are columns in source table with scalar values</li>
+<li>ARRAY[x1,x2] where x1 is scalar and x2 is array</li>
+<li>ARRAY[x1,x2] where both x1 and x2 are arrays</li>
+<li>ARRAY[x1] where x1 is array </li>
+</ul>
+</dd></dl>
+</dd>
+<dt>grouping_col (optional) </dt>
+<dd>TEXT, default: NULL. An expression list used to group the input dataset into discrete groups, which runs the preprocessing separately for each group. When this value is NULL, no grouping is used and a single preprocessor step is run for the whole data set. <dl class="section note"><dt>Note</dt><dd>If you plan to use grouping in model training, then you must set up the groups in the preprocessor exactly as you want to use them in training. </dd></dl>
+</dd>
+<dt>buffer_size (optional) </dt>
+<dd><p class="startdd">INTEGER, default: computed. Buffer size is the number of rows from the source table that are packed into one row of the preprocessor output table. The default value is computed considering size of the source table, number of independent variables, number of groups, and number of segments in the database cluster. For larger data sets, the computed buffer size will typically be a value in the millions. </p>
+<p class="enddd"></p>
+</dd>
+<dt>one_hot_encode_int_dep_var (optional) </dt>
+<dd><p class="startdd">BOOLEAN. default: FALSE. Flag to one-hot encode dependent variables that are scalar integers. This parameter is ignored if the dependent variable is not a scalar integer.</p>
+<dl class="section note"><dt>Note</dt><dd>The mini-batch preprocessor automatically encodes dependent variables that are boolean and character types such as text, char and varchar. However, scalar integers are a special case because they can be used in both classification and regression problems, so you must tell the mini-batch preprocessor whether you want to encode them or not. In the case that you have already encoded the dependent variable yourself, you can ignore this parameter. Also, if you want to encode float values for some reason, cast them to text first.  </dd></dl>
+</dd>
+</dl>
+<p><b>Output tables</b> <br />
+ The output table produced by the mini-batch preprocessor contains the following columns: </p><table class="output">
+<tr>
+<th>__id__ </th><td>INTEGER. Unique id for packed table.   </td></tr>
+<tr>
+<th>dependent_varname </th><td>FLOAT8[]. Packed array of dependent variables. If the dependent variable in the source table is categorical, the preprocessor will one-hot encode it.   </td></tr>
+<tr>
+<th>independent_varname </th><td>FLOAT8[]. Packed array of independent variables.   </td></tr>
+<tr>
+<th>grouping_cols </th><td>TEXT. Name of grouping columns.   </td></tr>
+</table>
+<p>A summary table named &lt;output_table&gt;_summary is also created, which has the following columns: </p><table class="output">
+<tr>
+<th>source_table </th><td>Name of the source table.  </td></tr>
+<tr>
+<th>output_table </th><td>Name of output table generated by preprocessor.  </td></tr>
+<tr>
+<th>dependent_varname </th><td>Dependent variable from the source table.  </td></tr>
+<tr>
+<th>independent_varname </th><td>Independent variable from the source table.  </td></tr>
+<tr>
+<th>buffer_size </th><td>Buffer size used in preprocessing step.  </td></tr>
+<tr>
+<th>class_values </th><td>Class values (i.e., levels) of the dependent variable if categorical. If the dependent variable is not categorical, this will be NULL./td&gt;  </td></tr>
+<tr>
+<th>num_rows_processed </th><td>The total number of rows that were used in the preprocessing operation.  </td></tr>
+<tr>
+<th>num_missing_rows_skipped </th><td>The total number of rows that were skipped because of NULL values in either the dependent or independent variables.  </td></tr>
+<tr>
+<th>grouping_col </th><td>Comma separated list of grouping column names if grouping is used. If no grouping, will be NULL.  </td></tr>
+</table>
+<p>A standardization table named &lt;output_table&gt;_standardization is also created. This is needed by the models that will use the preprocessed data so is likely not of much interest to users. It has the following columns: </p><table class="output">
+<tr>
+<th>grouping columns </th><td>If 'grouping_col' is specified, a column for each grouping column is created.  </td></tr>
+<tr>
+<th>mean </th><td>Mean of independent variables.  </td></tr>
+<tr>
+<th>std </th><td>Population standard deviation of independent variables.  </td></tr>
+</table>
+<p><a class="anchor" id="example"></a></p><dl class="section user"><dt>Examples</dt><dd><ol type="1">
+<li>Create an input data set based on the well known iris data set: <pre class="example">
+DROP TABLE IF EXISTS iris_data;
+CREATE TABLE iris_data(
+    id serial,
+    attributes numeric[],
+    class_text varchar,
+    class integer,
+    state varchar
+);
+INSERT INTO iris_data(id, attributes, class_text, class, state) VALUES
+(1,ARRAY[5.0,3.2,1.2,0.2],'Iris_setosa',1,'Alaska'),
+(2,ARRAY[5.5,3.5,1.3,0.2],'Iris_setosa',1,'Alaska'),
+(3,ARRAY[4.9,3.1,1.5,0.1],'Iris_setosa',1,'Alaska'),
+(4,ARRAY[4.4,3.0,1.3,0.2],'Iris_setosa',1,'Alaska'),
+(5,ARRAY[5.1,3.4,1.5,0.2],'Iris_setosa',1,'Alaska'),
+(6,ARRAY[5.0,3.5,1.3,0.3],'Iris_setosa',1,'Alaska'),
+(7,ARRAY[4.5,2.3,1.3,0.3],'Iris_setosa',1,'Alaska'),
+(8,ARRAY[4.4,3.2,1.3,0.2],'Iris_setosa',1,'Alaska'),
+(9,ARRAY[5.0,3.5,1.6,0.6],'Iris_setosa',1,'Alaska'),
+(10,ARRAY[5.1,3.8,1.9,0.4],'Iris_setosa',1,'Alaska'),
+(11,ARRAY[4.8,3.0,1.4,0.3],'Iris_setosa',1,'Alaska'),
+(12,ARRAY[5.1,3.8,1.6,0.2],'Iris_setosa',1,'Alaska'),
+(13,ARRAY[5.7,2.8,4.5,1.3],'Iris_versicolor',2,'Alaska'),
+(14,ARRAY[6.3,3.3,4.7,1.6],'Iris_versicolor',2,'Alaska'),
+(15,ARRAY[4.9,2.4,3.3,1.0],'Iris_versicolor',2,'Alaska'),
+(16,ARRAY[6.6,2.9,4.6,1.3],'Iris_versicolor',2,'Alaska'),
+(17,ARRAY[5.2,2.7,3.9,1.4],'Iris_versicolor',2,'Alaska'),
+(18,ARRAY[5.0,2.0,3.5,1.0],'Iris_versicolor',2,'Alaska'),
+(19,ARRAY[5.9,3.0,4.2,1.5],'Iris_versicolor',2,'Alaska'),
+(20,ARRAY[6.0,2.2,4.0,1.0],'Iris_versicolor',2,'Alaska'),
+(21,ARRAY[6.1,2.9,4.7,1.4],'Iris_versicolor',2,'Alaska'),
+(22,ARRAY[5.6,2.9,3.6,1.3],'Iris_versicolor',2,'Alaska'),
+(23,ARRAY[6.7,3.1,4.4,1.4],'Iris_versicolor',2,'Alaska'),
+(24,ARRAY[5.6,3.0,4.5,1.5],'Iris_versicolor',2,'Alaska'),
+(25,ARRAY[5.8,2.7,4.1,1.0],'Iris_versicolor',2,'Alaska'),
+(26,ARRAY[6.2,2.2,4.5,1.5],'Iris_versicolor',2,'Alaska'),
+(27,ARRAY[5.6,2.5,3.9,1.1],'Iris_versicolor',2,'Alaska'),
+(28,ARRAY[5.0,3.4,1.5,0.2],'Iris_setosa',1,'Tennessee'),
+(29,ARRAY[4.4,2.9,1.4,0.2],'Iris_setosa',1,'Tennessee'),
+(30,ARRAY[4.9,3.1,1.5,0.1],'Iris_setosa',1,'Tennessee'),
+(31,ARRAY[5.4,3.7,1.5,0.2],'Iris_setosa',1,'Tennessee'),
+(32,ARRAY[4.8,3.4,1.6,0.2],'Iris_setosa',1,'Tennessee'),
+(33,ARRAY[4.8,3.0,1.4,0.1],'Iris_setosa',1,'Tennessee'),
+(34,ARRAY[4.3,3.0,1.1,0.1],'Iris_setosa',1,'Tennessee'),
+(35,ARRAY[5.8,4.0,1.2,0.2],'Iris_setosa',1,'Tennessee'),
+(36,ARRAY[5.7,4.4,1.5,0.4],'Iris_setosa',1,'Tennessee'),
+(37,ARRAY[5.4,3.9,1.3,0.4],'Iris_setosa',1,'Tennessee'),
+(38,ARRAY[6.0,2.9,4.5,1.5],'Iris_versicolor',2,'Tennessee'),
+(39,ARRAY[5.7,2.6,3.5,1.0],'Iris_versicolor',2,'Tennessee'),
+(40,ARRAY[5.5,2.4,3.8,1.1],'Iris_versicolor',2,'Tennessee'),
+(41,ARRAY[5.5,2.4,3.7,1.0],'Iris_versicolor',2,'Tennessee'),
+(42,ARRAY[5.8,2.7,3.9,1.2],'Iris_versicolor',2,'Tennessee'),
+(43,ARRAY[6.0,2.7,5.1,1.6],'Iris_versicolor',2,'Tennessee'),
+(44,ARRAY[5.4,3.0,4.5,1.5],'Iris_versicolor',2,'Tennessee'),
+(45,ARRAY[6.0,3.4,4.5,1.6],'Iris_versicolor',2,'Tennessee'),
+(46,ARRAY[6.7,3.1,4.7,1.5],'Iris_versicolor',2,'Tennessee'),
+(47,ARRAY[6.3,2.3,4.4,1.3],'Iris_versicolor',2,'Tennessee'),
+(48,ARRAY[5.6,3.0,4.1,1.3],'Iris_versicolor',2,'Tennessee'),
+(49,ARRAY[5.5,2.5,4.0,1.3],'Iris_versicolor',2,'Tennessee'),
+(50,ARRAY[5.5,2.6,4.4,1.2],'Iris_versicolor',2,'Tennessee'),
+(51,ARRAY[6.1,3.0,4.6,1.4],'Iris_versicolor',2,'Tennessee'),
+(52,ARRAY[5.8,2.6,4.0,1.2],'Iris_versicolor',2,'Tennessee');
+</pre></li>
+<li>Run the preprocessor: <pre class="example">
+DROP TABLE IF EXISTS iris_data_packed, iris_data_packed_summary, iris_data_packed_standardization;
+SELECT madlib.minibatch_preprocessor('iris_data',         -- Source table
+                                     'iris_data_packed',  -- Output table
+                                     'class_text',        -- Dependent variable
+                                     'attributes'         -- Independent variables
+                                     );
+</pre> For small datasets like in this example, buffer size is mainly determined by the number of segments in the database. This example is run on a Greenplum database with 2 segments, so there are 2 rows with a buffer size of 26. For PostgresSQL, there would be only one row with a buffer size of 52 since it is a single node database. For larger data sets, other factors go into computing buffers size besides number of segments. Also, note that the dependent variable has been one-hot encoded since it is categorical. Here is a sample of the packed output table: <pre class="example">
+\x on
+SELECT * FROM iris_data_packed;
+</pre> <pre class="result">
+-[ RECORD 1 ]-------+-------------------------------------
+__id__              | 0
+dependent_varname   | {{1,0},{0,1},{1,0},{0,1},{1,0},{0,1},{0,1},{1,0},{1,0},{1,0},{1,0},{0,1},{0,1},{0,1},{1,0},{0,1},{0,1},{0,1},{1,0},{0,1},{1,0},{0,1},{1,0},{1,0},{1,0},{0,1}}
+independent_varname | {{-0.767560815504508,0.806649237861967,-1.07515071152907,-1.18456909732025},{-0.0995580974152422,0.00385956572525086,1.03989986852812,1.17758048907675},...
+...
+-[ RECORD 2 ]-------+-------------------------------------
+__id__              | 1
+dependent_varname   | {{1,0},{1,0},{1,0},{0,1},{0,1},{1,0},{0,1},{0,1},{0,1},{0,1},{0,1},{0,1},{0,1},{1,0},{0,1},{0,1},{0,1},{0,1},{0,1},{1,0},{0,1},{1,0},{0,1},{1,0},{1,0},{0,1}}
+independent_varname | {{0.568444620674023,2.01083374606704,-1.28665576953479,-1.18456909732025},{-1.76956489263841,0.405254401793609,-1.21615408353289,-1.18456909732025},...
+...
+</pre> Review the output summary table: <pre class="example">
+SELECT * FROM iris_data_packed_summary;
+</pre> <pre class="result">
+-[ RECORD 1 ]------------+------------------------------
+source_table             | iris_data
+output_table             | iris_data_packed
+dependent_varname        | class_text
+independent_varname      | attributes
+buffer_size              | 26
+class_values             | {Iris_setosa,Iris_versicolor}
+num_rows_processed       | 52
+num_missing_rows_skipped | 0
+grouping_cols            |
+</pre> Review the output standardization table: <pre class="example">
+SELECT * FROM iris_data_packed_standardization;
+</pre> <pre class="result">
+-[ RECORD 1 ]------------------------------------------------------
+mean | {5.45961538462,2.99807692308,3.025,0.851923076923}
+std  | {0.598799958695,0.498262513686,1.41840579525,0.550346179381}
+</pre></li>
+<li>Generally the default buffer size will work well, but if you have occasion to change it: <pre class="example">
+DROP TABLE IF EXISTS iris_data_packed, iris_data_packed_summary, iris_data_packed_standardization;
+SELECT madlib.minibatch_preprocessor('iris_data',         -- Source table
+                                     'iris_data_packed',  -- Output table
+                                     'class_text',        -- Dependent variable
+                                     'attributes',        -- Independent variables
+                                     NULL,                -- Grouping
+                                     10                   -- Buffer size
+                                     );
+</pre> Review the output summary table: <pre class="example">
+SELECT * FROM iris_data_packed_summary;
+</pre> <pre class="result">
+-[ RECORD 1 ]------------+------------------------------
+source_table             | iris_data
+output_table             | iris_data_packed
+dependent_varname        | class_text
+independent_varname      | attributes
+buffer_size              | 10
+class_values             | {Iris_setosa,Iris_versicolor}
+num_rows_processed       | 52
+num_missing_rows_skipped | 0
+grouping_cols            |
+</pre></li>
+<li>Run the preprocessor with grouping by state: <pre class="example">
+DROP TABLE IF EXISTS iris_data_packed, iris_data_packed_summary, iris_data_packed_standardization;
+SELECT madlib.minibatch_preprocessor('iris_data',         -- Source table
+                                     'iris_data_packed',  -- Output table
+                                     'class_text',        -- Dependent variable
+                                     'attributes',        -- Independent variables
+                                     'state'              -- Grouping
+                                     );
+</pre> Review the output table: <pre class="example">
+SELECT * FROM iris_data_packed ORDER BY state, __id__;
+</pre> <pre class="result">
+-[ RECORD 1 ]-------+-------------------------------------
+__id__              | 0
+state               | Alaska
+dependent_varname   | {{0,1},{0,1},{1,0},{0,1},{0,1},{0,1},{1,0},{0,1},{0,1},{1,0},{1,0},{0,1},{0,1}}
+independent_varname | {{0.306242850830503,-0.977074857057813,0.680489757142278 ...
+...
+-[ RECORD 2 ]-------+-------------------------------------
+__id__              | 1
+state               | Alaska
+dependent_varname   | {{0,1},{1,0},{0,1},{0,1},{1,0},{1,0},{1,0},{0,1},{1,0},{0,1},{0,1},{1,0},{1,0}}
+independent_varname | {{1.10129640587123,-0.126074175104234,1.2524188915498 ...
+...
+-[ RECORD 3 ]-------+-------------------------------------
+__id__              | 2
+state               | Alaska
+dependent_varname   | {{1,0}}
+independent_varname | {{-0.647821415218373,1.15042684782613,-1.17827992968215 ...
+...
+-[ RECORD 4 ]-------+-------------------------------------
+__id__              | 0
+state               | Tennessee
+dependent_varname   | {{1,0},{0,1},{1,0},{1,0},{1,0},{0,1},{1,0},{0,1},{0,1},{0,1},{1,0},{1,0},{0,1}}
+independent_varname | {{0.32912603663053,2.59625206429212,-1.12079945083087 ...
+...
+-[ RECORD 5 ]-------+-------------------------------------
+__id__              | 1
+state               | Tennessee
+dependent_varname   | {{0,1},{0,1},{0,1},{1,0},{1,0},{0,1},{0,1},{1,0},{0,1},{0,1},{0,1},{0,1}}
+independent_varname | {{0.865744574615085,-0.267261241912424,0.970244300719264 ...
+...
+</pre> Review the output summary table: <pre class="example">
+SELECT * FROM iris_data_packed_summary;
+</pre> <pre class="result">
+-[ RECORD 1 ]------------+------------------------------
+source_table             | iris_data
+output_table             | iris_data_packed
+dependent_varname        | class_text
+independent_varname      | attributes
+buffer_size              | 13
+class_values             | {Iris_setosa,Iris_versicolor}
+num_rows_processed       | 52
+num_missing_rows_skipped | 0
+grouping_cols            | state
+</pre> Review the output standardization table: <pre class="example">
+SELECT * FROM iris_data_packed_standardization;
+</pre> <pre class="result">
+-[ RECORD 1 ]-------------------------------------------------------------------
+state | Alaska
+mean  | {5.40740740740741,2.95925925925926,2.94814814814815,0.833333333333333}
+std   | {0.628888452645665,0.470034875978888,1.39877469405147,0.536103914747325}
+-[ RECORD 2 ]-------------------------------------------------------------------
+state | Tennessee
+mean  | {5.516,3.04,3.108,0.872}
+std   | {0.55905634778617,0.523832034148353,1.43469021046357,0.564637937088893}
+</pre></li>
+<li>If the depedent variable is scalar integer, and you have not already encoded it, you can ask the preprocessor to encode it for you: <pre class="example">
+DROP TABLE IF EXISTS iris_data_packed, iris_data_packed_summary, iris_data_packed_standardization;
+SELECT madlib.minibatch_preprocessor('iris_data',         -- Source table
+                                     'iris_data_packed',  -- Output table
+                                     'class',             -- Integer dependent variable
+                                     'attributes',        -- Independent variables
+                                     NULL,                -- Grouping
+                                     NULL,                -- Buffer size
+                                     TRUE                 -- Encode scalar int dependent variable
+                                     );
+</pre> Review the output summary table: <pre class="example">
+SELECT * FROM iris_data_packed_summary;
+</pre> <pre class="result">
+-[ RECORD 1 ]------------+-----------------
+source_table             | iris_data
+output_table             | iris_data_packed
+dependent_varname        | class
+independent_varname      | attributes
+dependent_vartype        | integer
+buffer_size              | 26
+class_values             | {1,2}
+num_rows_processed       | 52
+num_missing_rows_skipped | 0
+grouping_cols            |
+</pre></li>
+</ol>
+</dd></dl>
+<p><a class="anchor" id="literature"></a></p><dl class="section user"><dt>Literature</dt><dd></dd></dl>
+<p>[1] "Neural Networks for Machine Learning", Lectures 6a and 6b on mini-batch gradient descent, Geoffrey Hinton with Nitish Srivastava and Kevin Swersky, <a href="http://www.cs.toronto.edu/~tijmen/csc321/slides/lecture_slides_lec6.pdf">http://www.cs.toronto.edu/~tijmen/csc321/slides/lecture_slides_lec6.pdf</a></p>
+<p><a class="anchor" id="related"></a></p><dl class="section user"><dt>Related Topics</dt><dd></dd></dl>
+<p><a class="el" href="minibatch__preprocessing_8sql__in.html" title="TODO. ">minibatch_preprocessing.sql_in</a></p>
+<p><a href="group__grp__nn.html"><b>Neural Networks</b></a> </p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:59 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__mlogreg.html b/docs/rc/group__grp__mlogreg.html
new file mode 100644
index 0000000..d56d6b0
--- /dev/null
+++ b/docs/rc/group__grp__mlogreg.html
@@ -0,0 +1,416 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Multinomial Logistic Regression</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__mlogreg.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Multinomial Logistic Regression<div class="ingroups"><a class="el" href="group__grp__deprecated.html">Deprecated Modules</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<dl class="section warning"><dt>Warning</dt><dd><em> This is an old implementation of multinomial logistic regression. Replacement of this function is available as the Multinomial regression module <a class="el" href="group__grp__multinom.html">Multinomial Regression</a></em></dd></dl>
+<div class="toc"><b>Contents</b> <ul>
+<li class="level1">
+<a href="#train">Training Function</a> </li>
+<li class="level1">
+<a href="#predict">Prediction Function</a> </li>
+<li class="level1">
+<a href="#examples">Examples</a> </li>
+<li class="level1">
+<a href="#background">Technical Background</a> </li>
+<li class="level1">
+<a href="#literature">Literature</a> </li>
+<li class="level1">
+<a href="#related">Related Topics</a> </li>
+</ul>
+</div><p>Multinomial logistic regression is a widely used regression analysis tool that models the outcomes of categorical dependent random variables. The model assumes that the conditional mean of the dependent categorical variables is the logistic function of an affine combination of independent variables. Multinomial logistic regression finds the vector of coefficients that maximizes the likelihood of the observations.</p>
+<p><a class="anchor" id="train"></a></p><dl class="section user"><dt>Training Function</dt><dd>The multinomial logistic regression training function has the following syntax: <pre class="syntax">
+mlogregr_train(source_table,
+               output_table,
+               dependent_varname,
+               independent_varname,
+               ref_category,
+               optimizer_params
+              )
+</pre> <b>Arguments</b> <dl class="arglist">
+<dt>source_table </dt>
+<dd><p class="startdd">TEXT. The name of the table containing the input data.</p>
+<p></p>
+<p class="enddd"></p>
+</dd>
+<dt>output_table </dt>
+<dd><p class="startdd">TEXT. The name of the generated table containing the output model. The output table produced by the multinomial logistic regression training function contains the following columns: </p><table class="output">
+<tr>
+<th>category </th><td>INTEGER. The category. Categories are encoded as integers with values from {0, 1, 2,..., <em>numCategories</em> &ndash; 1}  </td></tr>
+<tr>
+<th>ref_category </th><td>INTEGER. The reference category. Categories are encoded as integers with values from {0, 1, 2,..., <em>numCategories</em> &ndash; 1}  </td></tr>
+<tr>
+<th>coef </th><td>FLOAT8[]. An array of coefficients, \( \boldsymbol c \).   </td></tr>
+<tr>
+<th>log_likelihood </th><td>FLOAT8. The log-likelihood, \( l(\boldsymbol c) \).  </td></tr>
+<tr>
+<th>std_err </th><td>FLOAT8[]. An array of the standard errors.  </td></tr>
+<tr>
+<th>z_stats </th><td>FLOAT8[]. An array of the Wald z-statistics.  </td></tr>
+<tr>
+<th>p_values </th><td>FLOAT8[]. An array of the Wald p-values.  </td></tr>
+<tr>
+<th>odds_ratios </th><td>FLOAT8[]. An array of the odds ratios.  </td></tr>
+<tr>
+<th>condition_no </th><td>FLOAT8. The condition number of the matrix, computed using the coefficients of the iteration immediately preceding convergence.  </td></tr>
+<tr>
+<th>num_iterations </th><td>INTEGER. The number of iterations executed before the algorithm completed.  </td></tr>
+</table>
+<p>A summary table named &lt;out_table&gt;_summary is also created at the same time, and it contains the following columns:</p>
+<table class="output">
+<tr>
+<th>source_table </th><td>The data source table name.  </td></tr>
+<tr>
+<th>out_table </th><td>The output table name.  </td></tr>
+<tr>
+<th>dependent_varname </th><td>The dependent variable.  </td></tr>
+<tr>
+<th>independent_varname </th><td>The independent variables.  </td></tr>
+<tr>
+<th>optimizer_params </th><td>The optimizer parameters. It is a copy of the optimizer_params in the training function's arguments.  </td></tr>
+<tr>
+<th>ref_category </th><td>An integer, the value of reference category used.  </td></tr>
+<tr>
+<th>num_rows_processed </th><td>INTEGER. The number of rows actually processed, which is equal to the total number of rows in the source table minus the number of skipped rows.  </td></tr>
+<tr>
+<th>num_missing_rows_skipped </th><td>INTEGER. The number of rows skipped during the training. A row will be skipped if the ind_col is NULL or contains NULL values.  </td></tr>
+</table>
+<p class="enddd"></p>
+</dd>
+<dt>dependent_varname </dt>
+<dd><p class="startdd">TEXT. The name of the column containing the dependent variable.</p>
+<p class="enddd"></p>
+</dd>
+<dt>independent_varname </dt>
+<dd><p class="startdd">TEXT. Expression list to evaluate for the independent variables. An intercept variable is not assumed. The number of independent variables cannot exceed 65535.</p>
+<p class="enddd"></p>
+</dd>
+<dt>ref_category (optional) </dt>
+<dd><p class="startdd">INTEGER, default: 0. The reference category ranges from [0, <em>numCategories</em> &ndash; 1].</p>
+<p class="enddd"></p>
+</dd>
+<dt>optimizer_params (optional) </dt>
+<dd>VARCHAR, default: NULL, which uses the default values of optimizer parameters. It should be a string that contains pairs of 'key=value' separated by commas. Supported parameters with their default values: max_iter=20, optimizer='irls', precision=1e-4. Currently, only 'irls' and 'newton' are allowed for 'optimizer'.  </dd>
+</dl>
+</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>Table names can be optionally schema qualified and table and column names should follow the same case-sensitivity and quoting rules as in the database.</dd></dl>
+<p><a class="anchor" id="predict"></a></p><dl class="section user"><dt>Prediction Function</dt><dd>The prediction function is provided to estimate the conditional mean given a new predictor. It has the following syntax: <pre class="syntax">
+mlogregr_predict(
+    model_table,
+    new_data_table,
+    id_col_name,
+    output_table,
+    type)
+</pre></dd></dl>
+<p><b>Arguments</b> </p><dl class="arglist">
+<dt>model_table </dt>
+<dd><p class="startdd">TEXT. Name of the table containing the multilogistic model. This should be the output table returned from <em>mlogregr_train</em>.</p>
+<p class="enddd"></p>
+</dd>
+<dt>new_data_table </dt>
+<dd><p class="startdd">TEXT. Name of the table containing prediction data. This table is expected to contain the same features that were used during training. The table should also contain <em>id_col_name</em> used for identifying each row.</p>
+<p class="enddd"></p>
+</dd>
+<dt>id_col_name </dt>
+<dd><p class="startdd">TEXT. Name of the column containing id information in the source data. This is a mandatory argument and is used for correlating prediction table rows with the source. The values of this column are expected to be unique for each tuple. </p>
+<p class="enddd"></p>
+</dd>
+<dt>output_table </dt>
+<dd><p class="startdd">TEXT. Name of the table to output prediction results to. If this table already exists then an error is returned. This output table contains the <em>id_col_name</em> column giving the 'id' for each prediction.</p>
+<p>If <em>type</em> = 'response', then the table has a single additional column with the prediction value of the response. The type of this column depends on the type of the response variable used during training.</p>
+<p>If <em>type</em> = 'prob', then the table has multiple additional columns, one for each possible category. The columns are labeled as 'estimated_prob_<em>category_value</em>', where <em>category_value</em> represents the values of categories (0 to K-1).</p>
+<p class="enddd"></p>
+</dd>
+<dt>type </dt>
+<dd><p class="startdd">TEXT, optional, default: 'response'.</p>
+<p>When <em>type</em> = 'prob', the probabilities of each category (including the reference category) is given.</p>
+<p class="enddd">When <em>type</em> = 'response', a single output is provided which represents the prediction category for each tuple. This represents the category with the highest probability.  </p>
+</dd>
+</dl>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<ol type="1">
+<li>Create the training data table. <pre class="example">
+DROP TABLE IF EXISTS test3;
+CREATE TABLE test3 (
+    feat1 INTEGER,
+    feat2 INTEGER,
+    cat INTEGER
+);
+INSERT INTO test3(feat1, feat2, cat) VALUES
+(1,35,1),
+(2,33,0),
+(3,39,1),
+(1,37,1),
+(2,31,1),
+(3,36,0),
+(2,36,1),
+(2,31,1),
+(2,41,1),
+(2,37,1),
+(1,44,1),
+(3,33,2),
+(1,31,1),
+(2,44,1),
+(1,35,1),
+(1,44,0),
+(1,46,0),
+(2,46,1),
+(2,46,2),
+(3,49,1),
+(2,39,0),
+(2,44,1),
+(1,47,1),
+(1,44,1),
+(1,37,2),
+(3,38,2),
+(1,49,0),
+(2,44,0),
+(3,61,2),
+(1,65,2),
+(3,67,1),
+(3,65,2),
+(1,65,2),
+(2,67,2),
+(1,65,2),
+(1,62,2),
+(3,52,2),
+(3,63,2),
+(2,59,2),
+(3,65,2),
+(2,59,0),
+(3,67,2),
+(3,67,2),
+(3,60,2),
+(3,67,2),
+(3,62,2),
+(2,54,2),
+(3,65,2),
+(3,62,2),
+(2,59,2),
+(3,60,2),
+(3,63,2),
+(3,65,2),
+(2,63,1),
+(2,67,2),
+(2,65,2),
+(2,62,2);
+</pre></li>
+<li>Run the multilogistic regression function. <pre class="example">
+DROP TABLE IF EXISTS test3_output;
+DROP TABLE IF EXISTS test3_output_summary;
+SELECT madlib.mlogregr_train('test3',
+                             'test3_output',
+                             'cat',
+                             'ARRAY[1, feat1, feat2]',
+                             0,
+                             'max_iter=20, optimizer=irls, precision=0.0001'
+                             );
+</pre></li>
+<li>View the result: <pre class="example">
+-- Set extended display on for easier reading of output
+\x on
+SELECT * FROM test3_output;
+</pre> Results: <pre class="result">
+-[ RECORD 1 ]--+------------------------------------------------------------
+category       | 1
+ref_category   | 0
+coef           | {1.45474045211601,0.0849956182104023,-0.0172383499601956}
+loglikelihood  | -39.14759930999
+std_err        | {2.13085072854143,0.585021661344715,0.0431487356292144}
+z_stats        | {0.682704063982831,0.145286275409074,-0.39950996729842}
+p_values       | {0.494793861210936,0.884484850387893,0.689517480964129}
+odd_ratios     | {4.28337158128448,1.08871229617973,0.982909380301134}
+condition_no   | 280069.034217586
+num_iterations | 5
+-[ RECORD 2 ]--+------------------------------------------------------------
+category       | 2
+ref_category   | 0
+coef           | {-7.12908167688326,0.87648787696783,0.127886153027713}
+loglikelihood  | -39.14759930999
+std_err        | {2.52104008297868,0.639575886323862,0.0445757462972303}
+z_stats        | {-2.82783352990566,1.37042045472615,2.86896269049475}
+p_values       | {0.00468641692252239,0.170555690550421,0.00411820373218956}
+odd_ratios     | {0.000801455044349486,2.40244718187161,1.13642361694409}
+condition_no   | 280069.034217586
+num_iterations | 5
+</pre></li>
+<li>View all parameters used during the training <pre class="example">
+\x on
+SELECT * FROM test3_output_summary;
+</pre> Results: <pre class="result">
+-[ RECORD 1 ]------------+--------------------------------------------------
+method                   | mlogregr
+source_table             | test3
+out_table                | test3_output
+dependent_varname        | cat
+independent_varname      | ARRAY[1, feat1, feat2]
+optimizer_params         | max_iter=20, optimizer=irls, precision=0.0001
+ref_category             | 0
+num_categories           | 3
+num_rows_processed       | 57
+num_missing_rows_skipped | 0
+variance_covariance      | {{4.54052482732554,3.01080140927409,-0.551901021610841,-0.380754019900586,-0.0784151362989211,-0.0510014701718268},{3.01080140927409,6.35564309998514,-0.351902272617974,-0.766730342510818,-0.051877550252329,-0.0954432017695571},{-0.551901021610841,-0.351902272617974,0.34225034424253,0.231740815080827,-0.00117521831508331,-0.00114043921343171},{-0.380754019900586,-0.766730342510818,0.231740815080827,0.409057314366954,-0.000556498286025567,-0.000404735750986327},{-0.0784151362989211,-0.051877550252329,-0.00117521831508331,-0.000556498286025569,0.00186181338639984,0.00121080293928445},{-0.0510014701718268,-0.0954432017695571,-0.00114043921343171,-0.000404735750986325,0.00121080293928446,0.00198699715795504}}
+coef                     | {{1.45474045211601,0.0849956182104023,-0.0172383499601956},{-7.12908167688326,0.87648787696783,0.127886153027713}}
+</pre></li>
+</ol>
+<p><a class="anchor" id="background"></a></p><dl class="section user"><dt>Technical Background</dt><dd>Multinomial logistic regression models the outcomes of categorical dependent random variables (denoted \( Y \in \{ 0,1,2 \ldots k \} \)). The model assumes that the conditional mean of the dependent categorical variables is the logistic function of an affine combination of independent variables (usually denoted \( \boldsymbol x \)). That is, <p class="formulaDsp">
+\[ E[Y \mid \boldsymbol x] = \sigma(\boldsymbol c^T \boldsymbol x) \]
+</p>
+ for some unknown vector of coefficients \( \boldsymbol c \) and where \( \sigma(x) = \frac{1}{1 + \exp(-x)} \) is the logistic function. Multinomial logistic regression finds the vector of coefficients \( \boldsymbol c \) that maximizes the likelihood of the observations.</dd></dl>
+<p>Let</p><ul>
+<li>\( \boldsymbol y \in \{ 0,1 \}^{n \times k} \) denote the vector of observed dependent variables, with \( n \) rows and \( k \) columns, containing the observed values of the dependent variable,</li>
+<li>\( X \in \mathbf R^{n \times k} \) denote the design matrix with \( k \) columns and \( n \) rows, containing all observed vectors of independent variables \( \boldsymbol x_i \) as rows.</li>
+</ul>
+<p>By definition, </p><p class="formulaDsp">
+\[ P[Y = y_i | \boldsymbol x_i] = \sigma((-1)^{y_i} \cdot \boldsymbol c^T \boldsymbol x_i) \,. \]
+</p>
+<p> Maximizing the likelihood \( \prod_{i=1}^n \Pr(Y = y_i \mid \boldsymbol x_i) \) is equivalent to maximizing the log-likelihood \( \sum_{i=1}^n \log \Pr(Y = y_i \mid \boldsymbol x_i) \), which simplifies to </p><p class="formulaDsp">
+\[ l(\boldsymbol c) = -\sum_{i=1}^n \log(1 + \exp((-1)^{y_i} \cdot \boldsymbol c^T \boldsymbol x_i)) \,. \]
+</p>
+<p> The Hessian of this objective is \( H = -X^T A X \) where \( A = \text{diag}(a_1, \dots, a_n) \) is the diagonal matrix with \( a_i = \sigma(\boldsymbol c^T \boldsymbol x) \cdot \sigma(-\boldsymbol c^T \boldsymbol x) \,. \) Since \( H \) is non-positive definite, \( l(\boldsymbol c) \) is convex. There are many techniques for solving convex optimization problems. Currently, logistic regression in MADlib can use:</p><ul>
+<li>Iteratively Reweighted Least Squares</li>
+</ul>
+<p>We estimate the standard error for coefficient \( i \) as </p><p class="formulaDsp">
+\[ \mathit{se}(c_i) = \left( (X^T A X)^{-1} \right)_{ii} \,. \]
+</p>
+<p> The Wald z-statistic is </p><p class="formulaDsp">
+\[ z_i = \frac{c_i}{\mathit{se}(c_i)} \,. \]
+</p>
+<p>The Wald \( p \)-value for coefficient \( i \) gives the probability (under the assumptions inherent in the Wald test) of seeing a value at least as extreme as the one observed, provided that the null hypothesis ( \( c_i = 0 \)) is true. Letting \( F \) denote the cumulative density function of a standard normal distribution, the Wald \( p \)-value for coefficient \( i \) is therefore </p><p class="formulaDsp">
+\[ p_i = \Pr(|Z| \geq |z_i|) = 2 \cdot (1 - F( |z_i| )) \]
+</p>
+<p> where \( Z \) is a standard normally distributed random variable.</p>
+<p>The odds ratio for coefficient \( i \) is estimated as \( \exp(c_i) \).</p>
+<p>The condition number is computed as \( \kappa(X^T A X) \) during the iteration immediately <em>preceding</em> convergence (i.e., \( A \) is computed using the coefficients of the previous iteration). A large condition number (say, more than 1000) indicates the presence of significant multicollinearity.</p>
+<p>The multinomial logistic regression uses a default reference category of zero, and the regression coefficients in the output are in the order described below. For a problem with \( K \) dependent variables \( (1, ..., K) \) and \( J \) categories \( (0, ..., J-1) \), let \( {m_{k,j}} \) denote the coefficient for dependent variable \( k \) and category \( j \). The output is \( {m_{k_1, j_0}, m_{k_1, j_1} \ldots m_{k_1, j_{J-1}}, m_{k_2, j_0}, m_{k_2, j_1}, \ldots m_{k_2, j_{J-1}} \ldots m_{k_K, j_{J-1}}} \). The order is NOT CONSISTENT with the multinomial regression marginal effect calculation with function <em>marginal_mlogregr</em>. This is deliberate because the interfaces of all multinomial regressions (robust, clustered, ...) will be moved to match that used in marginal.</p>
+<p><a class="anchor" id="literature"></a></p><dl class="section user"><dt>Literature</dt><dd></dd></dl>
+<p>A collection of nice write-ups, with valuable pointers into further literature:</p>
+<p>[1] Annette J. Dobson: An Introduction to Generalized Linear Models, Second Edition. Nov 2001</p>
+<p>[2] Cosma Shalizi: Statistics 36-350: Data Mining, Lecture Notes, 18 November 2009, <a href="http://www.stat.cmu.edu/~cshalizi/350/lectures/26/lecture-26.pdf">http://www.stat.cmu.edu/~cshalizi/350/lectures/26/lecture-26.pdf</a></p>
+<p>[3] Scott A. Czepiel: Maximum Likelihood Estimation of Logistic Regression Models: Theory and Implementation, Retrieved Jul 12 2012, <a href="http://czep.net/stat/mlelr.pdf">http://czep.net/stat/mlelr.pdf</a></p>
+<p><a class="anchor" id="related"></a></p><dl class="section user"><dt>Related Topics</dt><dd></dd></dl>
+<p>File <a class="el" href="multilogistic_8sql__in.html" title="SQL functions for multinomial logistic regression. ">multilogistic.sql_in</a> documenting the multinomial logistic regression functions</p>
+<p><a class="el" href="group__grp__logreg.html">Logistic Regression</a></p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__model__selection.html b/docs/rc/group__grp__model__selection.html
new file mode 100644
index 0000000..568284f
--- /dev/null
+++ b/docs/rc/group__grp__model__selection.html
@@ -0,0 +1,142 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Model Selection for DL</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__model__selection.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#groups">Modules</a>  </div>
+  <div class="headertitle">
+<div class="title">Model Selection for DL<div class="ingroups"><a class="el" href="group__grp__early__stage.html">Early Stage Development</a> &raquo; <a class="el" href="group__grp__dl.html">Deep Learning</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Train multiple deep learning models at the same time for model architecture search and hyperparameter selection. </p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group__grp__keras__run__model__selection"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__keras__run__model__selection.html">Run Model Selection</a></td></tr>
+<tr class="memdesc:group__grp__keras__run__model__selection"><td class="mdescLeft">&#160;</td><td class="mdescRight">Explore network architectures and hyperparameters by training many models a time. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__keras__setup__model__selection"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__keras__setup__model__selection.html">Setup Model Selection</a></td></tr>
+<tr class="memdesc:group__grp__keras__setup__model__selection"><td class="mdescLeft">&#160;</td><td class="mdescRight">Utility function to set up a model selection table for model architecture search and hyperparameter tuning. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:59 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__model__selection.js b/docs/rc/group__grp__model__selection.js
new file mode 100644
index 0000000..972b4b1
--- /dev/null
+++ b/docs/rc/group__grp__model__selection.js
@@ -0,0 +1,5 @@
+var group__grp__model__selection =
+[
+    [ "Run Model Selection", "group__grp__keras__run__model__selection.html", null ],
+    [ "Setup Model Selection", "group__grp__keras__setup__model__selection.html", null ]
+];
\ No newline at end of file
diff --git a/docs/rc/group__grp__multinom.html b/docs/rc/group__grp__multinom.html
new file mode 100644
index 0000000..9deb43d
--- /dev/null
+++ b/docs/rc/group__grp__multinom.html
@@ -0,0 +1,487 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Multinomial Regression</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__multinom.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Multinomial Regression<div class="ingroups"><a class="el" href="group__grp__super.html">Supervised Learning</a> &raquo; <a class="el" href="group__grp__regml.html">Regression Models</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li class="level1">
+<a href="#train">Training Function</a> </li>
+<li class="level1">
+<a href="#predict">Prediction Function</a> </li>
+<li class="level1">
+<a href="#examples">Examples</a> </li>
+<li class="level1">
+<a href="#background">Technical Background</a> </li>
+<li class="level1">
+<a href="#literature">Literature</a> </li>
+<li class="level1">
+<a href="#related">Related Topics</a> </li>
+</ul>
+</div><p>In statistics, multinomial regression is a classification method that generalizes binomial regression to multiclass problems, i.e. with more than two possible discrete outcomes. That is, it is a model that is used to predict the probabilities of the different possible outcomes of a categorically distributed dependent variable, given a set of independent variables (which may be real-valued, binary-valued, categorical-valued, etc.).</p>
+<p><a class="anchor" id="train"></a></p><dl class="section user"><dt>Training Function</dt><dd>The multinomial regression training function has the following syntax: <pre class="syntax">
+multinom(source_table,
+         model_table,
+         dependent_varname,
+         independent_varname,
+         ref_category,
+         link_func,
+         grouping_col,
+         optim_params,
+         verbose
+        )
+</pre></dd></dl>
+<p><b>Arguments</b> </p><dl class="arglist">
+<dt>source_table </dt>
+<dd><p class="startdd">VARCHAR. Name of the table containing the training data.</p>
+<p class="enddd"></p>
+</dd>
+<dt>model_table </dt>
+<dd><p class="startdd">VARCHAR. Name of the generated table containing the model.</p>
+<p>The model table produced by multinom() contains the following columns:</p>
+<table class="output">
+<tr>
+<th>&lt;...&gt; </th><td><p class="starttd">Grouping columns, if provided in input. This could be multiple columns depending on the <code>grouping_col</code> input. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>category </th><td><p class="starttd">VARCHAR. String representation of category value. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>coef </th><td><p class="starttd">FLOAT8[]. Vector of the coefficients in linear predictor. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>log_likelihood </th><td><p class="starttd">FLOAT8. The log-likelihood \( l(\boldsymbol \beta) \). The value will be the same across categories within the same group. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>std_err </th><td><p class="starttd">FLOAT8[]. Vector of the standard errors of the coefficients. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>z_stats </th><td><p class="starttd">FLOAT8[]. Vector of the z-statistics of the coefficients. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>p_values </th><td><p class="starttd">FLOAT8[]. Vector of the p-values of the coefficients. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>num_rows_processed </th><td><p class="starttd">BIGINT. Number of rows processed. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>num_rows_skipped </th><td><p class="starttd">BIGINT. Number of rows skipped due to missing values or failures. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>num_iterations </th><td>INTEGER. Number of iterations actually completed. This would be different from the <code>nIterations</code> argument if a <code>tolerance</code> parameter is provided and the algorithm converges before all iterations are completed.  </td></tr>
+</table>
+<p>A summary table named &lt;model_table&gt;_summary is also created at the same time, which has the following columns: </p><table class="output">
+<tr>
+<th>method </th><td><p class="starttd">VARCHAR. String describes the model: 'multinom'. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>source_table </th><td><p class="starttd">VARCHAR. Data source table name. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>model_table </th><td><p class="starttd">VARCHAR. Model table name. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>dependent_varname </th><td><p class="starttd">VARCHAR. Expression for dependent variable. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>independent_varname </th><td><p class="starttd">VARCHAR. Expression for independent variables. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>ref_category </th><td><p class="starttd">VARCHAR. String representation of reference category. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>link_func </th><td><p class="starttd">VARCHAR. String that contains link function parameters: only 'logit' is implemented now </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>grouping_col </th><td><p class="starttd">VARCHAR. String representation of grouping columns. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>optimizer_params </th><td><p class="starttd">VARCHAR. String that contains optimizer parameters, and has the form of 'optimizer=..., max_iter=..., tolerance=...'. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>num_all_groups </th><td><p class="starttd">INTEGER. Number of groups in glm training. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>num_failed_groups </th><td><p class="starttd">INTEGER. Number of failed groups in glm training. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>total_rows_processed </th><td><p class="starttd">BIGINT. Total number of rows processed in all groups. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>total_rows_skipped </th><td><p class="starttd">BIGINT. Total number of rows skipped in all groups due to missing values or failures. </p>
+<p class="endtd"></p>
+</td></tr>
+</table>
+<p class="enddd"></p>
+</dd>
+<dt>dependent_varname </dt>
+<dd><p class="startdd">VARCHAR. Name of the dependent variable column.</p>
+<p class="enddd"></p>
+</dd>
+<dt>independent_varname </dt>
+<dd><p class="startdd">VARCHAR. Expression list to evaluate for the independent variables. An intercept variable is not assumed. It is common to provide an explicit intercept term by including a single constant <code>1</code> term in the independent variable list.</p>
+<p class="enddd"></p>
+</dd>
+<dt>link_function (optional) </dt>
+<dd><p class="startdd">VARCHAR, default: 'logit'. Parameters for link function. Currently, we support logit. </p>
+<p class="enddd"></p>
+</dd>
+<dt>ref_category (optional) </dt>
+<dd><p class="startdd">VARCHAR, default: '0'. Parameters to specify the reference category. </p>
+<p class="enddd"></p>
+</dd>
+<dt>grouping_col (optional) </dt>
+<dd><p class="startdd">VARCHAR, default: NULL. An expression list used to group the input dataset into discrete groups, running one regression per group. Similar to the SQL "GROUP BY" clause. When this value is NULL, no grouping is used and a single model is generated.</p>
+<p class="enddd"></p>
+</dd>
+<dt>optim_params (optional) </dt>
+<dd><p class="startdd">VARCHAR, default: 'max_iter=100,optimizer=irls,tolerance=1e-6'. Parameters for optimizer. Currently, we support tolerance=[tolerance for relative error between log-likelihoods], max_iter=[maximum iterations to run], optimizer=irls.</p>
+<p class="enddd"></p>
+</dd>
+<dt>verbose (optional) </dt>
+<dd>BOOLEAN, default: FALSE. Provides verbose output of the results of training. </dd>
+</dl>
+<dl class="section note"><dt>Note</dt><dd>For p-values, we just return the computation result directly. Other statistical packages, like 'R', produce the same result, but on printing the result to screen, another format function is used and any p-value that is smaller than the machine epsilon (the smallest positive floating-point number 'x' such that '1 + x != 1') will be printed on screen as "&lt; xxx" (xxx is the value of the machine epsilon). Although the result may look different, they are in fact the same. </dd></dl>
+<p><a class="anchor" id="predict"></a></p><dl class="section user"><dt>Prediction Function</dt><dd>Multinomial regression prediction function has the following format: <pre class="syntax">
+multinom_predict(model_table,
+                 predict_table_input,
+                 output_table,
+                 predict_type,
+                 verbose,
+                 id_column
+                )
+</pre> <b>Arguments</b> <dl class="arglist">
+<dt>model_table </dt>
+<dd><p class="startdd">TEXT. Name of the generated table containing the model, which is the output table from multinom().</p>
+<p class="enddd"></p>
+</dd>
+<dt>predict_table_input </dt>
+<dd><p class="startdd">TEXT. The name of the table containing the data to predict on. The table must contain id column as the primary key.</p>
+<p class="enddd"></p>
+</dd>
+<dt>output_table </dt>
+<dd><p class="startdd">TEXT. Name of the generated table containing the predicted values.</p>
+<p>The model table produced by multinom_predict contains the following columns:</p>
+<table class="output">
+<tr>
+<th>id </th><td><p class="starttd">SERIAL. Column to identify the predicted value. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>category </th><td><p class="starttd">TEXT. Available if the predicted type = 'response'. Column contains the predicted categories </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>category_value </th><td>FLOAT8. The predicted probability for the specific category_value.  </td></tr>
+</table>
+<p class="enddd"></p>
+</dd>
+<dt>predict_type </dt>
+<dd>TEXT. Either 'response' or 'probability'. Using 'response' will give the predicted category with the largest probability. Using probability will give the predicted probabilities for all categories </dd>
+<dt>verbose </dt>
+<dd><p class="startdd">BOOLEAN. Control whether verbose is displayed. The default is FALSE. </p>
+<p class="enddd"></p>
+</dd>
+<dt>id_column </dt>
+<dd>TEXT. The name of the column in the input table. </dd>
+</dl>
+</dd></dl>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<ol type="1">
+<li>Create the training data table. <pre class="example">
+DROP TABLE IF EXISTS test3;
+CREATE TABLE test3 (
+    feat1 INTEGER,
+    feat2 INTEGER,
+    cat INTEGER
+);
+INSERT INTO test3(feat1, feat2, cat) VALUES
+(1,35,1),
+(2,33,0),
+(3,39,1),
+(1,37,1),
+(2,31,1),
+(3,36,0),
+(2,36,1),
+(2,31,1),
+(2,41,1),
+(2,37,1),
+(1,44,1),
+(3,33,2),
+(1,31,1),
+(2,44,1),
+(1,35,1),
+(1,44,0),
+(1,46,0),
+(2,46,1),
+(2,46,2),
+(3,49,1),
+(2,39,0),
+(2,44,1),
+(1,47,1),
+(1,44,1),
+(1,37,2),
+(3,38,2),
+(1,49,0),
+(2,44,0),
+(3,61,2),
+(1,65,2),
+(3,67,1),
+(3,65,2),
+(1,65,2),
+(2,67,2),
+(1,65,2),
+(1,62,2),
+(3,52,2),
+(3,63,2),
+(2,59,2),
+(3,65,2),
+(2,59,0),
+(3,67,2),
+(3,67,2),
+(3,60,2),
+(3,67,2),
+(3,62,2),
+(2,54,2),
+(3,65,2),
+(3,62,2),
+(2,59,2),
+(3,60,2),
+(3,63,2),
+(3,65,2),
+(2,63,1),
+(2,67,2),
+(2,65,2),
+(2,62,2);
+</pre></li>
+<li>Run the multilogistic regression function. <pre class="example">
+DROP TABLE IF EXISTS test3_output;
+DROP TABLE IF EXISTS test3_output_summary;
+SELECT madlib.multinom('test3',
+                       'test3_output',
+                       'cat',
+                       'ARRAY[1, feat1, feat2]',
+                       '0',
+                       'logit'
+                       );
+</pre></li>
+<li>View the regression results. <pre class="example">
+-- Set extended display on for easier reading of output
+\x on
+SELECT * FROM test3_output;
+</pre></li>
+</ol>
+<p>Result: </p><pre class="result">
+-[ RECORD 1 ]------+------------------------------------------------------------
+category           | 1
+coef               | {1.45474045165731,0.084995618282504,-0.0172383499512136}
+log_likelihood     | -39.1475993094045
+std_err            | {2.13085878785549,0.585023211942952,0.0431489262260687}
+z_stats            | {0.682701481650677,0.145285890452484,-0.399508202380224}
+p_values           | {0.494795493298706,0.884485154314181,0.689518781152604}
+num_rows_processed | 57
+num_rows_skipped   | 0
+iteration          | 6
+-[ RECORD 2 ]------+------------------------------------------------------------
+category           | 2
+coef               | {-7.1290816775109,0.876487877074751,0.127886153038661}
+log_likelihood     | -39.1475993094045
+std_err            | {2.52105418324135,0.639578886139654,0.0445760103748678}
+z_stats            | {-2.82781771407425,1.37041402721253,2.86894569440347}
+p_values           | {0.00468664844488755,0.170557695812408,0.00411842502754068}
+num_rows_processed | 57
+num_rows_skipped   | 0
+iteration          | 6
+</pre><ol type="1">
+<li>Predicting dependent variable using multinomial model. (This example uses the original data table to perform the prediction. Typically a different test dataset with the same features as the original training dataset would be used for prediction.)</li>
+</ol>
+<pre class="example">
+\x off
+-- Add the id column for prediction function
+ALTER TABLE test3 ADD COLUMN id SERIAL;
+-- Predict probabilities for all categories using the original data
+SELECT madlib.multinom_predict('test3_out','test3', 'test3_prd_prob', 'probability');
+-- Display the predicted value
+SELECT * FROM test3_prd_prob;
+</pre><p><a class="anchor" id="background"></a></p><dl class="section user"><dt>Technical Background</dt><dd>When link = 'logit', multinomial logistic regression models the outcomes of categorical dependent random variables (denoted \( Y \in \{ 0,1,2 \ldots k \} \)). The model assumes that the conditional mean of the dependent categorical variables is the logistic function of an affine combination of independent variables (usually denoted \( \boldsymbol x \)). That is, <p class="formulaDsp">
+\[ E[Y \mid \boldsymbol x] = \sigma(\boldsymbol c^T \boldsymbol x) \]
+</p>
+ for some unknown vector of coefficients \( \boldsymbol c \) and where \( \sigma(x) = \frac{1}{1 + \exp(-x)} \) is the logistic function. Multinomial logistic regression finds the vector of coefficients \( \boldsymbol c \) that maximizes the likelihood of the observations.</dd></dl>
+<p>Let</p><ul>
+<li>\( \boldsymbol y \in \{ 0,1 \}^{n \times k} \) denote the vector of observed dependent variables, with \( n \) rows and \( k \) columns, containing the observed values of the dependent variable,</li>
+<li>\( X \in \mathbf R^{n \times k} \) denote the design matrix with \( k \) columns and \( n \) rows, containing all observed vectors of independent variables \( \boldsymbol x_i \) as rows.</li>
+</ul>
+<p>By definition, </p><p class="formulaDsp">
+\[ P[Y = y_i | \boldsymbol x_i] = \sigma((-1)^{y_i} \cdot \boldsymbol c^T \boldsymbol x_i) \,. \]
+</p>
+<p> Maximizing the likelihood \( \prod_{i=1}^n \Pr(Y = y_i \mid \boldsymbol x_i) \) is equivalent to maximizing the log-likelihood \( \sum_{i=1}^n \log \Pr(Y = y_i \mid \boldsymbol x_i) \), which simplifies to </p><p class="formulaDsp">
+\[ l(\boldsymbol c) = -\sum_{i=1}^n \log(1 + \exp((-1)^{y_i} \cdot \boldsymbol c^T \boldsymbol x_i)) \,. \]
+</p>
+<p> The Hessian of this objective is \( H = -X^T A X \) where \( A = \text{diag}(a_1, \dots, a_n) \) is the diagonal matrix with \( a_i = \sigma(\boldsymbol c^T \boldsymbol x) \cdot \sigma(-\boldsymbol c^T \boldsymbol x) \,. \) Since \( H \) is non-positive definite, \( l(\boldsymbol c) \) is convex. There are many techniques for solving convex optimization problems. Currently, logistic regression in MADlib can use:</p><ul>
+<li>Iteratively Reweighted Least Squares</li>
+</ul>
+<p>We estimate the standard error for coefficient \( i \) as </p><p class="formulaDsp">
+\[ \mathit{se}(c_i) = \left( (X^T A X)^{-1} \right)_{ii} \,. \]
+</p>
+<p> The Wald z-statistic is </p><p class="formulaDsp">
+\[ z_i = \frac{c_i}{\mathit{se}(c_i)} \,. \]
+</p>
+<p>The Wald \( p \)-value for coefficient \( i \) gives the probability (under the assumptions inherent in the Wald test) of seeing a value at least as extreme as the one observed, provided that the null hypothesis ( \( c_i = 0 \)) is true. Letting \( F \) denote the cumulative density function of a standard normal distribution, the Wald \( p \)-value for coefficient \( i \) is therefore </p><p class="formulaDsp">
+\[ p_i = \Pr(|Z| \geq |z_i|) = 2 \cdot (1 - F( |z_i| )) \]
+</p>
+<p> where \( Z \) is a standard normally distributed random variable.</p>
+<p>The odds ratio for coefficient \( i \) is estimated as \( \exp(c_i) \).</p>
+<p>The condition number is computed as \( \kappa(X^T A X) \) during the iteration immediately <em>preceding</em> convergence (i.e., \( A \) is computed using the coefficients of the previous iteration). A large condition number (say, more than 1000) indicates the presence of significant multicollinearity.</p>
+<p>The multinomial logistic regression uses a default reference category of zero, and the regression coefficients in the output are in the order described below. For a problem with \( K \) dependent variables \( (1, ..., K) \) and \( J \) categories \( (0, ..., J-1) \), let \( {m_{k,j}} \) denote the coefficient for dependent variable \( k \) and category \( j \). The output is \( {m_{k_1, j_0}, m_{k_1, j_1} \ldots m_{k_1, j_{J-1}}, m_{k_2, j_0}, m_{k_2, j_1}, \ldots m_{k_2, j_{J-1}} \ldots m_{k_K, j_{J-1}}} \). The order is NOT CONSISTENT with the multinomial regression marginal effect calculation with function <em>marginal_mlogregr</em>. This is deliberate because the interfaces of all multinomial regressions (robust, clustered, ...) will be moved to match that used in marginal.</p>
+<p><a class="anchor" id="literature"></a></p><dl class="section user"><dt>Literature</dt><dd></dd></dl>
+<p>A collection of nice write-ups, with valuable pointers into further literature:</p>
+<p>[1] Annette J. Dobson: An Introduction to Generalized Linear Models, Second Edition. Nov 2001</p>
+<p>[2] Cosma Shalizi: Statistics 36-350: Data Mining, Lecture Notes, 18 November 2009, <a href="http://www.stat.cmu.edu/~cshalizi/350/lectures/26/lecture-26.pdf">http://www.stat.cmu.edu/~cshalizi/350/lectures/26/lecture-26.pdf</a></p>
+<p>[3] Scott A. Czepiel: Maximum Likelihood Estimation of Logistic Regression Models: Theory and Implementation, Retrieved Jul 12 2012, <a href="http://czep.net/stat/mlelr.pdf">http://czep.net/stat/mlelr.pdf</a></p>
+<p><a class="anchor" id="related"></a></p><dl class="section user"><dt>Related Topics</dt><dd></dd></dl>
+<p>File <a class="el" href="multiresponseglm_8sql__in.html" title="SQL functions for multinomial regression. ">multiresponseglm.sql_in</a> documenting the multinomial regression functions</p>
+<p><a class="el" href="group__grp__logreg.html">Logistic Regression</a></p>
+<p><a class="el" href="group__grp__ordinal.html">Ordinal Regression</a></p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:59 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__nn.html b/docs/rc/group__grp__nn.html
new file mode 100644
index 0000000..9bc3de7
--- /dev/null
+++ b/docs/rc/group__grp__nn.html
@@ -0,0 +1,1136 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Neural Network</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__nn.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Neural Network<div class="ingroups"><a class="el" href="group__grp__super.html">Supervised Learning</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b><ul>
+<li class="level1">
+<a href="#mlp_classification">Classification</a> </li>
+<li class="level1">
+<a href="#mlp_regression">Regression</a> </li>
+<li class="level1">
+<a href="#optimizer_params">Optimizer Parameters</a> </li>
+<li class="level1">
+<a href="#predict">Prediction Functions</a> </li>
+<li class="level1">
+<a href="#example">Examples</a> </li>
+<li class="level1">
+<a href="#background">Technical Background</a> </li>
+<li class="level1">
+<a href="#literature">Literature</a> </li>
+<li class="level1">
+<a href="#related">Related Topics</a> </li>
+</ul>
+</div><p>Multilayer Perceptron (MLP) is a type of neural network that can be used for regression and classification.</p>
+<p>MLPs consist of several fully connected hidden layers with non-linear activation functions. In the case of classification, the final layer of the neural net has as many nodes as classes, and the output of the neural net can be interpreted as the probability that a given input feature belongs to a specific class.</p>
+<p>MLP can be used with or without mini-batching. The advantage of using mini-batching is that it can perform better than stochastic gradient descent (default MADlib optimizer) because it uses more than one training example at a time, typically resulting faster and smoother convergence [3].</p>
+<dl class="section note"><dt>Note</dt><dd>In order to use mini-batching, you must first run the <a href="group__grp__minibatch__preprocessing.html">Mini-Batch Preprocessor</a>, which is a utility that prepares input data for use by models that support mini-batch as an optimization option, such as MLP. This is a one-time operation and you would only need to re-run the preprocessor if your input data has changed, or if you change the grouping parameter.</dd></dl>
+<p><a class="anchor" id="mlp_classification"></a></p><dl class="section user"><dt>Classification Training Function</dt><dd>The MLP classification training function has the following format:</dd></dl>
+<pre class="syntax">
+mlp_classification(
+    source_table,
+    output_table,
+    independent_varname,
+    dependent_varname,
+    hidden_layer_sizes,
+    optimizer_params,
+    activation,
+    weights,
+    warm_start,
+    verbose,
+    grouping_col
+    )
+</pre><p><b>Arguments</b> </p><dl class="arglist">
+<dt>source_table </dt>
+<dd><p class="startdd">TEXT. Name of the table containing the training data. If you are using mini-batching, this is the name of the output table from the mini-batch preprocessor.</p>
+<p class="enddd"></p>
+</dd>
+<dt>output_table </dt>
+<dd><p class="startdd">TEXT. Name of the output table containing the model. Details of the output table are shown below. </p>
+<p class="enddd"></p>
+</dd>
+<dt>independent_varname </dt>
+<dd><p class="startdd">TEXT. Expression list to evaluate for the independent variables. It should be a numeric array expression. If you are using mini-batching, set this parameter to 'independent_varname' which is the hardcoded name of the column from the mini-batch preprocessor containing the packed independent variables.</p>
+<dl class="section note"><dt>Note</dt><dd>If you are not using mini-batching, please note that an intercept variable should not be included as part of this expression - this is different from other MADlib modules. Also please note that independent variables should be encoded properly. All values are cast to DOUBLE PRECISION, so categorical variables should be one-hot or dummy encoded as appropriate. See <a href="group__grp__encode__categorical.html">Encoding Categorical Variables</a> for more details. </dd></dl>
+</dd>
+<dt>dependent_varname </dt>
+<dd><p class="startdd">TEXT. Name of the dependent variable column. For classification, supported types are: text, varchar, character varying, char, character integer, smallint, bigint, and boolean. If you are using mini-batching, set this parameter to 'dependent_varname' which is the hardcoded name of the column from the mini-batch preprocessor containing the packed dependent variables.</p>
+<p class="enddd"></p>
+</dd>
+<dt>hidden_layer_sizes (optional) </dt>
+<dd><p class="startdd">INTEGER[], default: ARRAY[100]. The number of neurons in each hidden layer. The length of this array will determine the number of hidden layers. For example, ARRAY[5,10] means 2 hidden layers, one with 5 neurons and the other with 10 neurons. Use ARRAY[]::INTEGER[] for no hidden layers. </p>
+<p class="enddd"></p>
+</dd>
+<dt>optimizer_params (optional) </dt>
+<dd><p class="startdd">TEXT, default: NULL. Parameters for optimization in a comma-separated string of key-value pairs. See the description below for details. </p>
+<p class="enddd"></p>
+</dd>
+<dt>activation (optional) </dt>
+<dd><p class="startdd">TEXT, default: 'sigmoid'. Activation function. Currently three functions are supported: 'sigmoid' (default), 'relu', and 'tanh'. The text can be any prefix of the three strings; for e.g., specifying 's' will use sigmoid activation. </p>
+<p class="enddd"></p>
+</dd>
+<dt>weights (optional) </dt>
+<dd>TEXT, default: 1. Weights for input rows. Column name which specifies the weight for each input row. This weight will be incorporated into the update during stochastic gradient descent (SGD), but will not be used for loss calculations. If not specified, weight for each row will default to 1 (equal weights). Column should be a numeric type. <dl class="section note"><dt>Note</dt><dd>The 'weights' parameter is not currently for mini-batching. </dd></dl>
+</dd>
+<dt>warm_start (optional) </dt>
+<dd><p class="startdd">BOOLEAN, default: FALSE. Initalize weights with the coefficients from the last call of the training function. If set to true, weights will be initialized from the output_table generated by the previous run. Note that all parameters other than optimizer_params and verbose must remain constant between calls when warm_start is used.</p>
+<dl class="section note"><dt>Note</dt><dd>The warm start feature works based on the name of the output_table. When using warm start, do not drop the output table or the output table summary before calling the training function, since these are needed to obtain the weights from the previous run. If you are not using warm start, the output table and the output table summary must be dropped in the usual way before calling the training function.</dd></dl>
+<p class="enddd"></p>
+</dd>
+<dt>verbose (optional) </dt>
+<dd>BOOLEAN, default: FALSE. Provides verbose output of the results of training, including the value of loss at each iteration. <dl class="section note"><dt>Note</dt><dd>There are some subtleties on the reported per-iteration loss values because we are working in a distributed system. When mini-batching is used (i.e., batch gradient descent), loss per iteration is an average of losses across all mini-batches and epochs on a segment. Losses across all segments then get averaged to give overall loss for the model for the iteration. This will tend to be a pessimistic estimate of loss. When mini-batching is not used (i.e., stochastic gradient descent), we use the model state from the previous iteration to compute the loss at the start of the current iteration on the whole data set. This is an accurate computation of loss for the iteration.</dd></dl>
+</dd>
+<dt>grouping_col (optional) </dt>
+<dd>TEXT, default: NULL. A single column or a list of comma-separated columns that divides the input data into discrete groups, resulting in one model per group. When this value is NULL, no grouping is used and a single model is generated for all data. If you are using mini-batching, you must have run the mini-batch preprocessor with exactly the same groups that you specify here for MLP training. If you change the groups, or remove the groups, then you must re- run the mini-batch preprocessor.  </dd>
+</dl>
+<p><b>Output tables</b> <br />
+ The model table produced by MLP contains the following columns: </p><table class="output">
+<tr>
+<th>coeffs </th><td>FLOAT8[]. Flat array containing the weights of the neural net.  </td></tr>
+<tr>
+<th>n_iterations </th><td>INTEGER. Number of iterations completed by the stochastic gradient descent algorithm. The algorithm either converged in this number of iterations or hit the maximum number specified in the optimization parameters.   </td></tr>
+<tr>
+<th>loss </th><td>FLOAT8. The cross entropy loss over the training data. See Technical Background section below for more details.  </td></tr>
+<tr>
+<th>grouping columns </th><td>If grouping_col is specified during training, a column for each grouping column is created.  </td></tr>
+</table>
+<p>A summary table named &lt;output_table&gt;_summary is also created, which has the following columns: </p><table class="output">
+<tr>
+<th>source_table </th><td>The source table.  </td></tr>
+<tr>
+<th>independent_varname </th><td>The independent variables.  </td></tr>
+<tr>
+<th>dependent_varname </th><td>The dependent variable.  </td></tr>
+<tr>
+<th>tolerance </th><td>The tolerance as given in optimizer_params.  </td></tr>
+<tr>
+<th>learning_rate_init </th><td>The initial learning rate as given in optimizer_params.  </td></tr>
+<tr>
+<th>learning_rate_policy </th><td>The learning rate policy as given in optimizer_params.  </td></tr>
+<tr>
+<th>momentum </th><td>Momentum value as given in optimizer_params.  </td></tr>
+<tr>
+<th>nesterov </th><td>Nesterov value as given in optimizer_params.  </td></tr>
+<tr>
+<th>n_iterations </th><td>The number of iterations run.  </td></tr>
+<tr>
+<th>n_tries </th><td>The number of tries as given in optimizer_params.  </td></tr>
+<tr>
+<th>layer_sizes </th><td>The number of units in each layer including the input and output layers.  </td></tr>
+<tr>
+<th>activation </th><td>The activation function.  </td></tr>
+<tr>
+<th>is_classification </th><td>True if the model was trained for classification, False if it was trained for regression.  </td></tr>
+<tr>
+<th>classes </th><td>The classes which were trained against (empty for regression).  </td></tr>
+<tr>
+<th>weights </th><td>The weight column used during training.  </td></tr>
+<tr>
+<th>grouping_col </th><td><p class="starttd">NULL if no grouping_col was specified during training, and a comma-separated list of grouping column names if not. </p>
+<p class="endtd"></p>
+</td></tr>
+</table>
+<p>A standardization table named &lt;output_table&gt;_standardization is also create, that has the following columns: </p><table class="output">
+<tr>
+<th>mean </th><td>The mean for all input features (used for normalization).  </td></tr>
+<tr>
+<th>std </th><td>The standard deviation for all input features (used for normalization).  </td></tr>
+<tr>
+<th>grouping columns </th><td>If grouping_col is specified during training, a column for each grouping column is created.  </td></tr>
+</table>
+<p><a class="anchor" id="mlp_regression"></a></p><dl class="section user"><dt>Regression Training Function</dt><dd>The MLP regression training function has the following format: <pre class="syntax">
+mlp_regression(
+    source_table,
+    output_table,
+    independent_varname,
+    dependent_varname,
+    hidden_layer_sizes,
+    optimizer_params,
+    activation,
+    weights,
+    warm_start,
+    verbose,
+    grouping_col
+    )
+</pre></dd></dl>
+<p><b>Arguments</b> </p>
+<p>Parameters for regression are largely the same as for classification. In the model table, the loss refers to mean square error instead of cross entropy loss. In the summary table, there is no classes column. The following arguments have specifications which differ from mlp_classification: </p><dl class="arglist">
+<dt>dependent_varname </dt>
+<dd>TEXT. Name of the dependent variable column. For regression, supported types are any numeric type, or array of numeric types (for multiple regression).  </dd>
+</dl>
+<p><a class="anchor" id="optimizer_params"></a></p><dl class="section user"><dt>Optimizer Parameters</dt><dd>Parameters in this section are supplied in the <em>optimizer_params</em> argument as a string containing a comma-delimited list of name-value pairs. All of these named parameters are optional and their order does not matter. You must use the format "&lt;param_name&gt; = &lt;value&gt;" to specify the value of a parameter, otherwise the parameter is ignored.</dd></dl>
+<pre class="syntax">
+  'learning_rate_init = &lt;value&gt;,
+   learning_rate_policy = &lt;value&gt;,
+   gamma = &lt;value&gt;,
+   power = &lt;value&gt;,
+   iterations_per_step = &lt;value&gt;,
+   n_iterations = &lt;value&gt;,
+   n_tries = &lt;value&gt;,
+   lambda = &lt;value&gt;,
+   tolerance = &lt;value&gt;,
+   batch_size = &lt;value&gt;,
+   n_epochs = &lt;value&gt;,
+   momentum = &lt;value&gt;,
+   nesterov = &lt;value&gt;'
+</pre><p> <b>Optimizer</b> <b>Parameters</b> </p><dl class="arglist">
+<dt>learning_rate_init </dt>
+<dd><p class="startdd">Default: 0.001. Also known as the learning rate. A small value is usually desirable to ensure convergence, while a large value provides more room for progress during training. Since the best value depends on the condition number of the data, in practice one often tunes this parameter. </p>
+<p class="enddd"></p>
+</dd>
+<dt>learning_rate_policy </dt>
+<dd><p class="startdd">Default: constant. One of 'constant', 'exp', 'inv' or 'step' or any prefix of these (e.g., 's' means 'step'). These are defined below, where 'iter' is the current iteration of SGD:</p><ul>
+<li>'constant': learning_rate = learning_rate_init</li>
+<li>'exp': learning_rate = learning_rate_init * gamma^(iter)</li>
+<li>'inv': learning_rate = learning_rate_init * (iter+1)^(-power)</li>
+<li>'step': learning_rate = learning_rate_init * gamma^(floor(iter/iterations_per_step)) </li>
+</ul>
+<p class="enddd"></p>
+</dd>
+<dt>gamma </dt>
+<dd><p class="startdd">Default: 0.1. Decay rate for learning rate when learning_rate_policy is 'exp' or 'step'. </p>
+<p class="enddd"></p>
+</dd>
+<dt>power </dt>
+<dd><p class="startdd">Default: 0.5. Exponent for learning_rate_policy = 'inv'. </p>
+<p class="enddd"></p>
+</dd>
+<dt>iterations_per_step </dt>
+<dd><p class="startdd">Default: 100. Number of iterations to run before decreasing the learning rate by a factor of gamma. Valid for learning rate policy = 'step'. </p>
+<p class="enddd"></p>
+</dd>
+<dt>n_iterations </dt>
+<dd><p class="startdd">Default: 100. The maximum number of iterations allowed. </p>
+<p class="enddd"></p>
+</dd>
+<dt>n_tries </dt>
+<dd><p class="startdd">Default: 1. Number of times to retrain the network with randomly initialized weights. </p>
+<p class="enddd"></p>
+</dd>
+<dt>lambda </dt>
+<dd><p class="startdd">Default: 0. The regularization coefficient for L2 regularization. </p>
+<p class="enddd"></p>
+</dd>
+<dt>tolerance </dt>
+<dd><p class="startdd">Default: 0.001. The criterion to end iterations. The training stops whenever the difference between the training models of two consecutive iterations is smaller than <em>tolerance</em> or the iteration number is larger than <em>n_iterations</em>. If you want to run the full number of iterations specified in <em>n_interations</em>, set tolerance=0.0 </p>
+<p class="enddd"></p>
+</dd>
+<dt>batch_size </dt>
+<dd><p class="startdd">Default: min(200, buffer_size) where buffer_size is set in the mini-batch preprocessor. The 'batch_size' is the size of the mini-batch used in the optimizer. This parameter is only used in the case of mini-batching. </p>
+<p class="enddd"></p>
+</dd>
+<dt>n_epochs </dt>
+<dd><p class="startdd">Default: 1. Represents the number of times each batch is used by the optimizer. This parameter is only used in the case of mini-batching. </p>
+<p class="enddd"></p>
+</dd>
+<dt>momentum </dt>
+<dd><p class="startdd">Default: 0.9. Momentum can help accelerate learning and avoid local minima when using gradient descent. Value must be in the range 0 to 1, where 0 means no momentum. </p>
+<p class="enddd"></p>
+</dd>
+<dt>nesterov </dt>
+<dd><p class="startdd">Default: TRUE. Only used when the 'momentum' parameter is &gt; 0. Nesterov momentum can provide better results than using classical momentum alone, due to its look-ahead characteristics. In classical momentum we correct the velocity and then update the model with that velocity, whereas in Nesterov Accelerated Gradient method, we first move the model in the direction of velocity, compute the gradient using this updated model, and then add this gradient back into the model. The main difference being that in classical momentum, we compute the gradient before updating the model whereas in nesterov we first update the model and then compute the gradient from the updated position. </p>
+<p class="enddd"></p>
+</dd>
+</dl>
+<p><a class="anchor" id="predict"></a></p><dl class="section user"><dt>Prediction Function</dt><dd>Used to generate predictions on novel data given a previously trained model. The same syntax is used for classification and regression. <pre class="syntax">
+mlp_predict(
+    model_table,
+    data_table,
+    id_col_name,
+    output_table,
+    pred_type
+    )
+</pre></dd></dl>
+<p><b>Arguments</b> </p><dl class="arglist">
+<dt>model_table </dt>
+<dd><p class="startdd">TEXT. Model table produced by the training function.</p>
+<p class="enddd"></p>
+</dd>
+<dt>data_table </dt>
+<dd><p class="startdd">TEXT. Name of the table containing the data for prediction. This table is expected to contain the same input features that were used during training. The table should also contain id_col_name used for identifying each row.</p>
+<p class="enddd"></p>
+</dd>
+<dt>id_col_name </dt>
+<dd><p class="startdd">TEXT. The name of the id column in data_table.</p>
+<p class="enddd"></p>
+</dd>
+<dt>output_table </dt>
+<dd>TEXT. Name of the table where output predictions are written. If this table name is already in use, an error is returned. Table contains: <table class="output">
+<tr>
+<th>id </th><td>Gives the 'id' for each prediction, corresponding to each row from the data_table.  </td></tr>
+<tr>
+<th>estimated_COL_NAME </th><td>(For pred_type='response') The estimated class for classification or value for regression, where COL_NAME is the name of the column to be predicted from training data.   </td></tr>
+<tr>
+<th>prob_CLASS </th><td><p class="starttd">(For pred_type='prob' for classification) The probability of a given class CLASS as given by softmax. There will be one column for each class in the training data.  </p>
+<p class="endtd"></p>
+</td></tr>
+</table>
+</dd>
+<dt>pred_type </dt>
+<dd>TEXT. The type of output requested: 'response' gives the actual prediction, 'prob' gives the probability of each class. For regression, only type='response' is defined.  </dd>
+</dl>
+<p><a class="anchor" id="example"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<h4>Classification without Mini-Batching</h4>
+<ol type="1">
+<li>Create an input data set. <pre class="example">
+DROP TABLE IF EXISTS iris_data;
+CREATE TABLE iris_data(
+    id serial,
+    attributes numeric[],
+    class_text varchar,
+    class integer,
+    state varchar
+);
+INSERT INTO iris_data(id, attributes, class_text, class, state) VALUES
+(1,ARRAY[5.0,3.2,1.2,0.2],'Iris_setosa',1,'Alaska'),
+(2,ARRAY[5.5,3.5,1.3,0.2],'Iris_setosa',1,'Alaska'),
+(3,ARRAY[4.9,3.1,1.5,0.1],'Iris_setosa',1,'Alaska'),
+(4,ARRAY[4.4,3.0,1.3,0.2],'Iris_setosa',1,'Alaska'),
+(5,ARRAY[5.1,3.4,1.5,0.2],'Iris_setosa',1,'Alaska'),
+(6,ARRAY[5.0,3.5,1.3,0.3],'Iris_setosa',1,'Alaska'),
+(7,ARRAY[4.5,2.3,1.3,0.3],'Iris_setosa',1,'Alaska'),
+(8,ARRAY[4.4,3.2,1.3,0.2],'Iris_setosa',1,'Alaska'),
+(9,ARRAY[5.0,3.5,1.6,0.6],'Iris_setosa',1,'Alaska'),
+(10,ARRAY[5.1,3.8,1.9,0.4],'Iris_setosa',1,'Alaska'),
+(11,ARRAY[4.8,3.0,1.4,0.3],'Iris_setosa',1,'Alaska'),
+(12,ARRAY[5.1,3.8,1.6,0.2],'Iris_setosa',1,'Alaska'),
+(13,ARRAY[5.7,2.8,4.5,1.3],'Iris_versicolor',2,'Alaska'),
+(14,ARRAY[6.3,3.3,4.7,1.6],'Iris_versicolor',2,'Alaska'),
+(15,ARRAY[4.9,2.4,3.3,1.0],'Iris_versicolor',2,'Alaska'),
+(16,ARRAY[6.6,2.9,4.6,1.3],'Iris_versicolor',2,'Alaska'),
+(17,ARRAY[5.2,2.7,3.9,1.4],'Iris_versicolor',2,'Alaska'),
+(18,ARRAY[5.0,2.0,3.5,1.0],'Iris_versicolor',2,'Alaska'),
+(19,ARRAY[5.9,3.0,4.2,1.5],'Iris_versicolor',2,'Alaska'),
+(20,ARRAY[6.0,2.2,4.0,1.0],'Iris_versicolor',2,'Alaska'),
+(21,ARRAY[6.1,2.9,4.7,1.4],'Iris_versicolor',2,'Alaska'),
+(22,ARRAY[5.6,2.9,3.6,1.3],'Iris_versicolor',2,'Alaska'),
+(23,ARRAY[6.7,3.1,4.4,1.4],'Iris_versicolor',2,'Alaska'),
+(24,ARRAY[5.6,3.0,4.5,1.5],'Iris_versicolor',2,'Alaska'),
+(25,ARRAY[5.8,2.7,4.1,1.0],'Iris_versicolor',2,'Alaska'),
+(26,ARRAY[6.2,2.2,4.5,1.5],'Iris_versicolor',2,'Alaska'),
+(27,ARRAY[5.6,2.5,3.9,1.1],'Iris_versicolor',2,'Alaska'),
+(28,ARRAY[5.0,3.4,1.5,0.2],'Iris_setosa',1,'Tennessee'),
+(29,ARRAY[4.4,2.9,1.4,0.2],'Iris_setosa',1,'Tennessee'),
+(30,ARRAY[4.9,3.1,1.5,0.1],'Iris_setosa',1,'Tennessee'),
+(31,ARRAY[5.4,3.7,1.5,0.2],'Iris_setosa',1,'Tennessee'),
+(32,ARRAY[4.8,3.4,1.6,0.2],'Iris_setosa',1,'Tennessee'),
+(33,ARRAY[4.8,3.0,1.4,0.1],'Iris_setosa',1,'Tennessee'),
+(34,ARRAY[4.3,3.0,1.1,0.1],'Iris_setosa',1,'Tennessee'),
+(35,ARRAY[5.8,4.0,1.2,0.2],'Iris_setosa',1,'Tennessee'),
+(36,ARRAY[5.7,4.4,1.5,0.4],'Iris_setosa',1,'Tennessee'),
+(37,ARRAY[5.4,3.9,1.3,0.4],'Iris_setosa',1,'Tennessee'),
+(38,ARRAY[6.0,2.9,4.5,1.5],'Iris_versicolor',2,'Tennessee'),
+(39,ARRAY[5.7,2.6,3.5,1.0],'Iris_versicolor',2,'Tennessee'),
+(40,ARRAY[5.5,2.4,3.8,1.1],'Iris_versicolor',2,'Tennessee'),
+(41,ARRAY[5.5,2.4,3.7,1.0],'Iris_versicolor',2,'Tennessee'),
+(42,ARRAY[5.8,2.7,3.9,1.2],'Iris_versicolor',2,'Tennessee'),
+(43,ARRAY[6.0,2.7,5.1,1.6],'Iris_versicolor',2,'Tennessee'),
+(44,ARRAY[5.4,3.0,4.5,1.5],'Iris_versicolor',2,'Tennessee'),
+(45,ARRAY[6.0,3.4,4.5,1.6],'Iris_versicolor',2,'Tennessee'),
+(46,ARRAY[6.7,3.1,4.7,1.5],'Iris_versicolor',2,'Tennessee'),
+(47,ARRAY[6.3,2.3,4.4,1.3],'Iris_versicolor',2,'Tennessee'),
+(48,ARRAY[5.6,3.0,4.1,1.3],'Iris_versicolor',2,'Tennessee'),
+(49,ARRAY[5.5,2.5,4.0,1.3],'Iris_versicolor',2,'Tennessee'),
+(50,ARRAY[5.5,2.6,4.4,1.2],'Iris_versicolor',2,'Tennessee'),
+(51,ARRAY[6.1,3.0,4.6,1.4],'Iris_versicolor',2,'Tennessee'),
+(52,ARRAY[5.8,2.6,4.0,1.2],'Iris_versicolor',2,'Tennessee');
+</pre></li>
+<li>Generate a multilayer perceptron with a single hidden layer of 5 units. Use the attributes column as the independent variables, and use the class column as the classification. Set the tolerance to 0 so that 500 iterations will be run. Use a hyperbolic tangent activation function. The model will be written to mlp_model. <pre class="example">
+DROP TABLE IF EXISTS mlp_model, mlp_model_summary, mlp_model_standardization;
+-- Set seed so results are reproducible
+SELECT setseed(0);
+SELECT madlib.mlp_classification(
+    'iris_data',      -- Source table
+    'mlp_model',      -- Destination table
+    'attributes',     -- Input features
+    'class_text',     -- Label
+    ARRAY[5],         -- Number of units per layer
+    'learning_rate_init=0.003,
+    n_iterations=500,
+    tolerance=0',     -- Optimizer params
+    'tanh',           -- Activation function
+    NULL,             -- Default weight (1)
+    FALSE,            -- No warm start
+    FALSE             -- Not verbose
+);
+</pre> View the model: <pre class="example">
+\x on
+SELECT * FROM mlp_model;
+</pre> <pre class="result">
+-[ RECORD 1 ]--+------------------------------------------------------------------------------------
+coeff          | {-0.40378996718,0.0157490328855,-0.298904053444,-0.984152185093,-0.657684089715 ...
+loss           | 0.0103518565103
+num_iterations | 500
+</pre> View the model summary table: <pre class="example">
+SELECT * FROM mlp_model_summary;
+</pre> <pre class="result">
+-[ RECORD 1 ]--------+------------------------------
+source_table         | iris_data
+independent_varname  | attributes
+dependent_varname    | class_text
+dependent_vartype    | character varying
+tolerance            | 0
+learning_rate_init   | 0.003
+learning_rate_policy | constant
+momentum             | 0.9
+nesterov             | t
+n_iterations         | 500
+n_tries              | 1
+layer_sizes          | {4,5,2}
+activation           | tanh
+is_classification    | t
+classes              | {Iris_setosa,Iris_versicolor}
+weights              | 1
+grouping_col         | NULL
+</pre> View the model standardization table: <pre class="example">
+SELECT * FROM mlp_model_standardization;
+</pre> <pre class="result">
+-[ RECORD 1 ]------------------------------------------------------------------
+mean | {5.45961538461539,2.99807692307692,3.025,0.851923076923077}
+std  | {0.598799958694505,0.498262513685689,1.41840579525043,0.550346179381454}
+</pre></li>
+<li>Now let's use the model to predict. In the following example we will use the training data set for prediction as well, which is not usual but serves to show the syntax. The prediction is in the estimated_class_text column with the actual value in the class_text column. <pre class="example">
+DROP TABLE IF EXISTS mlp_prediction;
+\x off
+SELECT madlib.mlp_predict(
+         'mlp_model',         -- Model table
+         'iris_data',         -- Test data table
+         'id',                -- Id column in test table
+         'mlp_prediction',    -- Output table for predictions
+         'response'           -- Output classes, not probabilities
+     );
+SELECT * FROM mlp_prediction JOIN iris_data USING (id) ORDER BY id;
+</pre> <pre class="result">
+ id | estimated_class_text |    attributes     |   class_text    | class |   state
+----+----------------------+-------------------+-----------------+-------+-----------
+  1 | Iris_setosa          | {5.0,3.2,1.2,0.2} | Iris_setosa     |     1 | Alaska
+  2 | Iris_setosa          | {5.5,3.5,1.3,0.2} | Iris_setosa     |     1 | Alaska
+  3 | Iris_setosa          | {4.9,3.1,1.5,0.1} | Iris_setosa     |     1 | Alaska
+  4 | Iris_setosa          | {4.4,3.0,1.3,0.2} | Iris_setosa     |     1 | Alaska
+  5 | Iris_setosa          | {5.1,3.4,1.5,0.2} | Iris_setosa     |     1 | Alaska
+  6 | Iris_setosa          | {5.0,3.5,1.3,0.3} | Iris_setosa     |     1 | Alaska
+  7 | Iris_setosa          | {4.5,2.3,1.3,0.3} | Iris_setosa     |     1 | Alaska
+  8 | Iris_setosa          | {4.4,3.2,1.3,0.2} | Iris_setosa     |     1 | Alaska
+  9 | Iris_setosa          | {5.0,3.5,1.6,0.6} | Iris_setosa     |     1 | Alaska
+ 10 | Iris_setosa          | {5.1,3.8,1.9,0.4} | Iris_setosa     |     1 | Alaska
+ 11 | Iris_setosa          | {4.8,3.0,1.4,0.3} | Iris_setosa     |     1 | Alaska
+ 12 | Iris_setosa          | {5.1,3.8,1.6,0.2} | Iris_setosa     |     1 | Alaska
+ 13 | Iris_versicolor      | {5.7,2.8,4.5,1.3} | Iris_versicolor |     2 | Alaska
+ 14 | Iris_versicolor      | {6.3,3.3,4.7,1.6} | Iris_versicolor |     2 | Alaska
+ 15 | Iris_versicolor      | {4.9,2.4,3.3,1.0} | Iris_versicolor |     2 | Alaska
+ 16 | Iris_versicolor      | {6.6,2.9,4.6,1.3} | Iris_versicolor |     2 | Alaska
+ 17 | Iris_versicolor      | {5.2,2.7,3.9,1.4} | Iris_versicolor |     2 | Alaska
+ 18 | Iris_versicolor      | {5.0,2.0,3.5,1.0} | Iris_versicolor |     2 | Alaska
+ 19 | Iris_versicolor      | {5.9,3.0,4.2,1.5} | Iris_versicolor |     2 | Alaska
+ 20 | Iris_versicolor      | {6.0,2.2,4.0,1.0} | Iris_versicolor |     2 | Alaska
+ 21 | Iris_versicolor      | {6.1,2.9,4.7,1.4} | Iris_versicolor |     2 | Alaska
+ 22 | Iris_versicolor      | {5.6,2.9,3.6,1.3} | Iris_versicolor |     2 | Alaska
+ 23 | Iris_versicolor      | {6.7,3.1,4.4,1.4} | Iris_versicolor |     2 | Alaska
+ 24 | Iris_versicolor      | {5.6,3.0,4.5,1.5} | Iris_versicolor |     2 | Alaska
+ 25 | Iris_versicolor      | {5.8,2.7,4.1,1.0} | Iris_versicolor |     2 | Alaska
+ 26 | Iris_versicolor      | {6.2,2.2,4.5,1.5} | Iris_versicolor |     2 | Alaska
+ 27 | Iris_versicolor      | {5.6,2.5,3.9,1.1} | Iris_versicolor |     2 | Alaska
+ 28 | Iris_setosa          | {5.0,3.4,1.5,0.2} | Iris_setosa     |     1 | Tennessee
+ 29 | Iris_setosa          | {4.4,2.9,1.4,0.2} | Iris_setosa     |     1 | Tennessee
+ 30 | Iris_setosa          | {4.9,3.1,1.5,0.1} | Iris_setosa     |     1 | Tennessee
+ 31 | Iris_setosa          | {5.4,3.7,1.5,0.2} | Iris_setosa     |     1 | Tennessee
+ 32 | Iris_setosa          | {4.8,3.4,1.6,0.2} | Iris_setosa     |     1 | Tennessee
+ 33 | Iris_setosa          | {4.8,3.0,1.4,0.1} | Iris_setosa     |     1 | Tennessee
+ 34 | Iris_setosa          | {4.3,3.0,1.1,0.1} | Iris_setosa     |     1 | Tennessee
+ 35 | Iris_setosa          | {5.8,4.0,1.2,0.2} | Iris_setosa     |     1 | Tennessee
+ 36 | Iris_setosa          | {5.7,4.4,1.5,0.4} | Iris_setosa     |     1 | Tennessee
+ 37 | Iris_setosa          | {5.4,3.9,1.3,0.4} | Iris_setosa     |     1 | Tennessee
+ 38 | Iris_versicolor      | {6.0,2.9,4.5,1.5} | Iris_versicolor |     2 | Tennessee
+ 39 | Iris_versicolor      | {5.7,2.6,3.5,1.0} | Iris_versicolor |     2 | Tennessee
+ 40 | Iris_versicolor      | {5.5,2.4,3.8,1.1} | Iris_versicolor |     2 | Tennessee
+ 41 | Iris_versicolor      | {5.5,2.4,3.7,1.0} | Iris_versicolor |     2 | Tennessee
+ 42 | Iris_versicolor      | {5.8,2.7,3.9,1.2} | Iris_versicolor |     2 | Tennessee
+ 43 | Iris_versicolor      | {6.0,2.7,5.1,1.6} | Iris_versicolor |     2 | Tennessee
+ 44 | Iris_versicolor      | {5.4,3.0,4.5,1.5} | Iris_versicolor |     2 | Tennessee
+ 45 | Iris_versicolor      | {6.0,3.4,4.5,1.6} | Iris_versicolor |     2 | Tennessee
+ 46 | Iris_versicolor      | {6.7,3.1,4.7,1.5} | Iris_versicolor |     2 | Tennessee
+ 47 | Iris_versicolor      | {6.3,2.3,4.4,1.3} | Iris_versicolor |     2 | Tennessee
+ 48 | Iris_versicolor      | {5.6,3.0,4.1,1.3} | Iris_versicolor |     2 | Tennessee
+ 49 | Iris_versicolor      | {5.5,2.5,4.0,1.3} | Iris_versicolor |     2 | Tennessee
+ 50 | Iris_versicolor      | {5.5,2.6,4.4,1.2} | Iris_versicolor |     2 | Tennessee
+ 51 | Iris_versicolor      | {6.1,3.0,4.6,1.4} | Iris_versicolor |     2 | Tennessee
+ 52 | Iris_versicolor      | {5.8,2.6,4.0,1.2} | Iris_versicolor |     2 | Tennessee
+(52 rows)
+</pre> Count the misclassifications: <pre class="example">
+SELECT COUNT(*) FROM mlp_prediction JOIN iris_data USING (id)
+WHERE mlp_prediction.estimated_class_text != iris_data.class_text;
+</pre> <pre class="result">
+ count
+-------+
+     0
+</pre></li>
+</ol>
+<h4>Classification with Mini-Batching</h4>
+<ol type="1">
+<li>Use the same data set as above. Call mini-batch preprocessor: <pre class="example">
+DROP TABLE IF EXISTS iris_data_packed, iris_data_packed_summary, iris_data_packed_standardization;
+SELECT madlib.minibatch_preprocessor('iris_data',         -- Source table
+                                     'iris_data_packed',  -- Output table
+                                     'class_text',        -- Dependent variable
+                                     'attributes'        -- Independent variables
+                                    );
+</pre></li>
+<li>Train the classification model using similar parameters as before: <pre class="example">
+DROP TABLE IF EXISTS mlp_model, mlp_model_summary, mlp_model_standardization;
+-- Set seed so results are reproducible
+SELECT setseed(0);
+SELECT madlib.mlp_classification(
+    'iris_data_packed',      -- Output table from mini-batch preprocessor
+    'mlp_model',             -- Destination table
+    'independent_varname',   -- Hardcode to this, from table iris_data_packed
+    'dependent_varname',     -- Hardcode to this, from table iris_data_packed
+    ARRAY[5],                -- Number of units per layer
+    'learning_rate_init=0.1,
+    n_iterations=500,
+    tolerance=0',            -- Optimizer params
+    'tanh',                  -- Activation function
+    NULL,                    -- Default weight (1)
+    FALSE,                   -- No warm start
+    FALSE                    -- Not verbose
+);
+</pre> View the model: <pre class="example">
+\x on
+SELECT * FROM mlp_model;
+</pre> <pre class="result">
+-[ RECORD 1 ]--+------------------------------------------------------------------------------------
+coeff          | {-0.0780564661828377,-0.0781452670639994,0.3083605989842 ...
+loss           | 0.00563534904146765
+num_iterations | 500
+</pre></li>
+<li>Now let's use the model to predict. As before we will use the training data set for prediction as well, which is not usual but serves to show the syntax. The prediction is in the estimated_class_text column with the actual value in the class_text column. <pre class="example">
+DROP TABLE IF EXISTS mlp_prediction;
+\x off
+SELECT madlib.mlp_predict(
+         'mlp_model',         -- Model table
+         'iris_data',         -- Test data table
+         'id',                -- Id column in test table
+         'mlp_prediction',    -- Output table for predictions
+         'response'           -- Output classes, not probabilities
+     );
+SELECT * FROM mlp_prediction JOIN iris_data USING (id) ORDER BY id;
+</pre> <pre class="result">
+ id | estimated_class_text |    attributes     |   class_text    | class |   state
+----+----------------------+-------------------+-----------------+-------+-----------
+  1 | Iris_setosa          | {5.0,3.2,1.2,0.2} | Iris_setosa     |     1 | Alaska
+  2 | Iris_setosa          | {5.5,3.5,1.3,0.2} | Iris_setosa     |     1 | Alaska
+  3 | Iris_setosa          | {4.9,3.1,1.5,0.1} | Iris_setosa     |     1 | Alaska
+  4 | Iris_setosa          | {4.4,3.0,1.3,0.2} | Iris_setosa     |     1 | Alaska
+  5 | Iris_setosa          | {5.1,3.4,1.5,0.2} | Iris_setosa     |     1 | Alaska
+  6 | Iris_setosa          | {5.0,3.5,1.3,0.3} | Iris_setosa     |     1 | Alaska
+  7 | Iris_setosa          | {4.5,2.3,1.3,0.3} | Iris_setosa     |     1 | Alaska
+  8 | Iris_setosa          | {4.4,3.2,1.3,0.2} | Iris_setosa     |     1 | Alaska
+  9 | Iris_setosa          | {5.0,3.5,1.6,0.6} | Iris_setosa     |     1 | Alaska
+ 10 | Iris_setosa          | {5.1,3.8,1.9,0.4} | Iris_setosa     |     1 | Alaska
+ 11 | Iris_setosa          | {4.8,3.0,1.4,0.3} | Iris_setosa     |     1 | Alaska
+ 12 | Iris_setosa          | {5.1,3.8,1.6,0.2} | Iris_setosa     |     1 | Alaska
+ 13 | Iris_versicolor      | {5.7,2.8,4.5,1.3} | Iris_versicolor |     2 | Alaska
+ 14 | Iris_versicolor      | {6.3,3.3,4.7,1.6} | Iris_versicolor |     2 | Alaska
+ 15 | Iris_versicolor      | {4.9,2.4,3.3,1.0} | Iris_versicolor |     2 | Alaska
+ 16 | Iris_versicolor      | {6.6,2.9,4.6,1.3} | Iris_versicolor |     2 | Alaska
+ 17 | Iris_versicolor      | {5.2,2.7,3.9,1.4} | Iris_versicolor |     2 | Alaska
+ 18 | Iris_versicolor      | {5.0,2.0,3.5,1.0} | Iris_versicolor |     2 | Alaska
+ 19 | Iris_versicolor      | {5.9,3.0,4.2,1.5} | Iris_versicolor |     2 | Alaska
+ 20 | Iris_versicolor      | {6.0,2.2,4.0,1.0} | Iris_versicolor |     2 | Alaska
+ 21 | Iris_versicolor      | {6.1,2.9,4.7,1.4} | Iris_versicolor |     2 | Alaska
+ 22 | Iris_versicolor      | {5.6,2.9,3.6,1.3} | Iris_versicolor |     2 | Alaska
+ 23 | Iris_versicolor      | {6.7,3.1,4.4,1.4} | Iris_versicolor |     2 | Alaska
+ 24 | Iris_versicolor      | {5.6,3.0,4.5,1.5} | Iris_versicolor |     2 | Alaska
+ 25 | Iris_versicolor      | {5.8,2.7,4.1,1.0} | Iris_versicolor |     2 | Alaska
+ 26 | Iris_versicolor      | {6.2,2.2,4.5,1.5} | Iris_versicolor |     2 | Alaska
+ 27 | Iris_versicolor      | {5.6,2.5,3.9,1.1} | Iris_versicolor |     2 | Alaska
+ 28 | Iris_setosa          | {5.0,3.4,1.5,0.2} | Iris_setosa     |     1 | Tennessee
+ 29 | Iris_setosa          | {4.4,2.9,1.4,0.2} | Iris_setosa     |     1 | Tennessee
+ 30 | Iris_setosa          | {4.9,3.1,1.5,0.1} | Iris_setosa     |     1 | Tennessee
+ 31 | Iris_setosa          | {5.4,3.7,1.5,0.2} | Iris_setosa     |     1 | Tennessee
+ 32 | Iris_setosa          | {4.8,3.4,1.6,0.2} | Iris_setosa     |     1 | Tennessee
+ 33 | Iris_setosa          | {4.8,3.0,1.4,0.1} | Iris_setosa     |     1 | Tennessee
+ 34 | Iris_setosa          | {4.3,3.0,1.1,0.1} | Iris_setosa     |     1 | Tennessee
+ 35 | Iris_setosa          | {5.8,4.0,1.2,0.2} | Iris_setosa     |     1 | Tennessee
+ 36 | Iris_setosa          | {5.7,4.4,1.5,0.4} | Iris_setosa     |     1 | Tennessee
+ 37 | Iris_setosa          | {5.4,3.9,1.3,0.4} | Iris_setosa     |     1 | Tennessee
+ 38 | Iris_versicolor      | {6.0,2.9,4.5,1.5} | Iris_versicolor |     2 | Tennessee
+ 39 | Iris_versicolor      | {5.7,2.6,3.5,1.0} | Iris_versicolor |     2 | Tennessee
+ 40 | Iris_versicolor      | {5.5,2.4,3.8,1.1} | Iris_versicolor |     2 | Tennessee
+ 41 | Iris_versicolor      | {5.5,2.4,3.7,1.0} | Iris_versicolor |     2 | Tennessee
+ 42 | Iris_versicolor      | {5.8,2.7,3.9,1.2} | Iris_versicolor |     2 | Tennessee
+ 43 | Iris_versicolor      | {6.0,2.7,5.1,1.6} | Iris_versicolor |     2 | Tennessee
+ 44 | Iris_versicolor      | {5.4,3.0,4.5,1.5} | Iris_versicolor |     2 | Tennessee
+ 45 | Iris_versicolor      | {6.0,3.4,4.5,1.6} | Iris_versicolor |     2 | Tennessee
+ 46 | Iris_versicolor      | {6.7,3.1,4.7,1.5} | Iris_versicolor |     2 | Tennessee
+ 47 | Iris_versicolor      | {6.3,2.3,4.4,1.3} | Iris_versicolor |     2 | Tennessee
+ 48 | Iris_versicolor      | {5.6,3.0,4.1,1.3} | Iris_versicolor |     2 | Tennessee
+ 49 | Iris_versicolor      | {5.5,2.5,4.0,1.3} | Iris_versicolor |     2 | Tennessee
+ 50 | Iris_versicolor      | {5.5,2.6,4.4,1.2} | Iris_versicolor |     2 | Tennessee
+ 51 | Iris_versicolor      | {6.1,3.0,4.6,1.4} | Iris_versicolor |     2 | Tennessee
+ 52 | Iris_versicolor      | {5.8,2.6,4.0,1.2} | Iris_versicolor |     2 | Tennessee
+(52 rows)
+</pre> Count the misclassifications: <pre class="example">
+SELECT COUNT(*) FROM mlp_prediction JOIN iris_data USING (id)
+WHERE mlp_prediction.estimated_class_text != iris_data.class_text;
+</pre> <pre class="result">
+ count
+-------+
+     0
+</pre></li>
+</ol>
+<h4>Classification with Other Parameters</h4>
+<ol type="1">
+<li>Now, use the n_tries optimizer parameter to learn and choose the best model among n_tries number of models learnt by the algorithm. Run only for 50 iterations and choose the best model from this short run. Note we are not using mini-batching here. <pre class="example">
+DROP TABLE IF EXISTS mlp_model, mlp_model_summary, mlp_model_standardization;
+-- Set seed so results are reproducible
+SELECT setseed(0);
+SELECT madlib.mlp_classification(
+    'iris_data',      -- Source table
+    'mlp_model',      -- Destination table
+    'attributes',     -- Input features
+    'class_text',     -- Label
+    ARRAY[5],         -- Number of units per layer
+    'learning_rate_init=0.003,
+    n_iterations=50,
+    tolerance=0,
+    n_tries=3',       -- Optimizer params, with n_tries
+    'tanh',           -- Activation function
+    NULL,             -- Default weight (1)
+    FALSE,            -- No warm start
+    FALSE             -- Not verbose
+);
+</pre> View the model: <pre class="example">
+\x on
+SELECT * FROM mlp_model;
+</pre> <pre class="result">
+-[ RECORD 1 ]--+------------------------------------------------------------------------------------
+coeff          | {0.000156316559088915,0.131131017223563,-0.293990512682215 ...
+loss           | 0.142238768280717
+num_iterations | 50
+</pre></li>
+<li>Next, use the warm_start parameter to start learning a new model, using the coefficients already present in mlp_model. Note that we must not drop the mlp_model table, and cannot use the n_tries parameter if warm_start is used. <pre class="example">
+SELECT madlib.mlp_classification(
+    'iris_data',      -- Source table
+    'mlp_model',      -- Destination table
+    'attributes',     -- Input features
+    'class_text',     -- Label
+    ARRAY[5],         -- Number of units per layer
+    'learning_rate_init=0.003,
+    n_iterations=450,
+    tolerance=0',     -- Optimizer params
+    'tanh',           -- Activation function
+    NULL,             -- Default weight (1)
+    TRUE,             -- Warm start
+    FALSE             -- Not verbose
+);
+</pre> View the model: <pre class="example">
+\x on
+SELECT * FROM mlp_model;
+</pre> <pre class="result">
+-[ RECORD 1 ]--+------------------------------------------------------------------------------------
+coeff          | {0.0883013960215441,0.235944854050211,-0.398126039487036 ...
+loss           | 0.00818899646775659
+num_iterations | 450
+</pre> Notice that the loss is lower compared to the previous example, despite having the same values for every other parameter. This is because the algorithm learnt three different models starting with a different set of initial weights for the coefficients, and chose the best model among them as the initial weights for the coefficients when run with warm start.</li>
+</ol>
+<h4>Classification with Grouping</h4>
+<ol type="1">
+<li>Next, group the training data by state, and learn a different model for each state. Note we are not using mini-batching in this example. <pre class="example">
+DROP TABLE IF EXISTS mlp_model_group, mlp_model_group_summary, mlp_model_group_standardization;
+-- Set seed so results are reproducible
+SELECT setseed(0);
+SELECT madlib.mlp_classification(
+    'iris_data',        -- Source table
+    'mlp_model_group',  -- Destination table
+    'attributes',       -- Input features
+    'class_text',       -- Label
+    ARRAY[5],           -- Number of units per layer
+    'learning_rate_init=0.003,
+    n_iterations=500,   -- Optimizer params
+    tolerance=0',
+    'tanh',             -- Activation function
+    NULL,               -- Default weight (1)
+    FALSE,              -- No warm start
+    FALSE,              -- Not verbose
+    'state'             -- Grouping column
+);
+</pre> View the model: <pre class="example">
+\x on
+SELECT * FROM mlp_model_group ORDER BY state;
+</pre> <pre class="result">
+-[ RECORD 1 ]--+------------------------------------------------------------------------------------
+state          | Alaska
+coeff          | {-0.51246602223,-0.78952457411,0.454192045225,0.223214894458,0.188804700547 ...
+loss           | 0.0225081995679
+num_iterations | 500
+-[ RECORD 2 ]--+------------------------------------------------------------------------------------
+state          | Tennessee
+coeff          | {-0.215009937565,0.116581594162,-0.397643279185,0.919193295184,-0.0811341736111 ...
+loss           | 0.0182854983946
+num_iterations | 500
+</pre> A separate model is learnt for each state, and the result table displays the name of the state (grouping column) associated with the model.</li>
+<li>Prediction based on grouping using the state column: <pre class="example">
+DROP TABLE IF EXISTS mlp_prediction;
+SELECT madlib.mlp_predict(
+         'mlp_model_group',   -- Model table
+         'iris_data',         -- Test data table
+         'id',                -- Id column in test table
+         'mlp_prediction',    -- Output table for predictions
+         'response'           -- Output classes, not probabilities
+     );
+SELECT * FROM mlp_prediction JOIN iris_data USING (state,id) ORDER BY state, id;
+</pre> Result for the classification model: <pre class="result">
+   state   | id | estimated_class_text |    attributes     |   class_text    | class
+-----------+----+----------------------+-------------------+-----------------+-------
+ Alaska    |  1 | Iris_setosa          | {5.0,3.2,1.2,0.2} | Iris_setosa     |     1
+ Alaska    |  2 | Iris_setosa          | {5.5,3.5,1.3,0.2} | Iris_setosa     |     1
+ Alaska    |  3 | Iris_setosa          | {4.9,3.1,1.5,0.1} | Iris_setosa     |     1
+ Alaska    |  4 | Iris_setosa          | {4.4,3.0,1.3,0.2} | Iris_setosa     |     1
+ Alaska    |  5 | Iris_setosa          | {5.1,3.4,1.5,0.2} | Iris_setosa     |     1
+ Alaska    |  6 | Iris_setosa          | {5.0,3.5,1.3,0.3} | Iris_setosa     |     1
+ Alaska    |  7 | Iris_setosa          | {4.5,2.3,1.3,0.3} | Iris_setosa     |     1
+ Alaska    |  8 | Iris_setosa          | {4.4,3.2,1.3,0.2} | Iris_setosa     |     1
+ Alaska    |  9 | Iris_setosa          | {5.0,3.5,1.6,0.6} | Iris_setosa     |     1
+ Alaska    | 10 | Iris_setosa          | {5.1,3.8,1.9,0.4} | Iris_setosa     |     1
+ Alaska    | 11 | Iris_setosa          | {4.8,3.0,1.4,0.3} | Iris_setosa     |     1
+ Alaska    | 12 | Iris_setosa          | {5.1,3.8,1.6,0.2} | Iris_setosa     |     1
+ Alaska    | 13 | Iris_versicolor      | {5.7,2.8,4.5,1.3} | Iris_versicolor |     2
+ Alaska    | 14 | Iris_versicolor      | {6.3,3.3,4.7,1.6} | Iris_versicolor |     2
+ Alaska    | 15 | Iris_versicolor      | {4.9,2.4,3.3,1.0} | Iris_versicolor |     2
+ Alaska    | 16 | Iris_versicolor      | {6.6,2.9,4.6,1.3} | Iris_versicolor |     2
+ Alaska    | 17 | Iris_versicolor      | {5.2,2.7,3.9,1.4} | Iris_versicolor |     2
+ Alaska    | 18 | Iris_versicolor      | {5.0,2.0,3.5,1.0} | Iris_versicolor |     2
+ Alaska    | 19 | Iris_versicolor      | {5.9,3.0,4.2,1.5} | Iris_versicolor |     2
+ Alaska    | 20 | Iris_versicolor      | {6.0,2.2,4.0,1.0} | Iris_versicolor |     2
+ Alaska    | 21 | Iris_versicolor      | {6.1,2.9,4.7,1.4} | Iris_versicolor |     2
+ Alaska    | 22 | Iris_versicolor      | {5.6,2.9,3.6,1.3} | Iris_versicolor |     2
+ Alaska    | 23 | Iris_versicolor      | {6.7,3.1,4.4,1.4} | Iris_versicolor |     2
+ Alaska    | 24 | Iris_versicolor      | {5.6,3.0,4.5,1.5} | Iris_versicolor |     2
+ Alaska    | 25 | Iris_versicolor      | {5.8,2.7,4.1,1.0} | Iris_versicolor |     2
+ Alaska    | 26 | Iris_versicolor      | {6.2,2.2,4.5,1.5} | Iris_versicolor |     2
+ Alaska    | 27 | Iris_versicolor      | {5.6,2.5,3.9,1.1} | Iris_versicolor |     2
+ Tennessee | 28 | Iris_setosa          | {5.0,3.4,1.5,0.2} | Iris_setosa     |     1
+ Tennessee | 29 | Iris_setosa          | {4.4,2.9,1.4,0.2} | Iris_setosa     |     1
+ Tennessee | 30 | Iris_setosa          | {4.9,3.1,1.5,0.1} | Iris_setosa     |     1
+ Tennessee | 31 | Iris_setosa          | {5.4,3.7,1.5,0.2} | Iris_setosa     |     1
+ Tennessee | 32 | Iris_setosa          | {4.8,3.4,1.6,0.2} | Iris_setosa     |     1
+ Tennessee | 33 | Iris_setosa          | {4.8,3.0,1.4,0.1} | Iris_setosa     |     1
+ Tennessee | 34 | Iris_setosa          | {4.3,3.0,1.1,0.1} | Iris_setosa     |     1
+ Tennessee | 35 | Iris_setosa          | {5.8,4.0,1.2,0.2} | Iris_setosa     |     1
+ Tennessee | 36 | Iris_setosa          | {5.7,4.4,1.5,0.4} | Iris_setosa     |     1
+ Tennessee | 37 | Iris_setosa          | {5.4,3.9,1.3,0.4} | Iris_setosa     |     1
+ Tennessee | 38 | Iris_versicolor      | {6.0,2.9,4.5,1.5} | Iris_versicolor |     2
+ Tennessee | 39 | Iris_versicolor      | {5.7,2.6,3.5,1.0} | Iris_versicolor |     2
+ Tennessee | 40 | Iris_versicolor      | {5.5,2.4,3.8,1.1} | Iris_versicolor |     2
+ Tennessee | 41 | Iris_versicolor      | {5.5,2.4,3.7,1.0} | Iris_versicolor |     2
+ Tennessee | 42 | Iris_versicolor      | {5.8,2.7,3.9,1.2} | Iris_versicolor |     2
+ Tennessee | 43 | Iris_versicolor      | {6.0,2.7,5.1,1.6} | Iris_versicolor |     2
+ Tennessee | 44 | Iris_versicolor      | {5.4,3.0,4.5,1.5} | Iris_versicolor |     2
+ Tennessee | 45 | Iris_versicolor      | {6.0,3.4,4.5,1.6} | Iris_versicolor |     2
+ Tennessee | 46 | Iris_versicolor      | {6.7,3.1,4.7,1.5} | Iris_versicolor |     2
+ Tennessee | 47 | Iris_versicolor      | {6.3,2.3,4.4,1.3} | Iris_versicolor |     2
+ Tennessee | 48 | Iris_versicolor      | {5.6,3.0,4.1,1.3} | Iris_versicolor |     2
+ Tennessee | 49 | Iris_versicolor      | {5.5,2.5,4.0,1.3} | Iris_versicolor |     2
+ Tennessee | 50 | Iris_versicolor      | {5.5,2.6,4.4,1.2} | Iris_versicolor |     2
+ Tennessee | 51 | Iris_versicolor      | {6.1,3.0,4.6,1.4} | Iris_versicolor |     2
+ Tennessee | 52 | Iris_versicolor      | {5.8,2.6,4.0,1.2} | Iris_versicolor |     2
+(52 rows)
+</pre></li>
+</ol>
+<h4>Regression without Mini-Batching</h4>
+<ol type="1">
+<li>Create a dataset with housing prices data. <pre class="example">
+DROP TABLE IF EXISTS lin_housing;
+CREATE TABLE lin_housing (id serial, x numeric[], zipcode int, y float8);
+INSERT INTO lin_housing(id, x, zipcode, y) VALUES
+(1,ARRAY[1,0.00632,18.00,2.310,0,0.5380,6.5750,65.20,4.0900,1,296.0,15.30,396.90,4.98],94016,24.00),
+(2,ARRAY[1,0.02731,0.00,7.070,0,0.4690,6.4210,78.90,4.9671,2,242.0,17.80,396.90,9.14],94016,21.60),
+(3,ARRAY[1,0.02729,0.00,7.070,0,0.4690,7.1850,61.10,4.9671,2,242.0,17.80,392.83,4.03],94016,34.70),
+(4,ARRAY[1,0.03237,0.00,2.180,0,0.4580,6.9980,45.80,6.0622,3,222.0,18.70,394.63,2.94],94016,33.40),
+(5,ARRAY[1,0.06905,0.00,2.180,0,0.4580,7.1470,54.20,6.0622,3,222.0,18.70,396.90,5.33],94016,36.20),
+(6,ARRAY[1,0.02985,0.00,2.180,0,0.4580,6.4300,58.70,6.0622,3,222.0,18.70,394.12,5.21],94016,28.70),
+(7,ARRAY[1,0.08829,12.50,7.870,0,0.5240,6.0120,66.60,5.5605,5,311.0,15.20,395.60,12.43],94016,22.90),
+(8,ARRAY[1,0.14455,12.50,7.870,0,0.5240,6.1720,96.10,5.9505,5,311.0,15.20,396.90,19.15],94016,27.10),
+(9,ARRAY[1,0.21124,12.50,7.870,0,0.5240,5.6310,100.00,6.0821,5,311.0,15.20,386.63,29.93],94016,16.50),
+(10,ARRAY[1,0.17004,12.50,7.870,0,0.5240,6.0040,85.90,6.5921,5,311.0,15.20,386.71,17.10],94016,18.90),
+(11,ARRAY[1,0.22489,12.50,7.870,0,0.5240,6.3770,94.30,6.3467,5,311.0,15.20,392.52,20.45],94016,15.00),
+(12,ARRAY[1,0.11747,12.50,7.870,0,0.5240,6.0090,82.90,6.2267,5,311.0,15.20,396.90,13.27],20001,18.90),
+(13,ARRAY[1,0.09378,12.50,7.870,0,0.5240,5.8890,39.00,5.4509,5,311.0,15.20,390.50,15.71],20001,21.70),
+(14,ARRAY[1,0.62976,0.00,8.140,0,0.5380,5.9490,61.80,4.7075,4,307.0,21.00,396.90,8.26],20001,20.40),
+(15,ARRAY[1,0.63796,0.00,8.140,0,0.5380,6.0960,84.50,4.4619,4,307.0,21.00,380.02,10.26],20001,18.20),
+(16,ARRAY[1,0.62739,0.00,8.140,0,0.5380,5.8340,56.50,4.4986,4,307.0,21.00,395.62,8.47],20001,19.90),
+(17,ARRAY[1,1.05393,0.00,8.140,0,0.5380,5.9350,29.30,4.4986,4,307.0,21.00,386.85,6.58],20001, 23.10),
+(18,ARRAY[1,0.78420,0.00,8.140,0,0.5380,5.9900,81.70,4.2579,4,307.0,21.00,386.75,14.67],20001,17.50),
+(19,ARRAY[1,0.80271,0.00,8.140,0,0.5380,5.4560,36.60,3.7965,4,307.0,21.00,288.99,11.69],20001,20.20),
+(20,ARRAY[1,0.72580,0.00,8.140,0,0.5380,5.7270,69.50,3.7965,4,307.0,21.00,390.95,11.28],20001,18.20);
+</pre></li>
+<li>Now train a regression model using a multilayer perceptron with two hidden layers of twenty five nodes each: <pre class="example">
+DROP TABLE IF EXISTS mlp_regress, mlp_regress_summary, mlp_regress_standardization;
+SELECT setseed(0);
+SELECT madlib.mlp_regression(
+    'lin_housing',    -- Source table
+    'mlp_regress',    -- Desination table
+    'x',              -- Input features
+    'y',              -- Dependent variable
+    ARRAY[25,25],     -- Number of units per layer
+    'learning_rate_init=0.001,
+    n_iterations=500,
+    lambda=0.001,
+    tolerance=0',     -- Optimizer params
+    'relu',           -- Activation function
+    NULL,             -- Default weight (1)
+    FALSE,            -- No warm start
+    FALSE             -- Not verbose
+);
+</pre> View the model: <pre class="example">
+\x on
+SELECT * FROM mlp_regress;
+</pre> <pre class="result">
+[ RECORD 1 ]--+-------------------------------------------------------------------------------------
+coeff          | {-0.250057620174,0.0630805938982,-0.290635490112,-0.382966162592,-0.212206338909...
+loss           | 1.07042781236
+num_iterations | 500
+</pre></li>
+<li>Prediction using the regression model: <pre class="example">
+DROP TABLE IF EXISTS mlp_regress_prediction;
+SELECT madlib.mlp_predict(
+         'mlp_regress',               -- Model table
+         'lin_housing',               -- Test data table
+         'id',                        -- Id column in test table
+         'mlp_regress_prediction',    -- Output table for predictions
+         'response'                   -- Output values, not probabilities
+     );
+</pre> View results: <pre class="example">
+SELECT * FROM lin_housing JOIN mlp_regress_prediction USING (id) ORDER BY id;
+</pre> <pre class="result">
+ id |                                         x                                        | zipcode |  y   |   estimated_y
+----+----------------------------------------------------------------------------------+---------+------+------------------
+  1 | {1,0.00632,18.00,2.310,0,0.5380,6.5750,65.20,4.0900,1,296.0,15.30,396.90,4.98}   |   94016 |   24 | 23.9989087488259
+  2 | {1,0.02731,0.00,7.070,0,0.4690,6.4210,78.90,4.9671,2,242.0,17.80,396.90,9.14}    |   94016 | 21.6 | 21.5983177932005
+  3 | {1,0.02729,0.00,7.070,0,0.4690,7.1850,61.10,4.9671,2,242.0,17.80,392.83,4.03}    |   94016 | 34.7 | 34.7102398021623
+  4 | {1,0.03237,0.00,2.180,0,0.4580,6.9980,45.80,6.0622,3,222.0,18.70,394.63,2.94}    |   94016 | 33.4 | 33.4221257351015
+  5 | {1,0.06905,0.00,2.180,0,0.4580,7.1470,54.20,6.0622,3,222.0,18.70,396.90,5.33}    |   94016 | 36.2 | 36.1523886001663
+  6 | {1,0.02985,0.00,2.180,0,0.4580,6.4300,58.70,6.0622,3,222.0,18.70,394.12,5.21}    |   94016 | 28.7 |  28.723894783928
+  7 | {1,0.08829,12.50,7.870,0,0.5240,6.0120,66.60,5.5605,5,311.0,15.20,395.60,12.43}  |   94016 | 22.9 | 22.6515242795835
+  8 | {1,0.14455,12.50,7.870,0,0.5240,6.1720,96.10,5.9505,5,311.0,15.20,396.90,19.15}  |   94016 | 27.1 | 25.7615314879354
+  9 | {1,0.21124,12.50,7.870,0,0.5240,5.6310,100.00,6.0821,5,311.0,15.20,386.63,29.93} |   94016 | 16.5 | 15.7368298351732
+ 10 | {1,0.17004,12.50,7.870,0,0.5240,6.0040,85.90,6.5921,5,311.0,15.20,386.71,17.10}  |   94016 | 18.9 | 16.8850496141437
+ 11 | {1,0.22489,12.50,7.870,0,0.5240,6.3770,94.30,6.3467,5,311.0,15.20,392.52,20.45}  |   94016 |   15 | 14.9150416339458
+ 12 | {1,0.11747,12.50,7.870,0,0.5240,6.0090,82.90,6.2267,5,311.0,15.20,396.90,13.27}  |   20001 | 18.9 | 19.4541629864106
+ 13 | {1,0.09378,12.50,7.870,0,0.5240,5.8890,39.00,5.4509,5,311.0,15.20,390.50,15.71}  |   20001 | 21.7 |  21.715554997762
+ 14 | {1,0.62976,0.00,8.140,0,0.5380,5.9490,61.80,4.7075,4,307.0,21.00,396.90,8.26}    |   20001 | 20.4 | 20.3181247234996
+ 15 | {1,0.63796,0.00,8.140,0,0.5380,6.0960,84.50,4.4619,4,307.0,21.00,380.02,10.26}   |   20001 | 18.2 | 18.5026399122209
+ 16 | {1,0.62739,0.00,8.140,0,0.5380,5.8340,56.50,4.4986,4,307.0,21.00,395.62,8.47}    |   20001 | 19.9 | 19.9131696333521
+ 17 | {1,1.05393,0.00,8.140,0,0.5380,5.9350,29.30,4.4986,4,307.0,21.00,386.85,6.58}    |   20001 | 23.1 | 23.1757650468106
+ 18 | {1,0.78420,0.00,8.140,0,0.5380,5.9900,81.70,4.2579,4,307.0,21.00,386.75,14.67}   |   20001 | 17.5 | 17.2671872543377
+ 19 | {1,0.80271,0.00,8.140,0,0.5380,5.4560,36.60,3.7965,4,307.0,21.00,288.99,11.69}   |   20001 | 20.2 | 20.1073474558796
+ 20 | {1,0.72580,0.00,8.140,0,0.5380,5.7270,69.50,3.7965,4,307.0,21.00,390.95,11.28}   |   20001 | 18.2 | 18.2143446340975
+(20 rows)
+</pre> RMS error: <pre class="example">
+SELECT SQRT(AVG((y-estimated_y)*(y-estimated_y))) as rms_error FROM lin_housing
+JOIN mlp_regress_prediction USING (id);
+</pre> <pre class="result">
+    rms_error
+------------------+
+ 0.544960829104004
+</pre></li>
+</ol>
+<h4>Regression with Mini-Batching</h4>
+<ol type="1">
+<li>Call min-batch preprocessor using the same data set as above: <pre class="example">
+DROP TABLE IF EXISTS lin_housing_packed, lin_housing_packed_summary, lin_housing_packed_standardization;
+SELECT madlib.minibatch_preprocessor('lin_housing',         -- Source table
+                                     'lin_housing_packed',  -- Output table
+                                     'y',                   -- Dependent variable
+                                     'x'                   -- Independent variables
+                                     );
+</pre></li>
+<li>Train regression model with mini-batching <pre class="example">
+DROP TABLE IF EXISTS mlp_regress, mlp_regress_summary, mlp_regress_standardization;
+SELECT setseed(0);
+SELECT madlib.mlp_regression(
+    'lin_housing_packed',    -- Source table
+    'mlp_regress',           -- Desination table
+    'independent_varname',   -- Hardcode to this, from table lin_housing_packed
+    'dependent_varname',     -- Hardcode to this, from table lin_housing_packed
+    ARRAY[25,25],            -- Number of units per layer
+    'learning_rate_init=0.01,
+    n_iterations=500,
+    lambda=0.001,
+    tolerance=0',            -- Optimizer params
+    'tanh',                  -- Activation function
+    NULL,                    -- Default weight (1)
+    FALSE,                   -- No warm start
+    FALSE                    -- Not verbose
+);
+</pre> View model: <pre class="example">
+\x on
+SELECT * FROM mlp_regress;
+</pre> <pre class="result">
+-[ RECORD 1 ]--+-------------------------------------------------------------
+coeff          | {0.0395865908810001,-0.164860448878703,-0.132787863194324...
+loss           | 0.0442383714892138
+num_iterations | 500
+</pre></li>
+<li>Prediction for regression: <pre class="example">
+DROP TABLE IF EXISTS mlp_regress_prediction;
+SELECT madlib.mlp_predict(
+         'mlp_regress',               -- Model table
+         'lin_housing',               -- Test data table
+         'id',                        -- Id column in test table
+         'mlp_regress_prediction',    -- Output table for predictions
+         'response'                   -- Output values, not probabilities
+     );
+\x off
+SELECT *, ABS(y-estimated_y) as abs_diff FROM lin_housing JOIN mlp_regress_prediction USING (id) ORDER BY id;
+</pre> <pre class="result">
+ id |                                        x                                         | zipcode |  y   | zipcode |   estimated_y    |      abs_diff
+----+----------------------------------------------------------------------------------+---------+------+---------+------------------+--------------------
+  1 | {1,0.00632,18.00,2.310,0,0.5380,6.5750,65.20,4.0900,1,296.0,15.30,396.90,4.98}   |   94016 |   24 |   94016 | 23.9714991250013 | 0.0285008749987092
+  2 | {1,0.02731,0.00,7.070,0,0.4690,6.4210,78.90,4.9671,2,242.0,17.80,396.90,9.14}    |   94016 | 21.6 |   94016 | 22.3655180133895 |  0.765518013389535
+  3 | {1,0.02729,0.00,7.070,0,0.4690,7.1850,61.10,4.9671,2,242.0,17.80,392.83,4.03}    |   94016 | 34.7 |   94016 | 33.8620767428645 |  0.837923257135465
+  4 | {1,0.03237,0.00,2.180,0,0.4580,6.9980,45.80,6.0622,3,222.0,18.70,394.63,2.94}    |   94016 | 33.4 |   94016 | 35.3094157686524 |   1.90941576865244
+  5 | {1,0.06905,0.00,2.180,0,0.4580,7.1470,54.20,6.0622,3,222.0,18.70,396.90,5.33}    |   94016 | 36.2 |   94016 | 35.0379122731818 |   1.16208772681817
+  6 | {1,0.02985,0.00,2.180,0,0.4580,6.4300,58.70,6.0622,3,222.0,18.70,394.12,5.21}    |   94016 | 28.7 |   94016 | 27.5207943492151 |   1.17920565078487
+  7 | {1,0.08829,12.50,7.870,0,0.5240,6.0120,66.60,5.5605,5,311.0,15.20,395.60,12.43}  |   94016 | 22.9 |   94016 | 24.9841422781166 |    2.0841422781166
+  8 | {1,0.14455,12.50,7.870,0,0.5240,6.1720,96.10,5.9505,5,311.0,15.20,396.90,19.15}  |   94016 | 27.1 |   94016 | 24.5403994064793 |   2.55960059352067
+  9 | {1,0.21124,12.50,7.870,0,0.5240,5.6310,100.00,6.0821,5,311.0,15.20,386.63,29.93} |   94016 | 16.5 |   94016 | 17.2588278443879 |   0.75882784438787
+ 10 | {1,0.17004,12.50,7.870,0,0.5240,6.0040,85.90,6.5921,5,311.0,15.20,386.71,17.10}  |   94016 | 18.9 |   94016 | 17.0600407532569 |    1.8399592467431
+ 11 | {1,0.22489,12.50,7.870,0,0.5240,6.3770,94.30,6.3467,5,311.0,15.20,392.52,20.45}  |   94016 |   15 |   94016 | 15.2284207930287 |  0.228420793028732
+ 12 | {1,0.11747,12.50,7.870,0,0.5240,6.0090,82.90,6.2267,5,311.0,15.20,396.90,13.27}  |   20001 | 18.9 |   20001 | 19.2272848285357 |  0.327284828535671
+ 13 | {1,0.09378,12.50,7.870,0,0.5240,5.8890,39.00,5.4509,5,311.0,15.20,390.50,15.71}  |   20001 | 21.7 |   20001 | 21.3979318641202 |  0.302068135879811
+ 14 | {1,0.62976,0.00,8.140,0,0.5380,5.9490,61.80,4.7075,4,307.0,21.00,396.90,8.26}    |   20001 | 20.4 |   20001 | 19.7743403979155 |  0.625659602084532
+ 15 | {1,0.63796,0.00,8.140,0,0.5380,6.0960,84.50,4.4619,4,307.0,21.00,380.02,10.26}   |   20001 | 18.2 |   20001 | 18.7400800902121 |  0.540080090212125
+ 16 | {1,0.62739,0.00,8.140,0,0.5380,5.8340,56.50,4.4986,4,307.0,21.00,395.62,8.47}    |   20001 | 19.9 |   20001 | 19.6187933144569 |  0.281206685543061
+ 17 | {1,1.05393,0.00,8.140,0,0.5380,5.9350,29.30,4.4986,4,307.0,21.00,386.85,6.58}    |   20001 | 23.1 |   20001 | 23.3492239648177 |  0.249223964817737
+ 18 | {1,0.78420,0.00,8.140,0,0.5380,5.9900,81.70,4.2579,4,307.0,21.00,386.75,14.67}   |   20001 | 17.5 |   20001 | 17.0806608347814 |  0.419339165218577
+ 19 | {1,0.80271,0.00,8.140,0,0.5380,5.4560,36.60,3.7965,4,307.0,21.00,288.99,11.69}   |   20001 | 20.2 |   20001 | 20.1559086626409 |  0.044091337359113
+ 20 | {1,0.72580,0.00,8.140,0,0.5380,5.7270,69.50,3.7965,4,307.0,21.00,390.95,11.28}   |   20001 | 18.2 |   20001 | 18.6980897920022 |  0.498089792002183
+(20 rows)
+</pre> RMS error: <pre class="example">
+SELECT SQRT(AVG((y-estimated_y)*(y-estimated_y))) as rms_error FROM lin_housing
+JOIN mlp_regress_prediction USING (id);
+</pre> <pre class="result">
+     rms_error
+-------------------+
+ 0.912158035902468
+(1 row)
+</pre></li>
+</ol>
+<h4>Regression with Grouping and Mini-Batching</h4>
+<ol type="1">
+<li>To use grouping and mini-batching, we must first re-run the preprocessor and specify grouping: <pre class="example">
+DROP TABLE IF EXISTS lin_housing_packed, lin_housing_packed_summary, lin_housing_packed_standardization;
+SELECT madlib.minibatch_preprocessor('lin_housing',         -- Source table
+                                     'lin_housing_packed',  -- Output table
+                                     'y',                   -- Dependent variable
+                                     'x',                   -- Independent variables
+                                     'zipcode'              -- Group by zipcode
+                                     );
+</pre></li>
+<li>Train regression model and group the training data by zipcode to learn a different model for each zipcode. <pre class="example">
+DROP TABLE IF EXISTS mlp_regress_group, mlp_regress_group_summary, mlp_regress_group_standardization;
+-- Set seed so results are reproducible
+SELECT setseed(0);
+SELECT madlib.mlp_regression(
+    'lin_housing_packed',    -- Source table
+    'mlp_regress_group',     -- Desination table
+    'independent_varname',   -- Input features
+    'dependent_varname',     -- Dependent variable
+    ARRAY[25,25],     -- Number of units per layer
+    'learning_rate_init=0.001,
+    n_iterations=500,
+    lambda=0.001,
+    tolerance=0',            -- Optimizer params
+    'relu',                  -- Activation function
+    NULL,                    -- Default weight (1)
+    FALSE,                   -- No warm start
+    FALSE,                   -- Not verbose
+    'zipcode'                -- Grouping column
+);
+</pre> View regression model with grouping: <pre class="example">
+\x on
+SELECT * FROM mlp_regress_group;
+</pre> <pre class="result">
+-[ RECORD 1 ]--+------------------------------------------------------------------------------------
+zipcode        | 200001
+coeff          | {-0.193588485849,0.063428493184,-0.30440608833,-0.355695802004,-0.175942716164 ...
+loss           | 0.0904009145541
+num_iterations | 500
+-[ RECORD 2 ]--+------------------------------------------------------------------------------------
+zipcode        | 94016
+coeff          | {-0.18965351506,0.0633650963628,-0.302423579808,-0.334367637252,-0.230043593847 ...
+loss           | 1.04772100552
+num_iterations | 500
+</pre></li>
+<li>Prediction using the regression model for each group based on the zipcode: <pre class="example">
+DROP TABLE IF EXISTS mlp_regress_prediction;
+SELECT madlib.mlp_predict(
+         'mlp_regress_group',         -- Model table
+         'lin_housing',             -- Test data table
+         'id',                        -- Id column in test table
+         'mlp_regress_prediction',    -- Output table for predictions
+         'response'                   -- Output values, not probabilities
+     );
+\x off
+SELECT * FROM lin_housing JOIN mlp_regress_prediction USING (zipcode, id) ORDER BY zipcode, id;
+</pre> <pre class="result">
+ zipcode | id |                                        x                                         |  y   |   estimated_y
+---------+----+----------------------------------------------------------------------------------+------+------------------
+   20001 | 12 | {1,0.11747,12.50,7.870,0,0.5240,6.0090,82.90,6.2267,5,311.0,15.20,396.90,13.27}  | 18.9 | 19.2272848285357
+   20001 | 13 | {1,0.09378,12.50,7.870,0,0.5240,5.8890,39.00,5.4509,5,311.0,15.20,390.50,15.71}  | 21.7 | 21.3979318641202
+   20001 | 14 | {1,0.62976,0.00,8.140,0,0.5380,5.9490,61.80,4.7075,4,307.0,21.00,396.90,8.26}    | 20.4 | 19.7743403979155
+   20001 | 15 | {1,0.63796,0.00,8.140,0,0.5380,6.0960,84.50,4.4619,4,307.0,21.00,380.02,10.26}   | 18.2 | 18.7400800902121
+   20001 | 16 | {1,0.62739,0.00,8.140,0,0.5380,5.8340,56.50,4.4986,4,307.0,21.00,395.62,8.47}    | 19.9 | 19.6187933144569
+   20001 | 17 | {1,1.05393,0.00,8.140,0,0.5380,5.9350,29.30,4.4986,4,307.0,21.00,386.85,6.58}    | 23.1 | 23.3492239648177
+   20001 | 18 | {1,0.78420,0.00,8.140,0,0.5380,5.9900,81.70,4.2579,4,307.0,21.00,386.75,14.67}   | 17.5 | 17.0806608347814
+   20001 | 19 | {1,0.80271,0.00,8.140,0,0.5380,5.4560,36.60,3.7965,4,307.0,21.00,288.99,11.69}   | 20.2 | 20.1559086626409
+   20001 | 20 | {1,0.72580,0.00,8.140,0,0.5380,5.7270,69.50,3.7965,4,307.0,21.00,390.95,11.28}   | 18.2 | 18.6980897920022
+   94016 |  1 | {1,0.00632,18.00,2.310,0,0.5380,6.5750,65.20,4.0900,1,296.0,15.30,396.90,4.98}   |   24 | 23.9714991250013
+   94016 |  2 | {1,0.02731,0.00,7.070,0,0.4690,6.4210,78.90,4.9671,2,242.0,17.80,396.90,9.14}    | 21.6 | 22.3655180133895
+   94016 |  3 | {1,0.02729,0.00,7.070,0,0.4690,7.1850,61.10,4.9671,2,242.0,17.80,392.83,4.03}    | 34.7 | 33.8620767428645
+   94016 |  4 | {1,0.03237,0.00,2.180,0,0.4580,6.9980,45.80,6.0622,3,222.0,18.70,394.63,2.94}    | 33.4 | 35.3094157686524
+   94016 |  5 | {1,0.06905,0.00,2.180,0,0.4580,7.1470,54.20,6.0622,3,222.0,18.70,396.90,5.33}    | 36.2 | 35.0379122731818
+   94016 |  6 | {1,0.02985,0.00,2.180,0,0.4580,6.4300,58.70,6.0622,3,222.0,18.70,394.12,5.21}    | 28.7 | 27.5207943492151
+   94016 |  7 | {1,0.08829,12.50,7.870,0,0.5240,6.0120,66.60,5.5605,5,311.0,15.20,395.60,12.43}  | 22.9 | 24.9841422781166
+   94016 |  8 | {1,0.14455,12.50,7.870,0,0.5240,6.1720,96.10,5.9505,5,311.0,15.20,396.90,19.15}  | 27.1 | 24.5403994064793
+   94016 |  9 | {1,0.21124,12.50,7.870,0,0.5240,5.6310,100.00,6.0821,5,311.0,15.20,386.63,29.93} | 16.5 | 17.2588278443879
+   94016 | 10 | {1,0.17004,12.50,7.870,0,0.5240,6.0040,85.90,6.5921,5,311.0,15.20,386.71,17.10}  | 18.9 | 17.0600407532569
+   94016 | 11 | {1,0.22489,12.50,7.870,0,0.5240,6.3770,94.30,6.3467,5,311.0,15.20,392.52,20.45}  |   15 | 15.2284207930287
+(20 rows)
+</pre> Note that the results you get for all examples may vary with the database you are using.</li>
+</ol>
+<p><a class="anchor" id="background"></a></p><dl class="section user"><dt>Technical Background</dt><dd></dd></dl>
+<p>To train a neural net, the loss function is minimized using stochastic gradient descent. In the case of classification, the loss function is cross entropy. For regression, mean square error is used. Weights in the neural net are updated via the backpropogation process, which uses dynamic programming to compute the partial derivative of each weight with respect to the overall loss. This partial derivative incorporates the activation function used, which requires that the activation function be differentiable.</p>
+<p>For an overview of multilayer perceptrons, see [1].</p>
+<p>For details on backpropogation, see [2].</p>
+<p>On the effect of database cluster size: as the database cluster size increases, the per iteration loss will be higher since the model only sees 1/n of the data, where n is the number of segments. However, each iteration runs faster than single node because it is only traversing 1/n of the data. For large data sets, all else being equal, a bigger cluster will achieve a given accuracy faster than a single node although it may take more iterations to achieve that accuracy.</p>
+<p><a class="anchor" id="literature"></a></p><dl class="section user"><dt>Literature</dt><dd></dd></dl>
+<p><a class="anchor" id="mlp-lit-1"></a>[1] <a href="https://en.wikipedia.org/wiki/Multilayer_perceptron">https://en.wikipedia.org/wiki/Multilayer_perceptron</a></p>
+<p>[2] Yu Hen Hu. "Lecture 11. MLP (III): Back-Propagation." University of Wisconsin Madison: Computer-Aided Engineering. Web. 12 July 2017, <a href="http://homepages.cae.wisc.edu/~ece539/videocourse/notes/pdf/lec%2011%20MLP%20(3)%20BP.pdf">http://homepages.cae.wisc.edu/~ece539/videocourse/notes/pdf/lec%2011%20MLP%20(3)%20BP.pdf</a></p>
+<p>[3] "Neural Networks for Machine Learning", Lectures 6a and 6b on mini-batch gradient descent, Geoffrey Hinton with Nitish Srivastava and Kevin Swersky, <a href="http://www.cs.toronto.edu/~tijmen/csc321/slides/lecture_slides_lec6.pdf">http://www.cs.toronto.edu/~tijmen/csc321/slides/lecture_slides_lec6.pdf</a></p>
+<p><a class="anchor" id="related"></a></p><dl class="section user"><dt>Related Topics</dt><dd></dd></dl>
+<p>File <a class="el" href="mlp_8sql__in.html" title="SQL functions for multilayer perceptron. ">mlp.sql_in</a> documenting the training function </p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__ordinal.html b/docs/rc/group__grp__ordinal.html
new file mode 100644
index 0000000..55aad5a
--- /dev/null
+++ b/docs/rc/group__grp__ordinal.html
@@ -0,0 +1,470 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Ordinal Regression</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__ordinal.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Ordinal Regression<div class="ingroups"><a class="el" href="group__grp__super.html">Supervised Learning</a> &raquo; <a class="el" href="group__grp__regml.html">Regression Models</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li class="level1">
+<a href="#train">Training Function</a> </li>
+<li class="level1">
+<a href="#predict">Prediction Function</a> </li>
+<li class="level1">
+<a href="#examples">Examples</a> </li>
+<li class="level1">
+<a href="#background">Model Details</a> </li>
+<li class="level1">
+<a href="#literature">Literature</a> </li>
+<li class="level1">
+<a href="#related">Related Topics</a> </li>
+</ul>
+</div><p>In statistics, ordinal regression is a type of regression analysis used for predicting an ordinal variable, i.e. a variable whose value exists on an arbitrary scale where only the relative ordering between different values is significant. The two most common types of ordinal regression models are ordered logit, which applies to data that meet the proportional odds assumption, and ordered probit.</p>
+<p><a class="anchor" id="train"></a></p><dl class="section user"><dt>Training Function</dt><dd>The ordinal regression training function has the following syntax: <pre class="syntax">
+ordinal(source_table,
+         model_table,
+         dependent_varname,
+         independent_varname,
+         cat_order,
+         link_func,
+         grouping_col,
+         optim_params,
+         verbose
+        )
+</pre></dd></dl>
+<p><b>Arguments</b> </p><dl class="arglist">
+<dt>source_table </dt>
+<dd><p class="startdd">VARCHAR. Name of the table containing the training data.</p>
+<p class="enddd"></p>
+</dd>
+<dt>model_table </dt>
+<dd><p class="startdd">VARCHAR. Name of the generated table containing the model.</p>
+<p>The model table produced by ordinal() contains the following columns:</p>
+<table class="output">
+<tr>
+<th>&lt;...&gt; </th><td><p class="starttd">Grouping columns, if provided in input. This could be multiple columns depending on the <code>grouping_col</code> input. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>coef_threshold </th><td><p class="starttd">FLOAT8[]. Vector of the threshold coefficients in linear predictor. The threshold coefficients are the intercepts specific to each categorical levels </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>std_err_threshold </th><td><p class="starttd">FLOAT8[]. Vector of the threshold standard errors of the threshold coefficients. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>z_stats_threshold </th><td><p class="starttd">FLOAT8[]. Vector of the threshold z-statistics of the thresholdcoefficients. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>p_values_threshold </th><td><p class="starttd">FLOAT8[]. Vector of the threshold p-values of the threshold coefficients. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>log_likelihood </th><td><p class="starttd">FLOAT8. The log-likelihood \( l(\boldsymbol \beta) \). The value will be the same across categories within the same group. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>coef_feature </th><td><p class="starttd">FLOAT8[]. Vector of the feature coefficients in linear predictor. The feature coefficients are the coefficients for the independent variables. They are the same across categories. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>std_err_feature </th><td><p class="starttd">FLOAT8[]. Vector of the feature standard errors of the feature coefficients. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>z_stats_feature </th><td><p class="starttd">FLOAT8[]. Vector of the feature z-statistics of the feature coefficients. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>p_values_feature </th><td><p class="starttd">FLOAT8[]. Vector of the feature p-values of the feature coefficients. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>num_rows_processed </th><td><p class="starttd">BIGINT. Number of rows processed. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>num_rows_skipped </th><td><p class="starttd">BIGINT. Number of rows skipped due to missing values or failures. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>num_iterations </th><td>INTEGER. Number of iterations actually completed. This would be different from the <code>nIterations</code> argument if a <code>tolerance</code> parameter is provided and the algorithm converges before all iterations are completed.  </td></tr>
+</table>
+<p>A summary table named &lt;model_table&gt;_summary is also created at the same time, which has the following columns: </p><table class="output">
+<tr>
+<th>method </th><td><p class="starttd">VARCHAR. String describes the model: 'ordinal'. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>source_table </th><td><p class="starttd">VARCHAR. Data source table name. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>model_table </th><td><p class="starttd">VARCHAR. Model table name. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>dependent_varname </th><td><p class="starttd">VARCHAR. Expression for dependent variable. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>independent_varname </th><td><p class="starttd">VARCHAR. Expression for independent variables. The independent variables should not include intercept term. Otherwise there will be an error message indicating Hessian matrix is not finite. In that case, the user should drop the intercept and rerun the function agian. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>cat_order </th><td><p class="starttd">VARCHAR. String representation of category order. Default is the sorted categories in data using python sort </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>link_func </th><td><p class="starttd">VARCHAR. String that contains link function parameters: 'logit' and 'probit' links are implemented now </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>grouping_col </th><td><p class="starttd">VARCHAR. String representation of grouping columns. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>optimizer_params </th><td><p class="starttd">VARCHAR. String that contains optimizer parameters, and has the form of 'optimizer=..., max_iter=..., tolerance=...'. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>num_all_groups </th><td><p class="starttd">INTEGER. Number of groups in ordinal regression training. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>num_failed_groups </th><td><p class="starttd">INTEGER. Number of failed groups in ordinal regression training. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>total_rows_processed </th><td><p class="starttd">BIGINT. Total number of rows processed in all groups. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>total_rows_skipped </th><td><p class="starttd">BIGINT. Total number of rows skipped in all groups due to missing values or failures. </p>
+<p class="endtd"></p>
+</td></tr>
+</table>
+<p class="enddd"></p>
+</dd>
+<dt>dependent_varname </dt>
+<dd><p class="startdd">VARCHAR. Name of the dependent variable column.</p>
+<p class="enddd"></p>
+</dd>
+<dt>independent_varname </dt>
+<dd><p class="startdd">VARCHAR. Expression list to evaluate for the independent variables. The intercept should not be included here since the cumulative probability force to have intercepts for each category level.</p>
+<p class="enddd"></p>
+</dd>
+<dt>cat_order </dt>
+<dd><p class="startdd">VARCHAR, String that represents the order of category. The order is specified by charactor '&lt;'. </p>
+<p class="enddd"></p>
+</dd>
+<dt>link_function (optional) </dt>
+<dd><p class="startdd">VARCHAR, default: 'logit'. Parameters for link function. Currently, we support logit and probit. </p>
+<p class="enddd"></p>
+</dd>
+<dt>grouping_col (optional) </dt>
+<dd><p class="startdd">VARCHAR, default: NULL. An expression list used to group the input dataset into discrete groups, running one regression per group. Similar to the SQL "GROUP BY" clause. When this value is NULL, no grouping is used and a single model is generated.</p>
+<p class="enddd"></p>
+</dd>
+<dt>optim_params (optional) </dt>
+<dd><p class="startdd">VARCHAR, default: 'max_iter=100,optimizer=irls,tolerance=1e-6'. Parameters for optimizer. Currently, we support tolerance=[tolerance for relative error between log-likelihoods], max_iter=[maximum iterations to run], optimizer=irls.</p>
+<p class="enddd"></p>
+</dd>
+<dt>verbose (optional) </dt>
+<dd>BOOLEAN, default: FALSE. Provides verbose output of the results of training. </dd>
+</dl>
+<dl class="section note"><dt>Note</dt><dd>To calculate the standard error the coefficient, we are using the square root of the diagnal elements of the expected Fisher information matrix, which is a by-product of iteratively reweighted least square. This method is used in the original ordinal regression paper by McCullagh(1980). In some software like Stata, the standard error is calculated by the observed information matrix, which is supported by Efron and Hinkley (1978). In R, polr() uses the approximated observed information matrix while the optimization is achieved by first order optimization method. Therefore, there will be some difference on standard error, z-stats and p-value from other software.</dd></dl>
+<p><a class="anchor" id="predict"></a></p><dl class="section user"><dt>Prediction Function</dt><dd>Ordinal regression prediction function has the following format: <pre class="syntax">
+ordinal_predict(
+                    model_table,
+                    predict_table_input,
+                    output_table,
+                    predict_type,
+                    verbose
+               )
+</pre> <b>Arguments</b> <dl class="arglist">
+<dt>model_table </dt>
+<dd><p class="startdd">TEXT. Name of the generated table containing the model, which is the output table from ordinal().</p>
+<p class="enddd"></p>
+</dd>
+<dt>predict_table_input </dt>
+<dd><p class="startdd">TEXT. The name of the table containing the data to predict on. The table must contain id column as the primary key.</p>
+<p class="enddd"></p>
+</dd>
+<dt>output_table </dt>
+<dd><p class="startdd">TEXT. Name of the generated table containing the predicted values.</p>
+<p>The model table produced by ordinal_predict contains the following columns:</p>
+<table class="output">
+<tr>
+<th>id </th><td><p class="starttd">SERIAL. Column to identify the predicted value. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>category </th><td><p class="starttd">TEXT. Available if the predicted type = 'response'. Column contains the predicted categories </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>category_value </th><td>FLOAT8. The predicted probability for the specific category_value.  </td></tr>
+</table>
+<p class="enddd"></p>
+</dd>
+<dt>predict_type </dt>
+<dd><p class="startdd">TEXT. Either 'response' or 'probability'. Using 'response' will give the predicted category with the largest probability. Using probability will give the predicted probabilities for all categories</p>
+<p class="enddd"></p>
+</dd>
+<dt>verbose </dt>
+<dd>BOOLEAN. Whether verbose is displayed </dd>
+</dl>
+</dd></dl>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<ol type="1">
+<li>Create the training data table. <pre class="example">
+DROP TABLE IF EXISTS test3;
+CREATE TABLE test3 (
+    feat1 INTEGER,
+    feat2 INTEGER,
+    cat INTEGER
+);
+INSERT INTO test3(feat1, feat2, cat) VALUES
+(1,35,1),
+(2,33,0),
+(3,39,1),
+(1,37,1),
+(2,31,1),
+(3,36,0),
+(2,36,1),
+(2,31,1),
+(2,41,1),
+(2,37,1),
+(1,44,1),
+(3,33,2),
+(1,31,1),
+(2,44,1),
+(1,35,1),
+(1,44,0),
+(1,46,0),
+(2,46,1),
+(2,46,2),
+(3,49,1),
+(2,39,0),
+(2,44,1),
+(1,47,1),
+(1,44,1),
+(1,37,2),
+(3,38,2),
+(1,49,0),
+(2,44,0),
+(3,61,2),
+(1,65,2),
+(3,67,1),
+(3,65,2),
+(1,65,2),
+(2,67,2),
+(1,65,2),
+(1,62,2),
+(3,52,2),
+(3,63,2),
+(2,59,2),
+(3,65,2),
+(2,59,0),
+(3,67,2),
+(3,67,2),
+(3,60,2),
+(3,67,2),
+(3,62,2),
+(2,54,2),
+(3,65,2),
+(3,62,2),
+(2,59,2),
+(3,60,2),
+(3,63,2),
+(3,65,2),
+(2,63,1),
+(2,67,2),
+(2,65,2),
+(2,62,2);
+</pre></li>
+<li>Run the multilogistic regression function. <pre class="example">
+DROP TABLE IF EXISTS test3_output;
+DROP TABLE IF EXISTS test3_output_summary;
+SELECT madlib.ordinal('test3',
+                       'test3_output',
+                       'cat',
+                       'ARRAY[feat1, feat2]',
+                       '0&lt;1&lt;2',
+                       'logit'
+                       );
+</pre></li>
+<li>View the regression results. <pre class="example">
+-- Set extended display on for easier reading of output
+\x on
+SELECT * FROM test3_output;
+</pre></li>
+</ol>
+<p>Result: </p><pre class="result">
+-[ RECORD 1 ]------+-------------------------------------------
+coef_threshold     | {4.12831944358935,6.55999442887089}
+std_err_threshold  | {1.3603408170882,1.54843501580999}
+z_stats_threshold  | {3.03476848722806,4.23653195768075}
+p_values_threshold | {0.00240720390579325,2.26998625331282e-05}
+log_likelihood     | -42.1390192418541
+coef_feature       | {0.574822563129293,0.108115645059558}
+std_err_feature    | {0.394064908788145,0.0276025960683975}
+z_stats_feature    | {1.45870020473791,3.91686509456046}
+p_values_feature   | {0.144647639733733,8.9707915817562e-05}
+num_rows_processed | 57
+num_rows_skipped   | 0
+iteration          | 7
+</pre><ol type="1">
+<li>Predicting dependent variable using ordinal model. (This example uses the original data table to perform the prediction. Typically a different test dataset with the same features as the original training dataset would be used for prediction.)</li>
+</ol>
+<pre class="example">
+\x off
+-- Add the id column for prediction function
+ALTER TABLE test3 ADD COLUMN id SERIAL;
+-- Predict probabilities for all categories using the original data
+SELECT ordinal_predict('test3_output','test3', 'test3_prd_prob', 'probability');
+-- Display the predicted value
+SELECT * FROM test3_prd_prob;
+</pre><p><a class="anchor" id="background"></a></p><dl class="section user"><dt>Model Details</dt><dd></dd></dl>
+<p>The function ordinal() fit the ordinal response model using a cumulative link model. The ordinal reponse variable, denoted by \( Y_i \), can fall in \( j = 1,.. , J\) categories. Then \( Y_i \) follows a multinomial distribution with parameter \(\pi\) where \(\pi_{ij}\) denote the probability that the \(i\)th observation falls in response category \(j\). We define the cumulative probabilities as </p><p class="formulaDsp">
+\[ \gamma_{ij} = \Pr(Y_i \le j)= \pi_{i1} +...+ \pi_{ij} . \]
+</p>
+<p> Next we will consider the logit link for illustration purpose. The logit function is defined as \( \mbox{logit}(\pi) = \log[\pi/(1-\pi)] \) and cumulative logits are defined as: </p><p class="formulaDsp">
+\[ \mbox{logit}(\gamma_{ij})=\mbox{logit}(\Pr(Y_i \le j))=\log \frac{\Pr(Y_i \le j)}{1-\Pr(Y_i\le j)}, j=1,...,J−1 \]
+</p>
+<p> so that the cumulative logits are defined for all but the last category.</p>
+<p>A cumulative link model with a logit link, or simply cumulative logit model is a regression model for cumulative logits: </p><p class="formulaDsp">
+\[ \mbox{logit}(\gamma_{ij}) = \theta_j - x^T_i \beta \]
+</p>
+<p> where \(x_i\) is a vector of explanatory variables for the \(i\)th observation and \(\beta\) is the corresponding set of regression parameters. The \(\{\theta_j\}\) parameters provide each cumulative logit (for each \(j\)) with its own intercept. A key point is that the regression part \(x^T_i\beta\) is independent of \(j\), so \(\beta\) has the same effect for each of the J − 1 cumulative logits. Note that \(x^T_i\beta\) does not contain an intercept, since the \(\{\theta_j\}\) act as intercepts. For small values of \(x^T_i\beta\) the response is likely to fall in the first category and for large values of \(x^T_i\beta\) the response is likely to fall in the last category. The horizontal displacements of the curves are given by the values of \(\{\theta_j\}\).</p>
+<p><a class="anchor" id="literature"></a></p><dl class="section user"><dt>Literature</dt><dd></dd></dl>
+<p>A collection of nice write-ups, with valuable pointers into further literature:</p>
+<p>[1] Peter McCullagh: Regression Models for Ordinal Data, Journal of the Royal Statistical Society. Series B (Methodological), Volume 42, Issue 2 (1980), 109-142</p>
+<p>[2] Rune Haubo B Christensen: Analysis of ordinal data with cumulative link models &ndash; estimation with the R-package ordinal. cran.r-project.org/web/packages/ordinal/vignettes/clm_intro.pdf</p>
+<p><a class="anchor" id="related"></a></p><dl class="section user"><dt>Related Topics</dt><dd></dd></dl>
+<p>File <a class="el" href="ordinal_8sql__in.html" title="SQL functions for ordinal regression. ">ordinal.sql_in</a> documenting the ordinal regression functions</p>
+<p><a class="el" href="group__grp__multinom.html">Multinomial Regression</a></p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:59 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__other__functions.html b/docs/rc/group__grp__other__functions.html
new file mode 100644
index 0000000..be116ed
--- /dev/null
+++ b/docs/rc/group__grp__other__functions.html
@@ -0,0 +1,157 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Utilities</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__other__functions.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#groups">Modules</a>  </div>
+  <div class="headertitle">
+<div class="title">Utilities</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Useful utilities for data science workflows. </p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group__grp__cols2vec"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__cols2vec.html">Columns to Vector</a></td></tr>
+<tr class="memdesc:group__grp__cols2vec"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create a new table with all feature columns inserted into a single column as an array. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__utilities"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__utilities.html">Database Functions</a></td></tr>
+<tr class="memdesc:group__grp__utilities"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provides a collection of user-defined functions for performing common tasks in the database. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__linear__solver"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__linear__solver.html">Linear Solvers</a></td></tr>
+<tr class="memdesc:group__grp__linear__solver"><td class="mdescLeft">&#160;</td><td class="mdescRight">Methods that implement solutions for systems of consistent linear equations. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__minibatch__preprocessing"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__minibatch__preprocessing.html">Mini-Batch Preprocessor</a></td></tr>
+<tr class="memdesc:group__grp__minibatch__preprocessing"><td class="mdescLeft">&#160;</td><td class="mdescRight">Utility that prepares input data for use by models that support mini-batch as an optimization option. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__pmml"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__pmml.html">PMML Export</a></td></tr>
+<tr class="memdesc:group__grp__pmml"><td class="mdescLeft">&#160;</td><td class="mdescRight">Implements the PMML XML standard to describe and exchange models produced by data mining and machine learning algorithms. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__text__utilities"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__text__utilities.html">Term Frequency</a></td></tr>
+<tr class="memdesc:group__grp__text__utilities"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provides a collection of functions for performing common tasks related to text analytics. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__vec2cols"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__vec2cols.html">Vector to Columns</a></td></tr>
+<tr class="memdesc:group__grp__vec2cols"><td class="mdescLeft">&#160;</td><td class="mdescRight">Converts a feature array in a single column of an output table into multiple columns. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:59 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__other__functions.js b/docs/rc/group__grp__other__functions.js
new file mode 100644
index 0000000..5d88a12
--- /dev/null
+++ b/docs/rc/group__grp__other__functions.js
@@ -0,0 +1,10 @@
+var group__grp__other__functions =
+[
+    [ "Columns to Vector", "group__grp__cols2vec.html", null ],
+    [ "Database Functions", "group__grp__utilities.html", null ],
+    [ "Linear Solvers", "group__grp__linear__solver.html", "group__grp__linear__solver" ],
+    [ "Mini-Batch Preprocessor", "group__grp__minibatch__preprocessing.html", null ],
+    [ "PMML Export", "group__grp__pmml.html", null ],
+    [ "Term Frequency", "group__grp__text__utilities.html", null ],
+    [ "Vector to Columns", "group__grp__vec2cols.html", null ]
+];
\ No newline at end of file
diff --git a/docs/rc/group__grp__pagerank.html b/docs/rc/group__grp__pagerank.html
new file mode 100644
index 0000000..e376848
--- /dev/null
+++ b/docs/rc/group__grp__pagerank.html
@@ -0,0 +1,370 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: PageRank</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__pagerank.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">PageRank<div class="ingroups"><a class="el" href="group__grp__graph.html">Graph</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li>
+<a href="#pagerank">PageRank</a> </li>
+<li>
+<a href="#examples">Examples</a> </li>
+<li>
+<a href="#literature">Literature</a> </li>
+</ul>
+</div><p>Given a graph, the PageRank algorithm outputs a probability distribution representing the likelihood that a person randomly traversing the graph will arrive at any particular vertex. This algorithm was originally used by Google to rank websites where the World Wide Web was modeled as a directed graph with the vertices representing the websites. The PageRank algorithm initially proposed by Larry Page and Sergey Brin is implemented here [1].</p>
+<p>We also implement personalized PageRank, in which a notion of importance provides personalization to a query. For example, importance scores can be biased according to a specified set of vertices in the graph that are of interest or special in some way [2].</p>
+<p><a class="anchor" id="pagerank"></a></p><dl class="section user"><dt>PageRank</dt><dd><pre class="syntax">
+pagerank( vertex_table,
+          vertex_id,
+          edge_table,
+          edge_args,
+          out_table,
+          damping_factor,
+          max_iter,
+          threshold,
+          grouping_cols,
+          personalization_vertices
+        )
+</pre></dd></dl>
+<p><b>Arguments</b> </p><dl class="arglist">
+<dt>vertex_table </dt>
+<dd><p class="startdd">TEXT. Name of the table containing the vertex data for the graph. Must contain the column specified in the 'vertex_id' parameter below.</p>
+<p class="enddd"></p>
+</dd>
+<dt>vertex_id </dt>
+<dd><p class="startdd">TEXT, default = 'id'. Name of the column in 'vertex_table' containing vertex ids. The vertex ids are of type INTEGER with no duplicates. They do not need to be contiguous.</p>
+<p class="enddd"></p>
+</dd>
+<dt>edge_table </dt>
+<dd><p class="startdd">TEXT. Name of the table containing the edge data. The edge table must contain columns for source vertex and destination vertex.</p>
+<p class="enddd"></p>
+</dd>
+<dt>edge_args </dt>
+<dd><p class="startdd">TEXT. A comma-delimited string containing multiple named arguments of the form "name=value". The following parameters are supported for this string argument:</p><ul>
+<li>src (INTEGER): Name of the column containing the source vertex ids in the edge table. Default column name is 'src'.</li>
+<li>dest (INTEGER): Name of the column containing the destination vertex ids in the edge table. Default column name is 'dest'.</li>
+</ul>
+<p class="enddd"></p>
+</dd>
+<dt>out_table </dt>
+<dd><p class="startdd">TEXT. Name of the table to store the result of PageRank. It will contain a row for every vertex from 'vertex_table' with the following columns:</p><ul>
+<li>vertex_id : The id of a vertex. Will use the input parameter 'vertex_id' for column naming.</li>
+<li>pagerank : The vertex's PageRank.</li>
+<li>grouping_cols : Grouping column (if any) values associated with the vertex_id.</li>
+</ul>
+<p>A summary table is also created that contains information regarding the number of iterations required for convergence. It is named by adding the suffix '_summary' to the 'out_table' parameter.</p>
+<p class="enddd"></p>
+</dd>
+<dt>damping_factor (optional) </dt>
+<dd><p class="startdd">FLOAT8, default 0.85. The probability, at any step, that a user will continue following the links in a random surfer model.</p>
+<p class="enddd"></p>
+</dd>
+<dt>max_iter (optional) </dt>
+<dd><p class="startdd">INTEGER, default: 100. The maximum number of iterations allowed.</p>
+<p class="enddd"></p>
+</dd>
+<dt>threshold (optional) </dt>
+<dd><p class="startdd">FLOAT8, default: (1/number of vertices * 1000). If the difference between the PageRank of every vertex of two consecutive iterations is smaller than 'threshold', or the iteration number is larger than 'max_iter', the computation stops. If you set the threshold to zero, then you will force the algorithm to run for the full number of iterations specified in 'max_iter'. It is advisable to set threshold to a value lower than 1/(number of vertices in the graph) since the PageRank value of nodes is initialized to that value.</p>
+<p class="enddd"></p>
+</dd>
+<dt>grouping_cols (optional) </dt>
+<dd>TEXT, default: NULL. A single column or a list of comma-separated columns that divides the input data into discrete groups, resulting in one distribution per group. When this value is NULL, no grouping is used and a single model is generated for all data. <dl class="section note"><dt>Note</dt><dd>Expressions are not currently supported for 'grouping_cols'.</dd></dl>
+</dd>
+<dt>personalization_vertices (optional) </dt>
+<dd>INTEGER[], default: NULL. A comma separated list of vertices or nodes for personalized PageRank. When this parameter is provided, personalized PageRank will run. In the absence of this parameter, regular PageRank will run. </dd>
+</dl>
+<dl class="section note"><dt>Note</dt><dd>On a Greenplum cluster, the edge table should be distributed by the source vertex id column for better performance.</dd></dl>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<ol type="1">
+<li>Create vertex and edge tables to represent the graph: <pre class="syntax">
+DROP TABLE IF EXISTS vertex, edge;
+CREATE TABLE vertex(
+        id INTEGER
+        );
+CREATE TABLE edge(
+        src INTEGER,
+        dest INTEGER,
+        user_id INTEGER
+        );
+INSERT INTO vertex VALUES
+(0),
+(1),
+(2),
+(3),
+(4),
+(5),
+(6);
+INSERT INTO edge VALUES
+(0, 1, 1),
+(0, 2, 1),
+(0, 4, 1),
+(1, 2, 1),
+(1, 3, 1),
+(2, 3, 1),
+(2, 5, 1),
+(2, 6, 1),
+(3, 0, 1),
+(4, 0, 1),
+(5, 6, 1),
+(6, 3, 1),
+(0, 1, 2),
+(0, 2, 2),
+(0, 4, 2),
+(1, 2, 2),
+(1, 3, 2),
+(2, 3, 2),
+(3, 0, 2),
+(4, 0, 2),
+(5, 6, 2),
+(6, 3, 2);
+</pre></li>
+<li>Running PageRank with default values for optional parameters: <pre class="syntax">
+DROP TABLE IF EXISTS pagerank_out, pagerank_out_summary;
+SELECT madlib.pagerank(
+                       'vertex',             -- Vertex table
+                       'id',                 -- Vertix id column
+                       'edge',               -- Edge table
+                       'src=src, dest=dest', -- Comma delimted string of edge arguments
+                       'pagerank_out');      -- Output table of PageRank
+SELECT * FROM pagerank_out ORDER BY pagerank DESC;
+</pre> <pre class="result">
+ id |      pagerank
+----+-------------------
+  0 |  0.28753749341184
+  3 |  0.21016988901855
+  2 |  0.14662683454062
+  4 |  0.10289614384217
+  1 |  0.10289614384217
+  6 |  0.09728637768887
+  5 |  0.05258711765692
+(7 rows)
+</pre> <pre class="syntax">
+SELECT * FROM pagerank_out_summary;
+</pre> <pre class="result">
+ __iterations__
+ ----------------+
+             16
+(1 row)
+</pre></li>
+<li>Running PageRank with a damping factor of 0.5 results in different final values: <pre class="syntax">
+DROP TABLE IF EXISTS pagerank_out, pagerank_out_summary;
+SELECT madlib.pagerank(
+                         'vertex',             -- Vertex table
+                         'id',                 -- Vertix id column
+                         'edge',               -- Edge table
+                         'src=src, dest=dest', -- Comma delimted string of edge arguments
+                         'pagerank_out',       -- Output table of PageRank
+                         0.5);                 -- Damping factor
+SELECT * FROM pagerank_out ORDER BY pagerank DESC;
+</pre> <pre class="result">
+ id |      pagerank
+----+--------------------
+  0 |  0.225477161441199
+  3 |  0.199090328586664
+  2 |  0.136261327206477
+  6 |  0.132691559968224
+  4 |  0.109009291409508
+  1 |  0.109009291409508
+  5 | 0.0884610399788161
+(7 rows)
+</pre></li>
+<li>Now compute the PageRank of vertices associated with each user using the grouping feature: <pre class="syntax">
+DROP TABLE IF EXISTS pagerank_out, pagerank_out_summary;
+SELECT madlib.pagerank(
+                         'vertex',             -- Vertex table
+                         'id',                 -- Vertix id column
+                         'edge',               -- Edge table
+                         'src=src, dest=dest', -- Comma delimted string of edge arguments
+                         'pagerank_out',       -- Output table of PageRank
+                         NULL,                 -- Default damping factor (0.85)
+                         NULL,                 -- Default max iters (100)
+                         0.00000001,           -- Threshold
+                         'user_id');           -- Grouping column name
+SELECT * FROM pagerank_out ORDER BY user_id, pagerank DESC;
+</pre> <pre class="result">
+ user_id | id |      pagerank
+---------+----+--------------------
+       1 |  0 |  0.27825488388552
+       1 |  3 |  0.20188114667075
+       1 |  2 |  0.14288112346059
+       1 |  6 |  0.11453637832147
+       1 |  1 |  0.10026745615438
+       1 |  4 |  0.10026745615438
+       1 |  5 |  0.06191155535288
+       2 |  0 |  0.31854625004173
+       2 |  3 |  0.23786686773343
+       2 |  2 |  0.15914876489397
+       2 |  1 |  0.11168334437971
+       2 |  4 |  0.11168334437971
+       2 |  6 |  0.03964285714285
+       2 |  5 |  0.02142857142857
+(14 rows)
+</pre> <pre class="syntax">
+SELECT * FROM pagerank_out_summary ORDER BY user_id;
+</pre> <pre class="result">
+ user_id | __iterations__
+---------+----------------
+       1 |             27
+       2 |             31
+(2 rows)
+</pre></li>
+<li>Personalized PageRank. Here we specify {2,4} as the personalization vertices. This parameter could be specified as ARRAY[2,4] as well. <pre class="syntax">
+DROP TABLE IF EXISTS pagerank_out, pagerank_out_summary;
+SELECT madlib.pagerank(
+                       'vertex',             -- Vertex table
+                       'id',                 -- Vertix id column
+                       'edge',               -- Edge table
+                       'src=src, dest=dest', -- Comma delimted string of edge arguments
+                       'pagerank_out',       -- Output table of PageRank
+                        NULL,                -- Default damping factor (0.85)
+                        NULL,                -- Default max iters (100)
+                        NULL,                -- Default Threshold
+                        NULL,                -- No Grouping
+                       '{2,4}');             -- Personalization vertices
+SELECT * FROM pagerank_out ORDER BY pagerank DESC;
+</pre> <pre class="result">
+ id |      pagerank
+----+--------------------
+  0 |  0.565232961966315
+  2 |  0.378139420991773
+  3 |  0.355003292266017
+  4 |  0.310111215897626
+  1 |  0.160111215897626
+  6 |  0.148615315574136
+  5 | 0.0803403307142321
+(7 rows)
+</pre> <pre class="syntax">
+SELECT * FROM pagerank_out_summary;
+</pre> <pre class="result">
+ __iterations__
+ ----------------+
+             37
+(1 row)
+</pre></li>
+</ol>
+<p><a class="anchor" id="literature"></a></p><dl class="section user"><dt>Literature</dt><dd></dd></dl>
+<p>[1] Brin, S. and Page, L. (1998), "The anatomy of a large-scale hypertextual Web search engine", Computer Networks and ISDN Systems. 30: 107–117, <a href="http://infolab.stanford.edu/pub/papers/google.pdf">http://infolab.stanford.edu/pub/papers/google.pdf</a></p>
+<p>[2] Jeh, Glen and Widom, Jennifer. "Scaling Personalized Web Search", Proceedings of the 12th international conference on World Wide Web, Pages 271-279 Budapest, Hungary, May 20-24, 2003, <a href="http://ilpubs.stanford.edu:8090/530/1/2002-12.pdf">http://ilpubs.stanford.edu:8090/530/1/2002-12.pdf</a> </p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__path.html b/docs/rc/group__grp__path.html
new file mode 100644
index 0000000..116643c
--- /dev/null
+++ b/docs/rc/group__grp__path.html
@@ -0,0 +1,481 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Path</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__path.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Path<div class="ingroups"><a class="el" href="group__grp__datatrans.html">Data Types and Transformations</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li>
+<a href="#syntax">Function Syntax</a> </li>
+<li>
+<a href="#examples">Examples</a> </li>
+<li>
+<a href="#nomenclature">Nomenclature</a> </li>
+<li>
+<a href="#literature">Literature</a> </li>
+</ul>
+</div><p>The goal of the MADlib path function is to perform regular pattern matching over a sequence of rows, and to extract useful information about the pattern matches. The useful information could be a simple count of matches or something more involved like aggregations or window functions.</p>
+<p>Symbols are used to identify particular rows of interest. Then, standard PostgreSQL pattern matching using symbols can be applied to identify patterns across the rows of interest. (This is similar in concept to regular expressions which match patterns within strings of text.)</p>
+<p>For example, a symbol can be defined for purchase events by on-line shoppers. Then, preceding events that led to the purchase can be identified and operated on, perhaps to find the common actions that resulted in a purchase. Or conversely, to find actions that resulted in an exit without a purchase having been made.</p>
+<p>Steps on how to use path functions:</p>
+<ol type="1">
+<li>Partition input rows.</li>
+<li>Order the partitions.</li>
+<li>Define symbols to match rows of interest.</li>
+<li>Define regular expression of symbols and operators to define patterns to match in your ordered partitions.</li>
+<li>Define an aggregate function to compute for each pattern match.</li>
+<li>If desired, output the pattern matches for inspection or to operate on them with subsequent queries.</li>
+</ol>
+<p><a class="anchor" id="syntax"></a></p><dl class="section user"><dt>Function Syntax</dt><dd><pre class="syntax">
+path(
+    source_table,
+    output_table,
+    partition_expr,
+    order_expr,
+    symbol,
+    pattern,
+    aggregate_func,
+    persist_rows,
+    overlapping_patterns
+)
+</pre></dd></dl>
+<p><b>Arguments</b> </p><dl class="arglist">
+<dt>source_table </dt>
+<dd><p class="startdd">VARCHAR. Name of the source table, containing data for path analysis.</p>
+<p class="enddd"></p>
+</dd>
+<dt>output_table </dt>
+<dd><p class="startdd">VARCHAR. Name of the result table.</p>
+<p class="enddd"></p>
+</dd>
+<dt>partition_expr </dt>
+<dd><p class="startdd">VARCHAR. The 'partition_expr' can be a single column or a list of comma-separated columns/expressions to divide all rows into groups, or partitions. Matching is applied across the rows that fall into the same partition. This can be NULL or '' to indicate the matching is to be applied to the whole table.</p>
+<p class="enddd"></p>
+</dd>
+<dt>order_expr </dt>
+<dd><p class="startdd">VARCHAR. This expression controls the order in which rows are processed or matched in a partition. For example, time is a common way to order partitions. </p>
+<p class="enddd"></p>
+</dd>
+<dt>symbol </dt>
+<dd><p class="startdd">VARCHAR. Symbols enable you to express patterns of interest in a simple way (see definition of ‘pattern’ argument below). A symbol identifies a row of a particular type that you’re searching for as part of a pattern match. Symbol definition uses the standard PostgreSQL assignment statement 'identifier := expression;' [1]. A given row can only match one symbol. If a row matches multiple symbols, the symbol that comes first in the symbol definition list will take precedence. </p>
+<p class="enddd"></p>
+</dd>
+<dt>pattern </dt>
+<dd><p class="startdd">VARCHAR. The 'pattern' clause defines the pattern that the path algorithm searches for. You express the pattern using symbols and operators following regular PostgreSQL pattern matching syntax and rules [2].</p>
+<p><a class="anchor" id="note"></a></p><dl class="section note"><dt>Note</dt><dd>Symbols defined using more than one (1) character need to be enclosed in parentheses '()' when referenced in the 'pattern' argument. For example:<ul>
+<li>a symbol defined as 'a' in the 'symbol' argument can be used directly in the 'pattern' argument</li>
+<li>a symbol defined as 'abc' in the 'symbol' argument must be written as '(abc)' in the 'pattern' argument</li>
+</ul>
+</dd></dl>
+<p>The following pattern matching metacharacters are supported: </p><ul>
+<li>
+| denotes alternation (either of two alternatives).  </li>
+<li>
+? denotes repetition of the previous item zero or one time.  </li>
+<li>
+* denotes repetition of the previous item zero or more times.  </li>
+<li>
++ denotes repetition of the previous item one or more times.  </li>
+<li>
+{m} denotes repetition of the previous item exactly m times.  </li>
+<li>
+{m,} denotes repetition of the previous item m or more times.  </li>
+<li>
+{m,n} denotes repetition of the previous item at least m and not more than n times.  </li>
+<li>
+Parentheses () can be used to group items into a single logical item. </li>
+</ul>
+<p class="enddd"></p>
+</dd>
+<dt>aggregate_func (optional) </dt>
+<dd><p class="startdd">VARCHAR, default NULL. A comma-separated list of aggregates to be applied to the pattern matches [3]. You can think of this input parameter as being like a SELECT clause. Please note that window functions cannot currently be used in the parameter 'aggregate_func'. If you want to use a window function [4], output the pattern matches and write a SQL query with a window function over the output tuples (see 'persist_rows' parameter below).</p>
+<p>If you just want to output the pattern matched rows and not compute any aggregates, you can put NULL or '' in the 'aggregate_func' parameter. </p>
+<p class="enddd"></p>
+</dd>
+<dt>persist_rows (optional) </dt>
+<dd><p class="startdd">BOOLEAN, default FALSE. If TRUE the matched rows are persisted in a separate output table. This table is named as &lt;output_table&gt;_tuples (the string "_tuples" is added as suffix to the value of <em>output_table</em>). </p>
+<p class="enddd"></p>
+</dd>
+<dt>overlapping_patterns (optional) </dt>
+<dd><p class="startdd">BOOLEAN, default FALSE. If TRUE find every occurrence of the pattern in the partition, regardless of whether it might have been part of a previously found match. </p>
+<p class="enddd"></p>
+</dd>
+</dl>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<p>The data set describes shopper behavior on a notional web site that sells beer and wine. A beacon fires an event to a log file when the shopper visits different pages on the site: landing page, beer selection page, wine selection page, and checkout. Other pages on the site like help pages show up in the logs as well. Let’s assume that the log has been sessionized.</p>
+<ol type="1">
+<li>Create the date table: <pre class="example">
+DROP TABLE IF EXISTS eventlog;
+CREATE TABLE eventlog (event_timestamp TIMESTAMP,
+            user_id INT,
+            session_id INT,
+            page TEXT,
+            revenue FLOAT);
+INSERT INTO eventlog VALUES
+('04/15/2015 01:03:00', 100821, 100, 'LANDING', 0),
+('04/15/2015 01:04:00', 100821, 100, 'WINE', 0),
+('04/15/2015 01:05:00', 100821, 100, 'CHECKOUT', 39),
+('04/15/2015 02:06:00', 100821, 101, 'WINE', 0),
+('04/15/2015 02:09:00', 100821, 101, 'WINE', 0),
+('04/15/2015 01:15:00', 101121, 102, 'LANDING', 0),
+('04/15/2015 01:16:00', 101121, 102, 'WINE', 0),
+('04/15/2015 01:17:00', 101121, 102, 'CHECKOUT', 15),
+('04/15/2015 01:18:00', 101121, 102, 'LANDING', 0),
+('04/15/2015 01:19:00', 101121, 102, 'HELP', 0),
+('04/15/2015 01:21:00', 101121, 102, 'WINE', 0),
+('04/15/2015 01:22:00', 101121, 102, 'CHECKOUT', 23),
+('04/15/2015 02:15:00', 101331, 103, 'LANDING', 0),
+('04/15/2015 02:16:00', 101331, 103, 'WINE', 0),
+('04/15/2015 02:17:00', 101331, 103, 'HELP', 0),
+('04/15/2015 02:18:00', 101331, 103, 'WINE', 0),
+('04/15/2015 02:19:00', 101331, 103, 'CHECKOUT', 16),
+('04/15/2015 02:22:00', 101443, 104, 'BEER', 0),
+('04/15/2015 02:25:00', 101443, 104, 'CHECKOUT', 12),
+('04/15/2015 02:29:00', 101881, 105, 'LANDING', 0),
+('04/15/2015 02:30:00', 101881, 105, 'BEER', 0),
+('04/15/2015 01:05:00', 102201, 106, 'LANDING', 0),
+('04/15/2015 01:06:00', 102201, 106, 'HELP', 0),
+('04/15/2015 01:09:00', 102201, 106, 'LANDING', 0),
+('04/15/2015 02:15:00', 102201, 107, 'WINE', 0),
+('04/15/2015 02:16:00', 102201, 107, 'BEER', 0),
+('04/15/2015 02:17:00', 102201, 107, 'WINE', 0),
+('04/15/2015 02:18:00', 102871, 108, 'BEER', 0),
+('04/15/2015 02:19:00', 102871, 108, 'WINE', 0),
+('04/15/2015 02:22:00', 102871, 108, 'CHECKOUT', 21),
+('04/15/2015 02:25:00', 102871, 108, 'LANDING', 0),
+('04/15/2015 02:17:00', 103711, 109, 'BEER', 0),
+('04/15/2015 02:18:00', 103711, 109, 'LANDING', 0),
+('04/15/2015 02:19:00', 103711, 109, 'WINE', 0);
+</pre></li>
+<li>Calculate the revenue by checkout: <pre class="example">
+DROP TABLE IF EXISTS path_output, path_output_tuples;
+SELECT madlib.path(
+     'eventlog',                -- Name of input table
+     'path_output',             -- Table name to store path results
+     'session_id',              -- Partition input table by session
+     'event_timestamp ASC',     -- Order partitions in input table by time
+     'buy:=page=''CHECKOUT''',  -- Define a symbol for checkout events
+     '(buy)',                   -- Pattern search: purchase
+     'sum(revenue) as checkout_rev',    -- Aggregate:  sum revenue by checkout
+     TRUE                       -- Persist matches
+     );
+SELECT * FROM path_output ORDER BY session_id, match_id;
+</pre> Result: <pre class="result">
+ session_id | match_id | checkout_rev
+------------+----------+--------------
+        100 |        1 |           39
+        102 |        1 |           15
+        102 |        2 |           23
+        103 |        1 |           16
+        104 |        1 |           12
+        108 |        1 |           21
+(6 rows)
+</pre> Note that there are 2 checkouts within session 102, which is apparent from the 'match_id' column. This serves to illustrate that the 'aggregate_func' operates on a <em>per pattern match</em> basis, not on a <em>per partition</em> basis. If in fact we wanted revenue by partition ('session_id' in this example), then we could do: <pre class="example">
+SELECT session_id, sum(checkout_rev) FROM path_output GROUP BY session_id ORDER BY session_id;
+</pre> Result: <pre class="result">
+ session_id | sum
+------------+-----
+        100 |  39
+        102 |  38
+        103 |  16
+        104 |  12
+        108 |  21
+(5 rows)
+</pre> Since we set TRUE for 'persist_rows', we can view the associated pattern matches: <pre class="example">
+SELECT * FROM path_output_tuples ORDER BY session_id ASC, event_timestamp ASC;
+</pre> Result: <pre class="result">
+   event_timestamp   | user_id | session_id |   page   | revenue | symbol | match_id
+---------------------+---------+------------+----------+---------+--------+----------
+ 2015-04-15 01:05:00 |  100821 |        100 | CHECKOUT |      39 | buy    |        1
+ 2015-04-15 01:17:00 |  101121 |        102 | CHECKOUT |      15 | buy    |        1
+ 2015-04-15 01:22:00 |  101121 |        102 | CHECKOUT |      23 | buy    |        2
+ 2015-04-15 02:19:00 |  101331 |        103 | CHECKOUT |      16 | buy    |        1
+ 2015-04-15 02:25:00 |  101443 |        104 | CHECKOUT |      12 | buy    |        1
+ 2015-04-15 02:22:00 |  102871 |        108 | CHECKOUT |      21 | buy    |        1
+(6 rows)
+</pre> Notice that the 'symbol' and 'match_id' columns are added to the right of the matched rows.</li>
+<li>We are interested in sessions with an order placed within 4 pages of entering the shopping site via the landing page. We represent this by the regular expression: '(land)[^(land)(buy)]{0,2}(buy)'. In other words, visit to the landing page followed by from 0 to 2 non-entry, non-sale pages, followed by a purchase. The SQL is as follows: <pre class="example">
+DROP TABLE IF EXISTS path_output, path_output_tuples;
+SELECT madlib.path(
+     'eventlog',                -- Name of input table
+     'path_output',             -- Table name to store path results
+     'session_id',              -- Partition input table by session
+     'event_timestamp ASC',     -- Order partitions in input table by time
+     'land:=page=''LANDING'',
+        wine:=page=''WINE'',
+        beer:=page=''BEER'',
+        buy:=page=''CHECKOUT'',
+        other:=page&lt;&gt;''LANDING'' AND page&lt;&gt;''WINE'' AND page&lt;&gt;''BEER'' AND  page&lt;&gt;''CHECKOUT''',    -- Symbols for  page types
+      '(land)[^(land)(buy)]{0,2}(buy)', -- Purchase within 4 pages entering site
+     'sum(revenue) as checkout_rev',    -- Aggregate:  sum revenue by checkout
+     TRUE                       -- Persist matches
+     );
+SELECT * FROM path_output ORDER BY session_id, match_id;
+</pre> Result: <pre class="result">
+ session_id | match_id | session_rev
+------------+----------+-------------
+        100 |        1 |          39
+        102 |        1 |          15
+        102 |        2 |          23
+(3 rows)
+</pre> Now view the associated pattern matches: <pre class="example">
+SELECT * FROM path_output_tuples ORDER BY session_id ASC, event_timestamp ASC;
+</pre> Result: <pre class="result">
+   event_timestamp   | user_id | session_id |   page   | revenue | symbol | match_id
+---------------------+---------+------------+----------+---------+--------+----------
+ 2015-04-15 01:03:00 |  100821 |        100 | LANDING  |       0 | land   |        1
+ 2015-04-15 01:04:00 |  100821 |        100 | WINE     |       0 | wine   |        1
+ 2015-04-15 01:05:00 |  100821 |        100 | CHECKOUT |      39 | buy    |        1
+ 2015-04-15 01:15:00 |  101121 |        102 | LANDING  |       0 | land   |        1
+ 2015-04-15 01:16:00 |  101121 |        102 | WINE     |       0 | wine   |        1
+ 2015-04-15 01:17:00 |  101121 |        102 | CHECKOUT |      15 | buy    |        1
+ 2015-04-15 01:18:00 |  101121 |        102 | LANDING  |       0 | land   |        2
+ 2015-04-15 01:19:00 |  101121 |        102 | HELP     |       0 | other  |        2
+ 2015-04-15 01:21:00 |  101121 |        102 | WINE     |       0 | wine   |        2
+ 2015-04-15 01:22:00 |  101121 |        102 | CHECKOUT |      23 | buy    |        2
+(10 rows)
+</pre></li>
+<li>We may want to use a window function instead of an aggregate. Currently, only aggregates are supported in the core path function in the parameter 'aggregate_func'. However, you can write window functions on the output tuples to achieve the desired result. &#160; Continuing the previous example, let’s say we want to compute average revenue for checkouts within 4 pages of entering the shopping site via the landing page: <pre class="example">
+SELECT DATE(event_timestamp), user_id, session_id, revenue,
+    avg(revenue) OVER (PARTITION BY DATE(event_timestamp)) as avg_checkout_rev
+    FROM path_output_tuples
+    WHERE page='CHECKOUT'
+    ORDER BY user_id, session_id;
+</pre> Result: <pre class="result">
+    date    | user_id | session_id | revenue | avg_checkout_rev
+------------+---------+------------+---------+------------------
+ 2015-04-15 |  100821 |        100 |      39 | 25.6666666666667
+ 2015-04-15 |  101121 |        102 |      15 | 25.6666666666667
+ 2015-04-15 |  101121 |        102 |      23 | 25.6666666666667
+(3 rows)
+</pre> Here we are partitioning the window function by day because we want daily averages, although our sample data set only has a single day.</li>
+<li>Now we want to do a golden path analysis to find the most successful shopper paths through the site. Since our data set is small, we decide this means the most frequently viewed page just before a checkout is made: <pre class="example">
+DROP TABLE IF EXISTS path_output, path_output_tuples;
+SELECT madlib.path(
+     'eventlog',                -- Name of input table
+     'path_output',             -- Table name to store path results
+     'session_id',              -- Partition input table by session
+     'event_timestamp ASC',     -- Order partitions in input table by time
+     'land:=page=''LANDING'',
+        wine:=page=''WINE'',
+        beer:=page=''BEER'',
+        buy:=page=''CHECKOUT'',
+        other:=page&lt;&gt;''LANDING'' AND page&lt;&gt;''WINE'' AND page&lt;&gt;''BEER'' AND  page&lt;&gt;''CHECKOUT''',    -- Symbols for  page types
+      '[^(buy)](buy)',          -- Pattern to match
+     'array_agg(page ORDER BY session_id ASC, event_timestamp ASC) as page_path',    -- Build array with shopper paths
+     FALSE                       -- Don't persist matches
+     );
+</pre> Now count the common paths and print the most frequent: <pre class="example">
+SELECT count(*), page_path from
+    (SELECT * FROM path_output) q
+GROUP BY page_path
+ORDER BY count(*) DESC
+LIMIT 10;
+</pre> Result: <pre class="result">
+ count |    page_path
+-------+-----------------
+     5 | {WINE,CHECKOUT}
+     1 | {BEER,CHECKOUT}
+(2 rows)
+</pre> There are only 2 different paths. The wine page is viewed more frequently than the beer page just before checkout.</li>
+<li>To demonstrate the use of 'overlapping_patterns', consider a pattern with at least one page followed by and ending with a checkout: <pre class="example">
+DROP TABLE IF EXISTS path_output, path_output_tuples;
+SELECT madlib.path(
+     'eventlog',                    -- Name of the table
+     'path_output',                 -- Table name to store the path results
+     'session_id',                  -- Partition by session
+     'event_timestamp ASC',         -- Order partitions in input table by time
+     $$ nobuy:=page&lt;&gt;'CHECKOUT',
+        buy:=page='CHECKOUT'
+     $$,  -- Definition of symbols used in the pattern definition
+     '(nobuy)+(buy)',         -- At least one page followed by and ending with a CHECKOUT.
+     'array_agg(page ORDER BY session_id ASC, event_timestamp ASC) as page_path',
+     FALSE,                        -- Don't persist matches
+     TRUE                          -- Turn on overlapping patterns
+     );
+SELECT * FROM path_output ORDER BY session_id, match_id;
+</pre> Result with overlap turned on: <pre class="result">
+ session_id | match_id |             page_path
+------------+----------+-----------------------------------
+        100 |        1 | {LANDING,WINE,CHECKOUT}
+        100 |        2 | {WINE,CHECKOUT}
+        102 |        1 | {LANDING,WINE,CHECKOUT}
+        102 |        2 | {WINE,CHECKOUT}
+        102 |        3 | {LANDING,HELP,WINE,CHECKOUT}
+        102 |        4 | {HELP,WINE,CHECKOUT}
+        102 |        5 | {WINE,CHECKOUT}
+        103 |        1 | {LANDING,WINE,HELP,WINE,CHECKOUT}
+        103 |        2 | {WINE,HELP,WINE,CHECKOUT}
+        103 |        3 | {HELP,WINE,CHECKOUT}
+        103 |        4 | {WINE,CHECKOUT}
+        104 |        1 | {BEER,CHECKOUT}
+        108 |        1 | {BEER,WINE,CHECKOUT}
+        108 |        2 | {WINE,CHECKOUT}
+(14 rows)
+</pre> With overlap turned off, the result would be: <pre class="result">
+ session_id | match_id |             page_path
+------------+----------+-----------------------------------
+        100 |        1 | {LANDING,WINE,CHECKOUT}
+        102 |        1 | {LANDING,WINE,CHECKOUT}
+        102 |        2 | {LANDING,HELP,WINE,CHECKOUT}
+        103 |        1 | {LANDING,WINE,HELP,WINE,CHECKOUT}
+        104 |        1 | {BEER,CHECKOUT}
+        108 |        1 | {BEER,WINE,CHECKOUT}
+(6 rows)
+</pre></li>
+</ol>
+<p><a class="anchor" id="note"></a></p><dl class="section note"><dt>Note</dt><dd>Please note some current limitations of the path algorithm.<ul>
+<li>Window functions cannot currently be used in the parameter 'aggregate_func'. Instead, output the pattern matches and write a SQL query with a window function over the output tuples.</li>
+<li>A given row can only match one symbol. If a row matches multiple symbols, the symbol that comes <em>first</em> in the symbol definition list will take precedence.</li>
+<li>Maximum number of symbols that can be defined is 35.</li>
+<li>The columns 'match_id' and 'symbol' are generated by the path algorithm. If coincidently you have columns in your input data named 'match_id' or 'symbol', the system generated column names will be changed to "__madlib_path_match_id__" and "__madlib_path_symbol__"</li>
+</ul>
+</dd></dl>
+<p><a class="anchor" id="nomenclature"></a></p><dl class="section user"><dt>Nomenclature</dt><dd></dd></dl>
+<p>Partition</p><ul>
+<li>scope of rows to be searched for pattern match</li>
+<li>typical examples: user id, session id, portfolio id</li>
+</ul>
+<p>Order</p><ul>
+<li>sort order of input rows in partition</li>
+<li>typical example: time</li>
+</ul>
+<p>Symbol</p><ul>
+<li>a row of a particular type that you’re searching for, that you want to include in a pattern</li>
+</ul>
+<p>Pattern</p><ul>
+<li>regular PostgreSQL pattern match expression of symbols and operators that you want to match across rows</li>
+</ul>
+<p>Pattern match</p><ul>
+<li>rows that result from a pattern match expression of symbols</li>
+<li>can be multiple matches per partition</li>
+</ul>
+<p><a class="anchor" id="literature"></a></p><dl class="section user"><dt>Literature</dt><dd></dd></dl>
+<p>NOTE: The following links refer to documentation resources for the current PostgreSQL database version. Depending upon your database platform version, you may need to change "current" references in the links to your database version.</p>
+<p>If your database platform uses the Greenplum Database (or related variants), please check with the project community and/or your database vendor to identify the PostgreSQL version it is based on.</p>
+<p>[1] PostgreSQL basic statements/assignment operator, <a href="http://www.postgresql.org/docs/current/static/plpgsql-statements.html">http://www.postgresql.org/docs/current/static/plpgsql-statements.html</a></p>
+<p>[2] PostgreSQL pattern matching, <a href="http://www.postgresql.org/docs/current/static/functions-matching.html">http://www.postgresql.org/docs/current/static/functions-matching.html</a></p>
+<p>[3] PostgreSQL aggregate functions, <a href="http://www.postgresql.org/docs/current/static/tutorial-agg.html">http://www.postgresql.org/docs/current/static/tutorial-agg.html</a></p>
+<p>[4] PostgreSQL window functions, <a href="http://www.postgresql.org/docs/current/static/tutorial-window.html">http://www.postgresql.org/docs/current/static/tutorial-window.html</a> </p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__pca.html b/docs/rc/group__grp__pca.html
new file mode 100644
index 0000000..f83994b
--- /dev/null
+++ b/docs/rc/group__grp__pca.html
@@ -0,0 +1,142 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Dimensionality Reduction</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__pca.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#groups">Modules</a>  </div>
+  <div class="headertitle">
+<div class="title">Dimensionality Reduction<div class="ingroups"><a class="el" href="group__grp__unsupervised.html">Unsupervised Learning</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Methods for reducing the number of variables in a dataset to obtain a set of principle variables. </p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group__grp__pca__train"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__pca__train.html">Principal Component Analysis</a></td></tr>
+<tr class="memdesc:group__grp__pca__train"><td class="mdescLeft">&#160;</td><td class="mdescRight">Produces a model that transforms a number of (possibly) correlated variables into a (smaller) number of uncorrelated variables called principal components. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__pca__project"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__pca__project.html">Principal Component Projection</a></td></tr>
+<tr class="memdesc:group__grp__pca__project"><td class="mdescLeft">&#160;</td><td class="mdescRight">Projects a higher dimensional data point to a lower dimensional subspace spanned by principal components learned through the PCA training procedure. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:59 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__pca.js b/docs/rc/group__grp__pca.js
new file mode 100644
index 0000000..2863cf8
--- /dev/null
+++ b/docs/rc/group__grp__pca.js
@@ -0,0 +1,5 @@
+var group__grp__pca =
+[
+    [ "Principal Component Analysis", "group__grp__pca__train.html", null ],
+    [ "Principal Component Projection", "group__grp__pca__project.html", null ]
+];
\ No newline at end of file
diff --git a/docs/rc/group__grp__pca__project.html b/docs/rc/group__grp__pca__project.html
new file mode 100644
index 0000000..f517005
--- /dev/null
+++ b/docs/rc/group__grp__pca__project.html
@@ -0,0 +1,499 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Principal Component Projection</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__pca__project.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Principal Component Projection<div class="ingroups"><a class="el" href="group__grp__unsupervised.html">Unsupervised Learning</a> &raquo; <a class="el" href="group__grp__pca.html">Dimensionality Reduction</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li class="level1">
+<a href="#project">Projection Function</a> </li>
+<li class="level1">
+<a href="#examples">Examples</a> </li>
+<li class="level1">
+<a href="#notes">Notes</a> </li>
+<li class="level1">
+<a href="#background_project">Technical Background</a> </li>
+<li class="level1">
+<a href="#related">Related Topics</a> </li>
+</ul>
+</div><p>Principal component projection is a mathematical procedure that projects high dimensional data onto a lower dimensional space. This lower dimensional space is defined by the \( k \) principal components with the highest variance in the training data.</p>
+<p>More details on the mathematics of PCA can be found in <a class="el" href="group__grp__pca__train.html">Principal Component Analysis</a> and some details about principal component projection calculations can be found in the <a class="el" href="group__grp__pca__project.html#background_project">Technical Background</a>.</p>
+<p><a class="anchor" id="project"></a></p><dl class="section user"><dt>Projection Function</dt><dd>The projection functions are slightly different for dense and sparse matrices. For dense matrices: <pre class="syntax">
+madlib.pca_project( source_table,
+                    pc_table,
+                    out_table,
+                    row_id,
+                    residual_table,
+                    result_summary_table
+                  )
+</pre> For sparse matrices: <pre class="syntax">
+madlib.pca_sparse_project( source_table,
+                           pc_table,
+                           out_table,
+                           row_id,
+                           col_id,              -- Sparse matrices only
+                           val_id,              -- Sparse matrices only
+                           row_dim,             -- Sparse matrices only
+                           col_dim,             -- Sparse matrices only
+                           residual_table,
+                           result_summary_table
+                         )
+</pre></dd></dl>
+<p><b>Arguments</b> </p><dl class="arglist">
+<dt>source_table </dt>
+<dd><p class="startdd">TEXT. Source table name. Identical to <a class="el" href="pca_8sql__in.html#a31abf88e67a446a4f789764aa2c61e85">pca_train</a>, the input data matrix should have \( N \) rows and \( M \) columns, where \( N \) is the number of data points, and \( M \) is the number of features for each data point.</p>
+<p>The input table for <em> pca_project </em> is expected to be in the one of the two standard MADlib dense matrix formats, and the sparse input table for <em> pca_sparse_project </em> should be in the standard MADlib sparse matrix format. These formats are described in the documentation for <a class="el" href="group__grp__pca__train.html">Principal Component Analysis</a>.</p>
+<p class="enddd"></p>
+</dd>
+<dt>pc_table </dt>
+<dd><p class="startdd">TEXT. Table name for the table containing principal components. </p>
+<p class="enddd"></p>
+</dd>
+<dt>out_table </dt>
+<dd><p class="startdd">TEXT. Name of the table that will contain the low-dimensional representation of the input data.</p>
+<p>The <em>out_table</em> encodes a dense matrix with the projection onto the principal components. The table has the following columns:</p>
+<table class="output">
+<tr>
+<th>row_id </th><td>Row id of the output matrix.  </td></tr>
+<tr>
+<th>row_vec </th><td>A vector containing elements in the row of the matrix.  </td></tr>
+</table>
+<p class="enddd"></p>
+</dd>
+<dt>row_id </dt>
+<dd><p class="startdd">TEXT. Column name containing the row IDs in the input source table. The column should be of type INT (or a type that can be cast to INT) and should only contain values between 1 and <em>N</em>. For dense matrix format, it should contain all continguous integers from 1 to <em>N</em> describing the full matrix.</p>
+<p class="enddd"></p>
+</dd>
+<dt>col_id </dt>
+<dd><p class="startdd">TEXT. Column name containing the column IDs in sparse matrix representation. The column should be of type INT (or a type that can be cast to INT) and should only contain values between 1 and <em>M</em>. <em>This parameter applies to sparse matrices only.</em></p>
+<p class="enddd"></p>
+</dd>
+<dt>val_id </dt>
+<dd><p class="startdd">TEXT. Name of 'val_id' column in sparse matrix representation defining the values of the nonzero entries. <em>This parameter applies to sparse matrices only.</em></p>
+<p class="enddd"></p>
+</dd>
+<dt>row_dim </dt>
+<dd><p class="startdd">INTEGER. The actual number of rows in the matrix. That is, if the matrix was transformed into dense format, this is the number of rows it would have. <em>This parameter applies to sparse matrices only.</em></p>
+<p class="enddd"></p>
+</dd>
+<dt>col_dim </dt>
+<dd><p class="startdd">INTEGER. The actual number of columns in the matrix. That is, if the matrix was transformed into dense format, this is the number of columns it would have. <em>This parameter applies to sparse matrices only.</em></p>
+<dl class="section note"><dt>Note</dt><dd>The parameters 'row_dim' and 'col_dim' could actually be inferred from the sparse matrix representation, so they will be removed in the future. For now they are maintained for backward compatability so you must enter them. Making 'row_dim' or 'col_dim' larger than the actual matrix has the effect of padding it with zeros, which is probably not useful.</dd></dl>
+</dd>
+<dt>residual_table (optional) </dt>
+<dd><p class="startdd">TEXT, default: NULL. Name of the optional residual table.</p>
+<p>The <em>residual_table</em> encodes a dense residual matrix. The table has the following columns:</p>
+<table class="output">
+<tr>
+<th>row_id </th><td>Row id of the output matrix.  </td></tr>
+<tr>
+<th>row_vec </th><td>A vector containing elements in the row of the residual matrix.  </td></tr>
+</table>
+<p class="enddd"></p>
+</dd>
+<dt>result_summary_table (optional) </dt>
+<dd><p class="startdd">TEXT, default: NULL. Name of the optional summary table.</p>
+<p class="enddd">The <em>result_summary_table</em> contains information about the performance time of the PCA projection. The table has the following columns: </p><table class="output">
+<tr>
+<th>exec_time </th><td>Elapsed time (ms) for execution of the function.  </td></tr>
+<tr>
+<th>residual_norm </th><td>Absolute error of the residuals.  </td></tr>
+<tr>
+<th>relative_residual_norm </th><td>Relative error of the residuals.  </td></tr>
+</table>
+</dd>
+</dl>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd><ol type="1">
+<li>View online help for the PCA projection function: <pre class="example">
+SELECT madlib.pca_project();
+</pre></li>
+<li>Create sample data in dense matrix form: <pre class="example">
+DROP TABLE IF EXISTS mat;
+CREATE TABLE mat (id integer,
+                  row_vec double precision[]
+                  );
+INSERT INTO mat VALUES
+(1, '{1,2,3}'),
+(2, '{2,1,2}'),
+(3, '{3,2,1}');
+</pre></li>
+<li>Run the PCA function for a specified number of principal components and view the results: <pre class="example">
+DROP TABLE IF EXISTS result_table, result_table_mean;
+SELECT madlib.pca_train('mat',             -- Source table
+                        'result_table',    -- Output table
+                        'id',              -- Row id of source table
+                         2);               -- Number of principal components
+SELECT * FROM result_table ORDER BY row_id;
+</pre> <pre class="result">
+ row_id |                     principal_components                     |      std_dev      |    proportion
+--------+--------------------------------------------------------------+-------------------+-------------------
+      1 | {0.707106781186547,-6.93889390390723e-18,-0.707106781186548} |  1.41421356237309 | 0.857142857142244
+      2 | {0,1,0}                                                      | 0.577350269189626 | 0.142857142857041
+(2 rows)
+</pre></li>
+<li>Project the original data to a lower dimensional representation and view the result of the projection: <pre class="example">
+DROP TABLE IF EXISTS residual_table, result_summary_table, out_table;
+SELECT madlib.pca_project( 'mat',
+                           'result_table',
+                           'out_table',
+                           'id',
+                           'residual_table',
+                           'result_summary_table'
+                           );
+SELECT * FROM out_table ORDER BY row_id;
+</pre> <pre class="result">
+ row_id |               row_vec
+--------+--------------------------------------
+      1 | {-1.41421356237309,-0.33333333333}
+      2 | {2.77555756157677e-17,0.66666666667}
+      3 | {1.41421356237309,-0.33333333333}
+(3 rows)
+</pre> Check the error in the projection: <pre class="example">
+SELECT * FROM result_summary_table;
+</pre> <pre class="result">
+   exec_time   |   residual_norm   | relative_residual_norm
+---------------+-------------------+------------------------
+ 331.792116165 | 5.89383520611e-16 |      9.68940539229e-17
+(1 row)
+</pre> Check the residuals: <pre class="example">
+SELECT * FROM residual_table ORDER BY row_id;
+</pre> <pre class="result">
+ row_id |                              row_vec
+--------+--------------------------------------------------------------------
+      1 | {-2.22044604925031e-16,-1.11022302462516e-16,3.33066907387547e-16}
+      2 | {-1.12243865646685e-18,0,4.7381731349413e-17}
+      3 | {2.22044604925031e-16,1.11022302462516e-16,-3.33066907387547e-16}
+(3 rows)
+</pre></li>
+<li>Now we use grouping in dense form to learn different models for different groups. First, we create sample data in dense matrix form with a grouping column. Note we actually have different matrix sizes for the different groups, which is allowed for dense: <pre class="example">
+DROP TABLE IF EXISTS mat_group;
+CREATE TABLE mat_group (
+    id integer,
+    row_vec double precision[],
+    matrix_id integer
+);
+INSERT INTO mat_group VALUES
+(1, '{1,2,3}', 1),
+(2, '{2,1,2}', 1),
+(3, '{3,2,1}', 1),
+(4, '{1,2,3,4,5}', 2),
+(5, '{2,5,2,4,1}', 2),
+(6, '{5,4,3,2,1}', 2);
+</pre></li>
+<li>Run the PCA function with grouping for a specified proportion of variance and view the results: <pre class="example">
+DROP TABLE IF EXISTS result_table_group, result_table_group_mean;
+SELECT madlib.pca_train('mat_group',             -- Source table
+                        'result_table_group',    -- Output table
+                        'id',                    -- Row id of source table
+                         0.8,                    -- Proportion of variance
+                        'matrix_id');            -- Grouping column
+SELECT * FROM result_table_group ORDER BY matrix_id, row_id;
+</pre> <pre class="result">
+ row_id |                                      principal_components                                      |     std_dev     |    proportion     | matrix_id
+--------+------------------------------------------------------------------------------------------------+-----------------+-------------------+-----------
+      1 | {0.707106781186548,0,-0.707106781186547}                                                       | 1.4142135623731 | 0.857142857142245 |         1
+      1 | {-0.555378486712784,-0.388303582074091,0.0442457354870796,0.255566375612852,0.688115693174023} | 3.2315220311722 | 0.764102534485173 |         2
+      2 | {0.587384101786277,-0.485138064894743,0.311532046315153,-0.449458074050715,0.347212037159181}  |  1.795531127192 | 0.235897465516047 |         2
+(3 rows)
+</pre></li>
+<li>Run the PCA projection on subsets of an input table based on grouping columns. Note that the parameter 'pc_table' used for projection must be generated in training using the same grouping columns. <pre class="example">
+DROP TABLE IF EXISTS mat_group_projected;
+SELECT madlib.pca_project('mat_group',
+                          'result_table_group',
+                          'mat_group_projected',
+                          'id');
+SELECT * FROM mat_group_projected ORDER BY matrix_id, row_id;
+</pre> <pre class="result">
+ row_id |                row_vec                | matrix_id
+--------+---------------------------------------+-----------
+      1 | {1.4142135623731}                     |         1
+      2 | {7.40148683087139e-17}                |         1
+      3 | {-1.4142135623731}                    |         1
+      4 | {-3.59290479201926,0.559694003674779} |         2
+      5 | {0.924092949098971,-2.00871628417505} |         2
+      6 | {2.66881184290186,1.44902228049511}   |         2
+(6 rows)
+</pre></li>
+<li>Now let's look at sparse matrices. Create sample data in sparse matrix form: <pre class="example">
+DROP TABLE IF EXISTS mat_sparse;
+CREATE TABLE mat_sparse (
+    row_id integer,
+    col_id integer,
+    value double precision
+);
+INSERT INTO mat_sparse VALUES
+(1, 1, 1.0),
+(2, 2, 2.0),
+(3, 3, 3.0),
+(4, 4, 4.0),
+(1, 5, 5.0),
+(2, 4, 6.0),
+(3, 2, 7.0),
+(4, 3, 8.0);
+</pre> As an aside, this is what the sparse matrix above looks like when put in dense form: <pre class="example">
+DROP TABLE IF EXISTS mat_dense;
+SELECT madlib.matrix_densify('mat_sparse',
+                            'row=row_id, col=col_id, val=value',
+                            'mat_dense');
+SELECT * FROM mat_dense ORDER BY row_id;
+</pre> <pre class="result">
+ row_id |    value
+--------+-------------
+      1 | {1,0,0,0,5}
+      2 | {0,2,0,6,0}
+      3 | {0,7,3,0,0}
+      4 | {0,0,8,4,0}
+(4 rows)
+</pre></li>
+<li>Run the PCA sparse function for a specified number of principal components and view the results: <pre class="example">DROP TABLE IF EXISTS result_table, result_table_mean;
+SELECT madlib.pca_sparse_train( 'mat_sparse',       -- Source table
+                                'result_table',     -- Output table
+                                'row_id',           -- Row id of source table
+                                'col_id',           -- Column id of source table
+                                'value',            -- Value of matrix at row_id, col_id
+                                4,                  -- Actual number of rows in the matrix
+                                5,                  -- Actual number of columns in the matrix
+                                3);                 -- Number of principal components
+SELECT * FROM result_table ORDER BY row_id;
+</pre> Result (with principal components truncated for readability): <pre class="result">
+ row_id |         principal_components                 |     std_dev      |    proportion
+--------+----------------------------------------------+------------------+-------------------
+      1 | {-0.0876046030186158,-0.0968983772909994,... | 4.21362803829554 | 0.436590030617467
+      2 | {-0.0647272661608605,0.877639526308692,...   | 3.68408023747461 | 0.333748701544697
+      3 | {-0.0780380267884855,0.177956517174911,...   | 3.05606908060098 | 0.229661267837836
+(3 rows)
+</pre></li>
+<li>Project the original sparse data to low-dimensional representation: <pre class="example">
+DROP TABLE IF EXISTS mat_sparse_out;
+SELECT madlib.pca_sparse_project(
+                    'mat_sparse',
+                    'result_table',
+                    'mat_sparse_out',
+                    'row_id',
+                    'col_id',
+                    'value',
+                    4,
+                    5
+                    );
+SELECT * FROM mat_sparse_out ORDER BY row_id;
+</pre> <pre class="result">
+ row_id |                         row_vec
+--------+---------------------------------------------------------
+      1 | {4.66617015032369,-2.63552220635847,2.1865220849604}
+      2 | {0.228360685652383,-1.21616275892926,-4.46864627611561}
+      3 | {0.672067460100428,5.45249627172823,0.56445525585642}
+      4 | {-5.5665982960765,-1.6008113064405,1.71766893529879}
+(4 rows)
+</pre></li>
+<li>Now we use grouping in sparse form to learn different models for different groups. First, we create sample data in sparse matrix form with a grouping column: <pre class="example">
+DROP TABLE IF EXISTS mat_sparse_group;
+CREATE TABLE mat_sparse_group (
+    row_id integer,
+    col_id integer,
+    value double precision,
+    matrix_id integer);
+INSERT INTO mat_sparse_group VALUES
+(1, 1, 1.0, 1),
+(2, 2, 2.0, 1),
+(3, 3, 3.0, 1),
+(4, 4, 4.0, 1),
+(1, 5, 5.0, 1),
+(2, 4, 6.0, 2),
+(3, 2, 7.0, 2),
+(4, 3, 8.0, 2);
+</pre></li>
+<li>Run the PCA function with grouping for a specified proportion of variance and view the results: <pre class="example">
+DROP TABLE IF EXISTS result_table_group, result_table_group_mean;
+SELECT madlib.pca_sparse_train( 'mat_sparse_group',       -- Source table
+                                'result_table_group',     -- Output table
+                                'row_id',           -- Row id of source table
+                                'col_id',           -- Column id of source table
+                                'value',            -- Value of matrix at row_id, col_id
+                                4,                 -- Actual number of rows in the matrix
+                                5,                 -- Actual number of columns in the matrix
+                                0.8,                 -- Proportion of variance
+                                'matrix_id');
+SELECT * FROM result_table_group ORDER BY matrix_id, row_id;
+</pre> Result (with principal components truncated for readability): <pre class="result">
+ row_id |           principal_components             |     std_dev      |    proportion     | matrix_id
+--------+--------------------------------------------+------------------+-------------------+-----------
+      1 | {-0.17805696611353,0.0681313257646983,...  | 2.73659933165925 | 0.544652792875481 |         1
+      2 | {-0.0492086814863993,0.149371585357526,... | 2.06058314533194 | 0.308800210823714 |         1
+      1 | {0,-0.479486114660443,...                  | 4.40325305087975 | 0.520500333693473 |         2
+      2 | {0,0.689230898585949,...                   |  3.7435566458567 | 0.376220573442628 |         2
+(4 rows)
+</pre></li>
+<li>Projection in sparse format with grouping: <pre class="example">
+DROP TABLE IF EXISTS mat_sparse_group_projected;
+SELECT madlib.pca_sparse_project(
+    'mat_sparse_group',
+    'result_table_group',
+    'mat_sparse_group_projected',
+    'row_id',
+    'col_id',
+    'value',
+    4,
+    5
+    );
+SELECT * FROM mat_sparse_group_projected ORDER BY matrix_id, row_id;
+</pre> <pre class="result">
+ row_id |                 row_vec                 | matrix_id
+--------+-----------------------------------------+-----------
+      1 | {-4.00039298524261,-0.626820612715982}  |         1
+      2 | {0.765350785238575,0.951348276645455}   |         1
+      3 | {1.04951017256904,2.22388180170356}     |         1
+      4 | {2.185532027435,-2.54840946563303}      |         1
+      1 | {-0.627846810195469,-0.685031603549092} |         2
+      2 | {-1.64754249747757,-4.7662114622896}    |         2
+      3 | {-3.98424961281857,4.13958468655255}    |         2
+      4 | {6.25963892049161,1.31165837928614}     |         2
+(8 rows)
+</pre></li>
+</ol>
+</dd></dl>
+<p><a class="anchor" id="notes"></a></p><dl class="section user"><dt>Notes</dt><dd><ul>
+<li>This function is intended to operate on the principal component tables generated by <em> pca_train </em> or <em> pca_sparse_train</em>. The MADlib PCA functions generate a table containing the column-means in addition to a table containing the principal components. If this table is not found by the MADlib projection function, it will trigger an error. As long the principal component tables are created with MADlib functions, then the column-means table will be automatically found by the MADlib projection functions.</li>
+<li>Because of the centering step in PCA projection (see "Technical Background"), sparse matrices almost always become dense during the projection process. Thus, this implementation automatically densifies sparse matrix input, and there should be no expected performance improvement in using sparse matrix input over dense matrix input.</li>
+<li>Table names can be optionally schema qualified (current_schemas() is searched if a schema name is not provided) and all table and column names should follow case-sensitivity and quoting rules per the database. (For instance, 'mytable' and 'MyTable' both resolve to the same entity, i.e. 'mytable'. If mixed-case or multi-byte characters are desired for entity names then the string should be double-quoted; in this case the input would be '"MyTable"').</li>
+<li>If the input table for pca_project (pca_sparse_project) contains grouping columns, the same grouping columns must be used in the training function used to generate the principal components too.</li>
+</ul>
+</dd></dl>
+<p><a class="anchor" id="background_project"></a></p><dl class="section user"><dt>Technical Background</dt><dd></dd></dl>
+<p>Given a table containing some principal components \( \boldsymbol P \) and some input data \( \boldsymbol X \), the low-dimensional representation \( {\boldsymbol X}&#39; \) is computed as </p><p class="formulaDsp">
+\begin{align*} {\boldsymbol {\hat{X}}} &amp; = {\boldsymbol X} - \vec{e} \hat{x}^T \\ {\boldsymbol X}&#39; &amp; = {\boldsymbol {\hat {X}}} {\boldsymbol P}. \end{align*}
+</p>
+<p> where \(\hat{x} \) is the column means of \( \boldsymbol X \) and \( \vec{e} \) is the vector of all ones. This step is equivalent to centering the data around the origin.</p>
+<p>The residual table \( \boldsymbol R \) is a measure of how well the low-dimensional representation approximates the true input data, and is computed as </p><p class="formulaDsp">
+\[ {\boldsymbol R} = {\boldsymbol {\hat{X}}} - {\boldsymbol X}&#39; {\boldsymbol P}^T. \]
+</p>
+<p> A residual matrix with entries mostly close to zero indicates a good representation.</p>
+<p>The residual norm \( r \) is simply </p><p class="formulaDsp">
+\[ r = \|{\boldsymbol R}\|_F \]
+</p>
+<p> where \( \|\cdot\|_F \) is the Frobenius norm. The relative residual norm \( r&#39; \) is </p><p class="formulaDsp">
+\[ r&#39; = \frac{ \|{\boldsymbol R}\|_F }{\|{\boldsymbol X}\|_F } \]
+</p>
+<p><a class="anchor" id="related"></a></p><dl class="section user"><dt>Related Topics</dt><dd>File <a class="el" href="pca__project_8sql__in.html" title="Principal Component Analysis Projection. ">pca_project.sql_in</a> documenting the SQL functions</dd></dl>
+<p><a class="el" href="group__grp__pca__train.html">Principal Component Analysis</a> </p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:59 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__pca__train.html b/docs/rc/group__grp__pca__train.html
new file mode 100644
index 0000000..931682c
--- /dev/null
+++ b/docs/rc/group__grp__pca__train.html
@@ -0,0 +1,456 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Principal Component Analysis</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__pca__train.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Principal Component Analysis<div class="ingroups"><a class="el" href="group__grp__unsupervised.html">Unsupervised Learning</a> &raquo; <a class="el" href="group__grp__pca.html">Dimensionality Reduction</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li class="level1">
+<a href="#train">Training Function</a> </li>
+<li class="level1">
+<a href="#examples">Examples</a> </li>
+<li class="level1">
+<a href="#notes">Notes</a> </li>
+<li class="level1">
+<a href="#background_pca">Technical Background</a> </li>
+<li class="level1">
+<a href="#literature">Literature</a> </li>
+<li class="level1">
+<a href="#related">Related Topics</a> </li>
+</ul>
+</div><p>Principal component analysis (PCA) is a mathematical procedure that uses an orthogonal transformation to convert a set of observations of possibly correlated variables into a set of values of linearly uncorrelated variables called principal components. This transformation is defined in such a way that the first principal component has the largest possible variance (i.e., accounts for as much of the variability in the data as possible), and each succeeding component in turn has the highest variance possible under the constraint that it be orthogonal to (i.e., uncorrelated with) the preceding components.</p>
+<p>See the <a class="el" href="group__grp__pca__train.html#background_pca">Technical Background</a> for an introduction to principal component analysis.</p>
+<p><a class="anchor" id="train"></a></p><dl class="section user"><dt>Training Function</dt><dd>The training functions are slightly different for dense and sparse matrices. For dense matrices: <pre class="syntax">
+pca_train( source_table,
+           out_table,
+           row_id,
+           components_param,
+           grouping_cols,
+           lanczos_iter,
+           use_correlation,
+           result_summary_table
+         )
+</pre> For sparse matrices: <pre class="syntax">
+pca_sparse_train( source_table,
+                  out_table,
+                  row_id,
+                  col_id,           -- Sparse matrices only
+                  val_id,           -- Sparse matrices only
+                  row_dim,          -- Sparse matrices only
+                  col_dim,          -- Sparse matrices only
+                  components_param,
+                  grouping_cols,
+                  lanczos_iter,
+                  use_correlation,
+                  result_summary_table
+                )
+</pre></dd></dl>
+<p><b>Arguments</b> </p><dl class="arglist">
+<dt>source_table </dt>
+<dd><p class="startdd">TEXT. Name of the input table containing the data for PCA training. The input data matrix should have \( N \) rows and \( M \) columns, where \( N \) is the number of data points, and \( M \) is the number of features for each data point.</p>
+<p>A dense input table is expected to be in the one of the two standard MADlib dense matrix formats, and a sparse input table should be in the standard MADlib sparse matrix format.</p>
+<p>The two standard MADlib dense matrix formats are: </p><pre>{TABLE|VIEW} <em>source_table</em> (
+    <em>row_id</em> INTEGER,
+    <em>row_vec</em> FLOAT8[],
+)</pre><p> and </p><pre>{TABLE|VIEW} <em>source_table</em> (
+    <em>row_id</em> INTEGER,
+    <em>col1</em> FLOAT8,
+    <em>col2</em> FLOAT8,
+    ...
+)</pre><p>Note that the column name <em>row_id</em> is taken as an input parameter, and should contain a continguous list of row indices (starting at 1) for the input matrix.</p>
+<p>The input table for sparse PCA is expected to be in the form:</p>
+<pre>{TABLE|VIEW} <em>source_table</em> (
+    ...
+    <em>row_id</em> INTEGER,
+    <em>col_id</em> INTEGER,
+    <em>val_id</em> FLOAT8,
+    ...
+)</pre><p>The <em>row_id</em> and <em>col_id</em> columns specify which entries in the matrix are nonzero, and the <em>val_id</em> column defines the values of the nonzero entries.</p>
+<p>Please refer to the <a class="el" href="group__grp__matrix.html">Matrix Operations</a> documentation for more details on defining matrices. </p>
+<p class="enddd"></p>
+</dd>
+<dt>out_table </dt>
+<dd><p class="startdd">TEXT. The name of the table that will contain the output. There are three possible output tables as described below.</p>
+<p>The primary output table (<em>out_table</em>) encodes the principal components with the <em>k</em> highest eigenvalues where <em>k</em> is either directly provided by the user or computed according to the proportion of variance. The table has the following columns: </p><table class="output">
+<tr>
+<th>row_id </th><td>Eigenvalue rank in descending order of the eigenvalue size.  </td></tr>
+<tr>
+<th>principal_components </th><td>Vectors containing elements of the principal components.  </td></tr>
+<tr>
+<th>std_dev </th><td>The standard deviation of each principal component.  </td></tr>
+<tr>
+<th>proportion </th><td>The proportion of variance covered by the principal component.  </td></tr>
+</table>
+<p>The table <em>out_table_mean</em> contains the column means. This table has just one column: </p><table class="output">
+<tr>
+<th>column_mean </th><td>A vector containing the column means for the input matrix.  </td></tr>
+</table>
+<p>The optional table <em>result_summary_table</em> contains information about the performance of the PCA. The contents of this table are described under the <em>result_summary_table</em> argument. </p>
+<p class="enddd"></p>
+</dd>
+<dt>row_id </dt>
+<dd><p class="startdd">TEXT. Column name containing the row IDs in the input source table. The column should be of type INT (or a type that can be cast to INT) and should only contain values between 1 and <em>N</em>. For dense matrix format, it should contain all continguous integers from 1 to <em>N</em> describing the full matrix.</p>
+<p class="enddd"></p>
+</dd>
+<dt>col_id </dt>
+<dd><p class="startdd">TEXT. Column name containing the column IDs in sparse matrix representation. The column should be of type INT (or a type that can be cast to INT) and should only contain values between 1 and <em>M</em>. <em>This parameter applies to sparse matrices only.</em></p>
+<p class="enddd"></p>
+</dd>
+<dt>val_id </dt>
+<dd><p class="startdd">TEXT. Name of 'val_id' column in sparse matrix representation defining the values of the nonzero entries. <em>This parameter applies to sparse matrices only.</em></p>
+<p class="enddd"></p>
+</dd>
+<dt>row_dim </dt>
+<dd><p class="startdd">INTEGER. The actual number of rows in the matrix. That is, if the matrix was transformed into dense format, this is the number of rows it would have. <em>This parameter applies to sparse matrices only.</em></p>
+<p class="enddd"></p>
+</dd>
+<dt>col_dim </dt>
+<dd><p class="startdd">INTEGER. The actual number of columns in the matrix. That is, if the matrix was transformed into dense format, this is the number of columns it would have. <em>This parameter applies to sparse matrices only.</em></p>
+<dl class="section note"><dt>Note</dt><dd>The parameters 'row_dim' and 'col_dim' could actually be inferred from the sparse matrix representation, so they will be removed in the future. For now they are maintained for backward compatability so you must enter them. Making 'row_dim' or 'col_dim' larger than the actual matrix has the effect of padding it with zeros, which is probably not useful.</dd></dl>
+</dd>
+<dt>components_param </dt>
+<dd><p class="startdd">INTEGER or FLOAT. The parameter to control the number of principal components to calculate from the input data. If 'components_param' is INTEGER, it is used to denote the number of principal components (<em>k</em>) to compute. If 'components_param' is FLOAT, the algorithm will return enough principal vectors so that the ratio of the sum of the eigenvalues collected thus far to the sum of all eigenvalues is greater than this parameter (proportion of variance). The value of 'components_param' must be either a positive INTEGER or a FLOAT in the range (0.0,1.0]</p>
+<dl class="section note"><dt>Note</dt><dd>The difference in interpretation between INTEGER and FLOAT was introduced to maintain backward campatibility after the proportion of variance feature was introduced. A special case to be aware of: 'components_param' = 1 (INTEGER) will return 1 principal component, but 'components_param' = 1.0 (FLOAT) will return all principal components, i.e., proportion of variance of 100%. <br />
+ <br />
+Also, please note that the number of principal components (<em>k</em>) is global, even in the case where grouping is used (see 'grouping_cols' below). In the case of grouping, proportion of variance might be a better choice; this could result in different numbers of principal components for different groups.</dd></dl>
+</dd>
+<dt>grouping_cols (optional) </dt>
+<dd><p class="startdd">TEXT, default: NULL. A comma-separated list of column names, with the source data grouped using the combination of all the columns. An independent PCA model will be computed for each combination of the grouping columns.</p>
+<dl class="section note"><dt>Note</dt><dd>Dense matrices can be different sizes for different groups if desired. Sparse matrices cannot be different sizes for different groups, because the 'row_dim' and 'col_dim' parameters used for sparse matrices are global across all groups.</dd></dl>
+</dd>
+<dt>lanczos_iter (optional) </dt>
+<dd><p class="startdd">INTEGER, default: minimum of {<em>k+40</em>, smallest matrix dimension} where <em>k</em> is the number of principal components specified in the parameter 'components_param'. This parameter defines the number of Lanczos iterations for the SVD calculation. The Lanczos iteration number roughly corresponds to the accuracy of the SVD calculation, and a higher number of iterations corresponds to greater accuracy but longer computation time. The number of iterations must be at least as large as the value of <em>k</em>, but no larger than the smallest dimension of the matrix. If the number of iterations is set to zero, then the default number of iterations will be used.</p>
+<dl class="section note"><dt>Note</dt><dd>If both 'lanczos_iter' and proportion of variance (via the 'components_param' parameter) are defined, 'lanczos_iter' will take precedence in determining the number of principal components (i.e. the number of principal components will not be greater than 'lanczos_iter' even if the target proportion had not been reached).</dd></dl>
+</dd>
+<dt>use_correlation (optional) </dt>
+<dd><p class="startdd">BOOLEAN, default FALSE. Whether to use the correlation matrix for calculating the principal components instead of the covariance matrix. Currently <em>use_correlation</em> is a placeholder for forward compatibility, so this value must be set to false.</p>
+<p class="enddd"></p>
+</dd>
+<dt>result_summary_table (optional) </dt>
+<dd><p class="startdd">TEXT, default NULL. Name of the optional summary table. When NULL, no summary table is generated.</p>
+<p class="enddd">This sumary table has the following columns: </p><table class="output">
+<tr>
+<th>rows_used </th><td>INTEGER. Number of data points in the input.  </td></tr>
+<tr>
+<th>exec_time (ms) </th><td>FLOAT8. Number of milliseconds for the PCA calculation to run.  </td></tr>
+<tr>
+<th>iter </th><td>INTEGER. Number of iterations used in the SVD calculation.  </td></tr>
+<tr>
+<th>recon_error </th><td>FLOAT8. The absolute error in the SVD approximation.  </td></tr>
+<tr>
+<th>relative_recon_error </th><td>FLOAT8. The relative error in the SVD approximation.  </td></tr>
+<tr>
+<th>use_correlation </th><td>BOOLEAN. Indicates if the correlation matrix was used.  </td></tr>
+</table>
+</dd>
+</dl>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<ol type="1">
+<li>View online help for the PCA training functions: <pre class="example">
+SELECT madlib.pca_train();
+or
+SELECT madlib.pca_sparse_train();
+</pre></li>
+<li>Create sample data in dense matrix form: <pre class="example">
+DROP TABLE IF EXISTS mat;
+CREATE TABLE mat (id integer,
+                  row_vec double precision[]
+                  );
+INSERT INTO mat VALUES
+(1, '{1,2,3}'),
+(2, '{2,1,2}'),
+(3, '{3,2,1}');
+</pre></li>
+<li>Run the PCA function for a specified number of principal components and view the results: <pre class="example">
+DROP TABLE IF EXISTS result_table, result_table_mean;
+SELECT madlib.pca_train('mat',             -- Source table
+                        'result_table',    -- Output table
+                        'id',              -- Row id of source table
+                         2);               -- Number of principal components
+SELECT * FROM result_table ORDER BY row_id;
+</pre> <pre class="result">
+ row_id |                     principal_components                     |      std_dev      |    proportion
+--------+--------------------------------------------------------------+-------------------+-------------------
+      1 | {0.707106781186547,-6.93889390390723e-18,-0.707106781186548} |  1.41421356237309 | 0.857142857142244
+      2 | {0,1,0}                                                      | 0.577350269189626 | 0.142857142857041
+(2 rows)
+</pre></li>
+<li>Run the PCA function for a specified proportion of variance and view the results: <pre class="example">
+%sql
+DROP TABLE IF EXISTS result_table, result_table_mean;
+SELECT madlib.pca_train('mat',             -- Source table
+                        'result_table',    -- Output table
+                        'id',              -- Row id of source table
+                         0.9);             -- Proportion of variance
+SELECT * FROM result_table ORDER BY row_id;
+</pre> <pre class="result">
+ row_id |                     principal_components                     |      std_dev      |    proportion
+--------+--------------------------------------------------------------+-------------------+-------------------
+      1 | {0.707106781186548,-2.77555756156289e-17,-0.707106781186548} |   1.4142135623731 | 0.857142857142245
+      2 | {-1.11022302462516e-16,-1,0}                                 | 0.577350269189626 | 0.142857142857041
+(2 rows)
+</pre></li>
+<li>Now we use grouping in dense form to learn different models for different groups. First, we create sample data in dense matrix form with a grouping column. Note we actually have different matrix sizes for the different groups, which is allowed for dense: <pre class="example">
+DROP TABLE IF EXISTS mat_group;
+CREATE TABLE mat_group (
+    id integer,
+    row_vec double precision[],
+    matrix_id integer
+);
+INSERT INTO mat_group VALUES
+(1, '{1,2,3}', 1),
+(2, '{2,1,2}', 1),
+(3, '{3,2,1}', 1),
+(4, '{1,2,3,4,5}', 2),
+(5, '{2,5,2,4,1}', 2),
+(6, '{5,4,3,2,1}', 2);
+</pre></li>
+<li>Run the PCA function with grouping for a specified proportion of variance and view the results: <pre class="example">
+DROP TABLE IF EXISTS result_table_group, result_table_group_mean;
+SELECT madlib.pca_train('mat_group',             -- Source table
+                        'result_table_group',    -- Output table
+                        'id',                    -- Row id of source table
+                         0.8,                    -- Proportion of variance
+                        'matrix_id');            -- Grouping column
+SELECT * FROM result_table_group ORDER BY matrix_id, row_id;
+</pre> <pre class="result">
+ row_id |                                      principal_components                                      |     std_dev     |    proportion     | matrix_id
+--------+------------------------------------------------------------------------------------------------+-----------------+-------------------+-----------
+      1 | {0.707106781186548,0,-0.707106781186547}                                                       | 1.4142135623731 | 0.857142857142245 |         1
+      1 | {-0.555378486712784,-0.388303582074091,0.0442457354870796,0.255566375612852,0.688115693174023} | 3.2315220311722 | 0.764102534485173 |         2
+      2 | {0.587384101786277,-0.485138064894743,0.311532046315153,-0.449458074050715,0.347212037159181}  |  1.795531127192 | 0.235897465516047 |         2
+(3 rows)
+</pre></li>
+<li>Now let's look at sparse matrices. Create sample data in sparse matrix form: <pre class="example">
+DROP TABLE IF EXISTS mat_sparse;
+CREATE TABLE mat_sparse (
+    row_id integer,
+    col_id integer,
+    value double precision
+);
+INSERT INTO mat_sparse VALUES
+(1, 1, 1.0),
+(2, 2, 2.0),
+(3, 3, 3.0),
+(4, 4, 4.0),
+(1, 5, 5.0),
+(2, 4, 6.0),
+(3, 2, 7.0),
+(4, 3, 8.0);
+</pre> As an aside, this is what the sparse matrix above looks like when put in dense form: <pre class="example">
+DROP TABLE IF EXISTS mat_dense;
+SELECT madlib.matrix_densify('mat_sparse',
+                            'row=row_id, col=col_id, val=value',
+                            'mat_dense');
+SELECT * FROM mat_dense ORDER BY row_id;
+</pre> <pre class="result">
+ row_id |    value
+--------+-------------
+      1 | {1,0,0,0,5}
+      2 | {0,2,0,6,0}
+      3 | {0,7,3,0,0}
+      4 | {0,0,8,4,0}
+(4 rows)
+</pre></li>
+<li>Run the PCA sparse function for a specified number of principal components and view the results: <pre class="example">DROP TABLE IF EXISTS result_table, result_table_mean;
+SELECT madlib.pca_sparse_train( 'mat_sparse',       -- Source table
+                                'result_table',     -- Output table
+                                'row_id',           -- Row id of source table
+                                'col_id',           -- Column id of source table
+                                'value',            -- Value of matrix at row_id, col_id
+                                4,                  -- Actual number of rows in the matrix
+                                5,                  -- Actual number of columns in the matrix
+                                3);                 -- Number of principal components
+SELECT * FROM result_table ORDER BY row_id;
+</pre> Result (with principal components truncated for readability): <pre class="result">
+ row_id |         principal_components                 |     std_dev      |    proportion
+--------+----------------------------------------------+------------------+-------------------
+      1 | {-0.0876046030186158,-0.0968983772909994,... | 4.21362803829554 | 0.436590030617467
+      2 | {-0.0647272661608605,0.877639526308692,...   | 3.68408023747461 | 0.333748701544697
+      3 | {-0.0780380267884855,0.177956517174911,...   | 3.05606908060098 | 0.229661267837836
+(3 rows)
+</pre></li>
+<li>Now we use grouping in sparse form to learn different models for different groups. First, we create sample data in sparse matrix form with a grouping column: <pre class="example">
+DROP TABLE IF EXISTS mat_sparse_group;
+CREATE TABLE mat_sparse_group (
+    row_id integer,
+    col_id integer,
+    value double precision,
+    matrix_id integer);
+INSERT INTO mat_sparse_group VALUES
+(1, 1, 1.0, 1),
+(2, 2, 2.0, 1),
+(3, 3, 3.0, 1),
+(4, 4, 4.0, 1),
+(1, 5, 5.0, 1),
+(2, 4, 6.0, 2),
+(3, 2, 7.0, 2),
+(4, 3, 8.0, 2);
+</pre></li>
+<li>Run the PCA function with grouping for a specified proportion of variance and view the results: <pre class="example">
+DROP TABLE IF EXISTS result_table_group, result_table_group_mean;
+SELECT madlib.pca_sparse_train( 'mat_sparse_group',   -- Source table
+                                'result_table_group', -- Output table
+                                'row_id',             -- Row id of source table
+                                'col_id',             -- Column id of source table
+                                'value',              -- Value of matrix at row_id, col_id
+                                4,                    -- Actual number of rows in the matrix
+                                5,                    -- Actual number of columns in the matrix
+                                0.8,                  -- Proportion of variance
+                                'matrix_id');
+SELECT * FROM result_table_group ORDER BY matrix_id, row_id;
+</pre> Result (with principal components truncated for readability): <pre class="result">
+ row_id |           principal_components             |     std_dev      |    proportion     | matrix_id
+--------+--------------------------------------------+------------------+-------------------+-----------
+      1 | {-0.17805696611353,0.0681313257646983,...  | 2.73659933165925 | 0.544652792875481 |         1
+      2 | {-0.0492086814863993,0.149371585357526,... | 2.06058314533194 | 0.308800210823714 |         1
+      1 | {0,-0.479486114660443,...                  | 4.40325305087975 | 0.520500333693473 |         2
+      2 | {0,0.689230898585949,...                   |  3.7435566458567 | 0.376220573442628 |         2
+(4 rows)
+</pre></li>
+</ol>
+<p><a class="anchor" id="notes"></a></p><dl class="section user"><dt>Notes</dt><dd></dd></dl>
+<ul>
+<li>Table names can be optionally schema qualified (current_schemas() would be searched if a schema name is not provided) and all table and column names should follow case-sensitivity and quoting rules per the database. (For instance, 'mytable' and 'MyTable' both resolve to the same entity, i.e. 'mytable'. If mixed-case or multi-byte characters are desired for entity names then the string should be double-quoted; in this case the input would be '"MyTable"').</li>
+<li>Because of the centering step in PCA (see <a class="el" href="group__grp__pca__train.html#background_pca">Technical Background</a>), sparse matrices almost always become dense during the training process. Since this implementation automatically densifies sparse matrix input, there should be no expected performance improvement in using sparse matrix input over dense matrix input.</li>
+<li>For the parameter 'components_param', INTEGER and FLOAT are interpreted differently. A special case to be aware of: 'components_param' = 1 (INTEGER) will return 1 principal component, but 'components_param' = 1.0 (FLOAT) will return all principal components, i.e., proportion of variance of 100%.</li>
+<li>If both 'lanczos_iter' and proportion of variance (via the 'components_param' parameter) are defined, 'lanczos_iter' will take precedence in determining the number of principal components (i.e. the number of principal components will not be greater than 'lanczos_iter' even if the target proportion had not been reached).</li>
+</ul>
+<p><a class="anchor" id="background_pca"></a></p><dl class="section user"><dt>Technical Background</dt><dd></dd></dl>
+<p>The PCA implemented here uses a distributed SVD decomposition implementation to recover the principal components (as opposed to the directly computing the eigenvectors of the covariance matrix). Let \( \boldsymbol X \) be the data matrix, and let \( \hat{x} \) be a vector of the column averages of \( \boldsymbol{X}\). PCA computes the matrix \( \hat{\boldsymbol X} \) as </p><p class="formulaDsp">
+\[ \hat{\boldsymbol X} = {\boldsymbol X} - \vec{e} \hat{x}^T \]
+</p>
+<p> where \( \vec{e} \) is the vector of all ones.</p>
+<p>PCA then computes the SVD matrix factorization </p><p class="formulaDsp">
+\[ \hat{\boldsymbol X} = {\boldsymbol U}{\boldsymbol \Sigma}{\boldsymbol V}^T \]
+</p>
+<p> where \( {\boldsymbol \Sigma} \) is a diagonal matrix. The eigenvalues are recovered as the entries of \( {\boldsymbol \Sigma}/(\sqrt{(N-1)} \), and the principal components are the rows of \( {\boldsymbol V} \). The reasoning behind using N − 1 instead of N to calculate the covariance is <a href="https://en.wikipedia.org/wiki/Bessel%27s_correction">Bessel's correction</a>.</p>
+<dl class="section note"><dt>Note</dt><dd>It is important to note that this PCA implementation assumes that the user will use only the principal components that have non-zero eigenvalues. The SVD calculation is done with the Lanczos method, which does not guarantee correctness for singular vectors with zero-valued eigenvalues. Consequently, principal components with zero-valued eigenvalues are not guaranteed to be correct. Generally, this will not be problem unless the user wants to use the principal components for the entire eigenspectrum.</dd></dl>
+<p><a class="anchor" id="literature"></a></p><dl class="section user"><dt>Literature</dt><dd></dd></dl>
+<p>[1] Principal Component Analysis. <a href="http://en.wikipedia.org/wiki/Principal_component_analysis">http://en.wikipedia.org/wiki/Principal_component_analysis</a></p>
+<p>[2] Shlens, Jonathon (2009), A Tutorial on Principal Component Analysis</p>
+<p><a class="anchor" id="related"></a></p><dl class="section user"><dt>Related Topics</dt><dd></dd></dl>
+<p>File <a class="el" href="pca_8sql__in.html" title="Principal Component Analysis. ">pca.sql_in</a> documenting the SQL functions</p>
+<p><a class="el" href="group__grp__pca__project.html">Principal Component Projection</a> </p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:59 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__pivot.html b/docs/rc/group__grp__pivot.html
new file mode 100644
index 0000000..5b47d12
--- /dev/null
+++ b/docs/rc/group__grp__pivot.html
@@ -0,0 +1,661 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Pivot</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__pivot.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Pivot<div class="ingroups"><a class="el" href="group__grp__datatrans.html">Data Types and Transformations</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li>
+<a href="#pivoting">Pivoting</a> </li>
+<li>
+<a href="#notes">Notes</a> </li>
+<li>
+<a href="#examples">Examples</a> </li>
+<li>
+<a href="#literature">Literature</a> </li>
+</ul>
+</div><p><a class="anchor" id="pivoting"></a>The goal of the MADlib pivot function is to provide a data summarization tool that can do basic OLAP type operations on data stored in one table and output the summarized data to a second table.</p>
+<pre class="syntax">
+pivot(
+    source_table,
+    output_table,
+    index,
+    pivot_cols,
+    pivot_values,
+    aggregate_func,
+    fill_value,
+    keep_null,
+    output_col_dictionary,
+    output_type
+    )
+</pre><p> <b>Arguments</b> </p><dl class="arglist">
+<dt>source_table </dt>
+<dd><p class="startdd">VARCHAR. Name of the source table (or view) containing data to pivot.</p>
+<p class="enddd"></p>
+</dd>
+<dt>output_table </dt>
+<dd><p class="startdd">VARCHAR. Name of output table that contains the pivoted data. The output table contains all the columns present in the <em>'index'</em> column list, plus additional columns for each distinct value in <em>'pivot_cols'</em>.</p>
+<dl class="section note"><dt>Note</dt><dd>The names of the columns in the output table are auto-generated. Please see the examples section below to see how this works in practice. The convention used is to concatenate the following strings and separate each by an underscore '_' :<ul>
+<li>name of the value column <em>'pivot_values'</em></li>
+<li>aggregate function</li>
+<li>name of the pivot column <em>'pivot_cols'</em></li>
+<li>values in the pivot column </li>
+</ul>
+</dd></dl>
+</dd>
+<dt>index  </dt>
+<dd><p class="startdd">VARCHAR. Comma-separated columns that will form the index of the output pivot table. By index we mean the values to group by; these are the rows in the output pivot table.</p>
+<p class="enddd"></p>
+</dd>
+<dt>pivot_cols  </dt>
+<dd><p class="startdd">VARCHAR. Comma-separated columns that will form the columns of the output pivot table.</p>
+<p class="enddd"></p>
+</dd>
+<dt>pivot_values  </dt>
+<dd><p class="startdd">VARCHAR. Comma-separated columns that contain the values to be summarized in the output pivot table.</p>
+<p class="enddd"></p>
+</dd>
+<dt>aggregate_func (optional) </dt>
+<dd><p class="startdd">VARCHAR. default: 'AVG'. A comma-separated list of aggregates to be applied to values. These can be PostgreSQL built-in aggregates [1] or UDAs. It is possible to assign a set of aggregates per value column. Please refer to the examples 12-14 below for syntax details.</p>
+<dl class="section note"><dt>Note</dt><dd>Only aggregates with strict transition functions are permitted here. A strict transition function means rows with null values are ignored; the function is not called and the previous state value is retained. If you need some other behavior for null inputs, this should be done prior to calling the pivot function. Aggregates with strict transition functions are described in [2,3].</dd></dl>
+</dd>
+<dt>fill_value (optional) </dt>
+<dd><p class="startdd">VARCHAR. default: NULL. If specified, determines how to fill NULL values resulting from pivot operation. This is a global parameter (not applied per aggregate) and is applied post-aggregation to the output table.</p>
+<p class="enddd"></p>
+</dd>
+<dt>keep_null (optional) </dt>
+<dd><p class="startdd">BOOLEAN. default: FALSE. If TRUE, then pivot columns are created corresponding to NULL categories. If FALSE, then no pivot columns will be created for NULL categories.</p>
+<p class="enddd"></p>
+</dd>
+<dt>output_col_dictionary (optional) </dt>
+<dd><p class="startdd">BOOLEAN. default: FALSE. This parameter is used to handle auto-generated column names that exceed the PostgreSQL limit of 63 bytes (could be a common occurrence). If TRUE, column names will be set as numerical IDs and will create a dictionary table called output_table appended with _dictionary. If FALSE, will auto-generate column names in the usual way unless the limit of 63 bytes will be exceeded. In this case, a dictionary output file will be created and a message given to the user. </p>
+<p class="enddd"></p>
+</dd>
+<dt>output_type (optional) </dt>
+<dd><p class="startdd">VARCHAR. default: 'column'. This parameter controls the output format of the pivoted variables. If 'column', a column is created for each pivot variable. PostgreSQL limits the number of columns in a table (250 - 1600 depending on column types). If the total number of output columns exceeds this limit, then make this parameter either 'array' (to combine the output columns into an array) or 'svec' (to cast the array output to <em>'madlib.svec'</em> type). If you have an 'aggregate_func' that has an array return type, it cannot be combined with 'output_type'='array' or 'svec'.</p>
+<p>A dictionary will be created (<em>output_col_dictionary=TRUE</em>) when 'output_type' is 'array' or 'svec' to define each index into the array. </p>
+<p class="enddd"></p>
+</dd>
+</dl>
+<p><a class="anchor" id="notes"></a></p><dl class="section note"><dt>Note</dt><dd><ul>
+<li>NULLs in the index column are treated like any other value.</li>
+<li>NULLs in the pivot column are ignored unless keep_null is TRUE.</li>
+<li>Only strict transition functions are allowed so NULLs are ignored.</li>
+<li>It is not allowed to set the fill_value parameter without setting the aggregate_func parameter due to possible ambiguity. Set aggregate_func to NULL for the default behavior and use fill_value as desired. Please note that full_value must be of the same type as the output of the aggregate_func (or capable of being cast to the same type by PostgreSQL), or else an error will result.</li>
+<li>It is not allowed to set the output_col_dictionary parameter without setting the keep_null parameter due to possible ambiguity. Set keep_null to NULL for the default behavior and use output_col_dictionary as desired.</li>
+<li>Expressions (instead of column names) are not supported. Create a view with the desired expressions and pass it as the input table (see example 3 below).</li>
+<li>It is allowed to pass a partial mapping for the aggregate_func parameter. The missing value columns will be aggregated using the default function (average).</li>
+</ul>
+</dd></dl>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<ol type="1">
+<li>Create a simple dataset to demonstrate a basic pivot: <pre class="example">
+DROP TABLE IF EXISTS pivset CASCADE; -- View below may depend on table so use CASCADE
+CREATE TABLE pivset(
+                  id INTEGER,
+                  piv INTEGER,
+                  val FLOAT8
+                );
+INSERT INTO pivset VALUES
+    (0, 10, 1),
+    (0, 10, 2),
+    (0, 20, 3),
+    (1, 20, 4),
+    (1, 30, 5),
+    (1, 30, 6),
+    (1, 10, 7),
+    (NULL, 10, 8),
+    (1, NULL, 9),
+    (1, 10, NULL);
+</pre></li>
+<li>Pivot the table: <pre class="example">
+DROP TABLE IF EXISTS pivout;
+SELECT madlib.pivot('pivset', 'pivout', 'id', 'piv', 'val');
+SELECT * FROM pivout ORDER BY id;
+</pre> <pre class="result">
+ id | val_avg_piv_10 | val_avg_piv_20 | val_avg_piv_30
+----+----------------+----------------+----------------
+  0 |            1.5 |              3 |
+  1 |              7 |              4 |            5.5
+    |              8 |                |
+</pre> Here NULL is showing as an empty cell in the output.</li>
+<li>Now let's add some more columns to our data set and create a view: <pre class="example">
+DROP VIEW IF EXISTS pivset_ext;
+CREATE VIEW pivset_ext AS
+    SELECT *,
+    COALESCE(id + (val / 3)::integer, 0) AS id2,
+    COALESCE(100*(val / 3)::integer, 0) AS piv2,
+    COALESCE(val + 10, 0) AS val2
+   FROM pivset;
+SELECT id,id2,piv,piv2,val,val2 FROM pivset_ext
+ORDER BY id,id2,piv,piv2,val,val2;
+</pre> <pre class="result">
+ id | id2 | piv | piv2 | val | val2
+----+-----+-----+------+-----+------
+  0 |   0 |  10 |    0 |   1 |   11
+  0 |   1 |  10 |  100 |   2 |   12
+  0 |   1 |  20 |  100 |   3 |   13
+  1 |   0 |  10 |    0 |     |    0
+  1 |   2 |  20 |  100 |   4 |   14
+  1 |   3 |  10 |  200 |   7 |   17
+  1 |   3 |  30 |  200 |   5 |   15
+  1 |   3 |  30 |  200 |   6 |   16
+  1 |   4 |     |  300 |   9 |   19
+    |   0 |  10 |  300 |   8 |   18
+(10 rows)
+</pre></li>
+<li>Let's use a different aggregate function on the view we just created: <pre class="example">
+DROP TABLE IF EXISTS pivout;
+SELECT madlib.pivot('pivset_ext', 'pivout', 'id', 'piv', 'val', 'sum');
+SELECT * FROM pivout ORDER BY id;
+</pre> <pre class="result">
+ id | val_sum_piv_10 | val_sum_piv_20 | val_sum_piv_30
+----+----------------+----------------+----------------
+  0 |              3 |              3 |
+  1 |              7 |              4 |             11
+    |              8 |                |
+</pre></li>
+<li>Now create a custom aggregate. Note that the aggregate must have a strict transition function: <pre class="example">
+DROP FUNCTION IF EXISTS array_add1 (ANYARRAY, ANYELEMENT) CASCADE;
+CREATE FUNCTION array_add1(ANYARRAY, ANYELEMENT) RETURNS ANYARRAY AS $$
+  SELECT $1 || $2
+$$ LANGUAGE sql STRICT;
+DROP AGGREGATE IF EXISTS array_accum1 (anyelement);
+CREATE AGGREGATE array_accum1 (anyelement) (
+    sfunc = array_add1,
+    stype = anyarray,
+    initcond = '{}'
+);
+DROP TABLE IF EXISTS pivout;
+SELECT madlib.pivot('pivset_ext', 'pivout', 'id', 'piv', 'val', 'array_accum1');
+SELECT * FROM pivout ORDER BY id;
+</pre> <pre class="result">
+  id | val_array_accum1_piv_10 | val_array_accum1_piv_20 | val_array_accum1_piv_30
+----+-------------------------+-------------------------+-------------------------
+  0 | {1,2}                   | {3}                     | {}
+  1 | {7}                     | {4}                     | {5,6}
+    | {8}                     | {}                      | {}
+</pre></li>
+<li>Keep null values in the pivot column: <pre class="example">
+DROP TABLE IF EXISTS pivout;
+SELECT madlib.pivot('pivset_ext', 'pivout', 'id', 'piv', 'val', 'sum', True);
+SELECT * FROM pivout ORDER BY id;
+</pre> <pre class="result">
+ id | val_sum_piv_10 | val_sum_piv_20 | val_sum_piv_30 | val_sum_piv_null
+----+----------------+----------------+----------------+------------------
+  0 |              3 |              3 |                |
+  1 |              7 |              4 |             11 |                9
+    |              8 |                |                |
+</pre></li>
+<li>Fill null results with a value of interest: <pre class="example">
+DROP TABLE IF EXISTS pivout;
+SELECT madlib.pivot('pivset_ext', 'pivout', 'id', 'piv', 'val', 'sum', '111');
+SELECT * FROM pivout ORDER BY id;
+</pre> <pre class="result">
+ id | val_sum_piv_10 | val_sum_piv_20 | val_sum_piv_30
+----+----------------+----------------+----------------
+  0 |              3 |              3 |            111
+  1 |              7 |              4 |             11
+    |              8 |            111 |            111
+</pre></li>
+<li>Use multiple index columns: <pre class="example">
+DROP TABLE IF EXISTS pivout;
+SELECT madlib.pivot('pivset_ext', 'pivout', 'id,id2', 'piv', 'val');
+SELECT * FROM pivout ORDER BY id,id2;
+</pre> <pre class="result">
+ id | id2 | val_avg_piv_10 | val_avg_piv_20 | val_avg_piv_30
+----+-----+----------------+----------------+----------------
+  0 |   0 |              1 |                |
+  0 |   1 |              2 |              3 |
+  1 |   0 |                |                |
+  1 |   2 |                |              4 |
+  1 |   3 |              7 |                |            5.5
+  1 |   4 |                |                |
+    |   0 |              8 |                |
+</pre></li>
+<li>Use multiple pivot columns with columnar output: <pre class="example">
+\x on
+DROP TABLE IF EXISTS pivout;
+SELECT madlib.pivot('pivset_ext', 'pivout', 'id', 'piv, piv2', 'val');
+SELECT * FROM pivout ORDER BY id;
+</pre> <pre class="result">
+-[ RECORD 1 ]-----------+----
+id                      | 0
+val_avg_piv_10_piv2_0   | 1
+val_avg_piv_10_piv2_100 | 2
+val_avg_piv_10_piv2_200 |
+val_avg_piv_10_piv2_300 |
+val_avg_piv_20_piv2_0   |
+val_avg_piv_20_piv2_100 | 3
+val_avg_piv_20_piv2_200 |
+val_avg_piv_20_piv2_300 |
+val_avg_piv_30_piv2_0   |
+val_avg_piv_30_piv2_100 |
+val_avg_piv_30_piv2_200 |
+val_avg_piv_30_piv2_300 |
+-[ RECORD 2 ]-----------+----
+id                      | 1
+val_avg_piv_10_piv2_0   |
+val_avg_piv_10_piv2_100 |
+val_avg_piv_10_piv2_200 | 7
+val_avg_piv_10_piv2_300 |
+val_avg_piv_20_piv2_0   |
+val_avg_piv_20_piv2_100 | 4
+val_avg_piv_20_piv2_200 |
+val_avg_piv_20_piv2_300 |
+val_avg_piv_30_piv2_0   |
+val_avg_piv_30_piv2_100 |
+val_avg_piv_30_piv2_200 | 5.5
+val_avg_piv_30_piv2_300 |
+...
+</pre></li>
+<li>Use multiple pivot columns (same as above) with an array output: <pre class="example">
+DROP TABLE IF EXISTS pivout, pivout_dictionary;
+SELECT madlib.pivot('pivset_ext', 'pivout', 'id', 'piv, piv2', 'val',
+                    NULL, NULL, FALSE, FALSE, 'array');
+\x off
+SELECT * FROM pivout ORDER BY id;
+</pre> <pre class="result">
+   id   |                          val_avg
+--------+------------------------------------------------------------
+      0 | {1,2,NULL,NULL,NULL,3,NULL,NULL,NULL,NULL,NULL,NULL}
+      1 | {NULL,NULL,7,NULL,NULL,4,NULL,NULL,NULL,NULL,5.5,NULL}
+ [NULL] | {NULL,NULL,NULL,8,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL}
+</pre> <pre class="example">
+-- Use the dictionary to understand what each index of an array corresponds to
+SELECT * FROM pivout_dictionary;
+</pre> <pre class="result">
+ __pivot_cid__ | pval | agg | piv | piv2 |         col_name
+---------------+------+-----+-----+------+---------------------------
+ 1             | val  | avg |  10 |    0 | "val_avg_piv_10_piv2_0"
+ 2             | val  | avg |  10 |  100 | "val_avg_piv_10_piv2_100"
+ 3             | val  | avg |  10 |  200 | "val_avg_piv_10_piv2_200"
+ 4             | val  | avg |  10 |  300 | "val_avg_piv_10_piv2_300"
+ 5             | val  | avg |  20 |    0 | "val_avg_piv_20_piv2_0"
+ 6             | val  | avg |  20 |  100 | "val_avg_piv_20_piv2_100"
+ 7             | val  | avg |  20 |  200 | "val_avg_piv_20_piv2_200"
+ 8             | val  | avg |  20 |  300 | "val_avg_piv_20_piv2_300"
+ 9             | val  | avg |  30 |    0 | "val_avg_piv_30_piv2_0"
+ 10            | val  | avg |  30 |  100 | "val_avg_piv_30_piv2_100"
+ 11            | val  | avg |  30 |  200 | "val_avg_piv_30_piv2_200"
+ 12            | val  | avg |  30 |  300 | "val_avg_piv_30_piv2_300"
+</pre></li>
+<li>Use multiple value columns: <pre class="example">
+DROP TABLE IF EXISTS pivout;
+SELECT madlib.pivot('pivset_ext', 'pivout', 'id', 'piv', 'val, val2');
+\x on
+SELECT * FROM pivout ORDER BY id;
+</pre> <pre class="result">
+-[ RECORD 1 ]---+-----
+id              | 0
+val_avg_piv_10  | 1.5
+val_avg_piv_20  | 3
+val_avg_piv_30  |
+val2_avg_piv_10 | 11.5
+val2_avg_piv_20 | 13
+val2_avg_piv_30 |
+-[ RECORD 2 ]---+-----
+id              | 1
+val_avg_piv_10  | 7
+val_avg_piv_20  | 4
+val_avg_piv_30  | 5.5
+val2_avg_piv_10 | 8.5
+val2_avg_piv_20 | 14
+val2_avg_piv_30 | 15.5
+...
+</pre></li>
+<li>Use multiple aggregate functions on the same value column (cross product): <pre class="example">
+DROP TABLE IF EXISTS pivout;
+SELECT madlib.pivot('pivset_ext', 'pivout', 'id', 'piv', 'val', 'avg, sum');
+\x on
+SELECT * FROM pivout ORDER BY id;
+</pre> <pre class="result">
+-[ RECORD 1 ]--+----
+id             | 0
+val_avg_piv_10 | 1.5
+val_avg_piv_20 | 3
+val_avg_piv_30 |
+val_sum_piv_10 | 3
+val_sum_piv_20 | 3
+val_sum_piv_30 |
+-[ RECORD 2 ]--+----
+id             | 1
+val_avg_piv_10 | 7
+val_avg_piv_20 | 4
+val_avg_piv_30 | 5.5
+val_sum_piv_10 | 7
+val_sum_piv_20 | 4
+val_sum_piv_30 | 11
+...
+</pre></li>
+<li>Use different aggregate functions for different value columns: <pre class="example">
+DROP TABLE IF EXISTS pivout;
+SELECT madlib.pivot('pivset_ext', 'pivout', 'id', 'piv', 'val, val2',
+    'val=avg, val2=sum');
+\x on
+SELECT * FROM pivout ORDER BY id;
+</pre> <pre class="result">
+-[ RECORD 1 ]---+----
+id              | 0
+val_avg_piv_10  | 1.5
+val_avg_piv_20  | 3
+val_avg_piv_30  |
+val2_sum_piv_10 | 23
+val2_sum_piv_20 | 13
+val2_sum_piv_30 |
+-[ RECORD 2 ]---+----
+id              | 1
+val_avg_piv_10  | 7
+val_avg_piv_20  | 4
+val_avg_piv_30  | 5.5
+val2_sum_piv_10 | 17
+val2_sum_piv_20 | 14
+val2_sum_piv_30 | 31
+...
+</pre></li>
+<li>Use multiple aggregate functions for different value columns: <pre class="example">
+DROP TABLE IF EXISTS pivout;
+SELECT madlib.pivot('pivset_ext', 'pivout', 'id', 'piv', 'val, val2',
+    'val=avg, val2=[avg,sum]');
+\x on
+SELECT * FROM pivout ORDER BY id;
+</pre> <pre class="result">
+-[ RECORD 1 ]---+-----
+id              | 0
+val_avg_piv_10  | 1.5
+val_avg_piv_20  | 3
+val_avg_piv_30  |
+val2_avg_piv_10 | 11.5
+val2_avg_piv_20 | 13
+val2_avg_piv_30 |
+val2_sum_piv_10 | 23
+val2_sum_piv_20 | 13
+val2_sum_piv_30 |
+-[ RECORD 2 ]---+-----
+id              | 1
+val_avg_piv_10  | 7
+val_avg_piv_20  | 4
+val_avg_piv_30  | 5.5
+val2_avg_piv_10 | 8.5
+val2_avg_piv_20 | 14
+val2_avg_piv_30 | 15.5
+val2_sum_piv_10 | 17
+val2_sum_piv_20 | 14
+val2_sum_piv_30 | 31
+...
+</pre></li>
+<li>Combine all of the options: <pre class="example">
+DROP TABLE IF EXISTS pivout;
+SELECT madlib.pivot('pivset_ext', 'pivout', 'id, id2', 'piv, piv2', 'val, val2',
+    'val=avg, val2=[avg,sum]', '111', True);
+\x on
+SELECT * FROM pivout ORDER BY id,id2;
+</pre> <pre class="result">
+-[ RECORD 1 ]--------------+-----
+id                         | 0
+id2                        | 0
+val_avg_piv_null_piv2_0    | 111
+val_avg_piv_null_piv2_100  | 111
+val_avg_piv_null_piv2_200  | 111
+val_avg_piv_null_piv2_300  | 111
+val_avg_piv_10_piv2_0      | 1
+val_avg_piv_10_piv2_100    | 111
+val_avg_piv_10_piv2_200    | 111
+val_avg_piv_10_piv2_300    | 111
+val_avg_piv_20_piv2_0      | 111
+val_avg_piv_20_piv2_100    | 111
+val_avg_piv_20_piv2_200    | 111
+val_avg_piv_20_piv2_300    | 111
+val_avg_piv_30_piv2_0      | 111
+val_avg_piv_30_piv2_100    | 111
+val_avg_piv_30_piv2_200    | 111
+val_avg_piv_30_piv2_300    | 111
+val2_avg_piv_null_piv2_0   | 111
+val2_avg_piv_null_piv2_100 | 111
+val2_avg_piv_null_piv2_200 | 111
+val2_avg_piv_null_piv2_300 | 111
+val2_avg_piv_10_piv2_0     | 11
+val2_avg_piv_10_piv2_100   | 111
+...
+-[ RECORD 2 ]--------------+-----
+id                         | 0
+id2                        | 1
+val_avg_piv_null_piv2_0    | 111
+val_avg_piv_null_piv2_100  | 111
+val_avg_piv_null_piv2_200  | 111
+val_avg_piv_null_piv2_300  | 111
+val_avg_piv_10_piv2_0      | 111
+val_avg_piv_10_piv2_100    | 2
+val_avg_piv_10_piv2_200    | 111
+val_avg_piv_10_piv2_300    | 111
+val_avg_piv_20_piv2_0      | 111
+val_avg_piv_20_piv2_100    | 3
+val_avg_piv_20_piv2_200    | 111
+val_avg_piv_20_piv2_300    | 111
+val_avg_piv_30_piv2_0      | 111
+val_avg_piv_30_piv2_100    | 111
+val_avg_piv_30_piv2_200    | 111
+val_avg_piv_30_piv2_300    | 111
+val2_avg_piv_null_piv2_0   | 111
+val2_avg_piv_null_piv2_100 | 111
+val2_avg_piv_null_piv2_200 | 111
+val2_avg_piv_null_piv2_300 | 111
+...
+</pre></li>
+<li>Create a dictionary for output column names: <pre class="example">
+DROP TABLE IF EXISTS pivout, pivout_dictionary;
+SELECT madlib.pivot('pivset_ext', 'pivout', 'id, id2', 'piv, piv2', 'val, val2',
+    'val=avg, val2=[avg,sum]', '111', True, True);
+\x off
+SELECT * FROM pivout_dictionary order by __pivot_cid__;
+</pre> <pre class="result">
+__pivot_cid__ | pval | agg |  piv   | piv2 |           col_name
+---------------+------+-----+--------+------+------------------------------
+ __p_1__       | val  | avg | [NULL] |    0 | "val_avg_piv_null_piv2_0"
+ __p_2__       | val  | avg | [NULL] |  100 | "val_avg_piv_null_piv2_100"
+ __p_3__       | val  | avg | [NULL] |  200 | "val_avg_piv_null_piv2_200"
+ __p_4__       | val  | avg | [NULL] |  300 | "val_avg_piv_null_piv2_300"
+ __p_5__       | val  | avg |     10 |    0 | "val_avg_piv_10_piv2_0"
+ __p_6__       | val  | avg |     10 |  100 | "val_avg_piv_10_piv2_100"
+ __p_7__       | val  | avg |     10 |  200 | "val_avg_piv_10_piv2_200"
+ __p_8__       | val  | avg |     10 |  300 | "val_avg_piv_10_piv2_300"
+ __p_9__       | val  | avg |     20 |    0 | "val_avg_piv_20_piv2_0"
+ __p_10__      | val  | avg |     20 |  100 | "val_avg_piv_20_piv2_100"
+ __p_11__      | val  | avg |     20 |  200 | "val_avg_piv_20_piv2_200"
+ __p_12__      | val  | avg |     20 |  300 | "val_avg_piv_20_piv2_300"
+ __p_13__      | val  | avg |     30 |    0 | "val_avg_piv_30_piv2_0"
+ __p_14__      | val  | avg |     30 |  100 | "val_avg_piv_30_piv2_100"
+ __p_15__      | val  | avg |     30 |  200 | "val_avg_piv_30_piv2_200"
+ __p_16__      | val  | avg |     30 |  300 | "val_avg_piv_30_piv2_300"
+ __p_17__      | val2 | avg | [NULL] |    0 | "val2_avg_piv_null_piv2_0"
+ __p_18__      | val2 | avg | [NULL] |  100 | "val2_avg_piv_null_piv2_100"
+ __p_19__      | val2 | avg | [NULL] |  200 | "val2_avg_piv_null_piv2_200"
+ __p_20__      | val2 | avg | [NULL] |  300 | "val2_avg_piv_null_piv2_300"
+ __p_21__      | val2 | avg |     10 |    0 | "val2_avg_piv_10_piv2_0"
+...
+(48 rows)
+</pre> <pre class="example">
+\x on
+SELECT * FROM pivout ORDER BY id,id2;
+</pre> <pre class="result">
+-[ RECORD 1 ]----
+id       | 0
+id2      | 0
+__p_1__  | 111
+__p_2__  | 111
+__p_3__  | 111
+__p_4__  | 111
+__p_5__  | 1
+__p_6__  | 111
+__p_7__  | 111
+__p_8__  | 111
+__p_9__  | 111
+__p_10__ | 111
+__p_11__ | 111
+__p_12__ | 111
+__p_13__ | 111
+...
+-[ RECORD 2 ]----
+id       | 0
+id2      | 1
+__p_1__  | 111
+__p_2__  | 111
+__p_3__  | 111
+__p_4__  | 111
+__p_5__  | 111
+__p_6__  | 2
+__p_7__  | 111
+__p_8__  | 111
+__p_9__  | 111
+__p_10__ | 3
+__p_11__ | 111
+__p_12__ | 111
+__p_13__ | 111
+...
+-[ RECORD 3 ]----
+id       | 1
+id2      | 0
+__p_1__  | 111
+__p_2__  | 111
+__p_3__  | 111
+__p_4__  | 111
+__p_5__  | 111
+__p_6__  | 111
+__p_7__  | 111
+__p_8__  | 111
+__p_9__  | 111
+__p_10__ | 111
+__p_11__ | 111
+__p_12__ | 111
+__p_13__ | 111
+...
+</pre></li>
+</ol>
+<p><a class="anchor" id="literature"></a></p><dl class="section user"><dt>Literature</dt><dd></dd></dl>
+<p>NOTE: The following links refer to documentation resources for the current PostgreSQL database version. Depending upon your database platform version, you may need to change "current" references in the links to your database version.</p>
+<p>If your database platform uses the Greenplum Database (or related variants), please check with the project community and/or your database vendor to identify the PostgreSQL version it is based on.</p>
+<p><a class="anchor" id="svm-lit-1"></a>[1] <a href="https://www.postgresql.org/docs/current/static/functions-aggregate.html">https://www.postgresql.org/docs/current/static/functions-aggregate.html</a></p>
+<p>[2] <a href="https://www.postgresql.org/docs/current/static/sql-createaggregate.html">https://www.postgresql.org/docs/current/static/sql-createaggregate.html</a></p>
+<p>[3] <a href="https://www.postgresql.org/docs/current/static/xaggr.html">https://www.postgresql.org/docs/current/static/xaggr.html</a> </p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__pmml.html b/docs/rc/group__grp__pmml.html
new file mode 100644
index 0000000..cc93b0d
--- /dev/null
+++ b/docs/rc/group__grp__pmml.html
@@ -0,0 +1,332 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: PMML Export</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__pmml.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">PMML Export<div class="ingroups"><a class="el" href="group__grp__other__functions.html">Utilities</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b><ul>
+<li class="level1">
+<a href="#function">PMML Export Function</a> </li>
+<li class="level1">
+<a href="#examples">Examples</a> </li>
+<li class="level1">
+<a href="#background">Background</a> </li>
+<li class="level1">
+<a href="#related">Related Topics</a> </li>
+</ul>
+</div><p><a class="anchor" id="function"></a></p><dl class="section user"><dt>PMML Export Function</dt><dd>The PMML export function in MADlib has the following syntax: <pre class="syntax">
+pmml ( model_table,
+       name_spec
+     )
+</pre> <b>Arguments</b> <dl class="arglist">
+<dt>model_table </dt>
+<dd><p class="startdd">VARCHAR. The name of the table containing the model.</p>
+<p class="enddd"></p>
+</dd>
+<dt>name_spec (optional) </dt>
+<dd>VARCHAR or VARCHAR[]. Names to be used in the Data Dictionary of the PMML. See <a class="el" href="table__to__pmml_8sql__in.html#a9635b6989d9f972497b6b4164b77aa0a" title="Given the model constructed from a data mining algorithm, this function converts the model into PMML ...">pmml()</a> for detailed explanation. </dd>
+</dl>
+</dd></dl>
+<p><b>Output</b> XML. The output of this function is a standard PMML document, some examples of which are covered in the next section. </p>
+<dl class="section note"><dt>Note</dt><dd>In PostgreSQL, users may be required to install their database with XML support in order to use this function.</dd></dl>
+<p>Usually the user wants to export the resulting PMML contents into a PMML file so that external softwares can use it. The following method can be used (Note: the user needs to use unaligned table output mode for psql with '-A' flag. And inside psql client, both '\t' and '\o' should be used):</p>
+<pre class="example">
+&gt; # under bash
+&gt; psql -A my_database
+# -- in psql now
+# \t
+# \o test.pmml -- export to a file
+# select madlib.pmml('tree_out');
+# \o
+# \t
+</pre><p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd><ol type="1">
+<li>Create the training data table. <pre class="example">
+CREATE TABLE patients( id integer NOT NULL,
+                       second_attack integer,
+                       treatment integer,
+                       trait_anxiety integer);
+INSERT INTO patients(id, second_attack, treatment, trait_anxiety) VALUES
+( 1, 1, 1, 70),
+( 3, 1, 1, 50),
+( 5, 1, 0, 40),
+( 7, 1, 0, 75),
+( 9, 1, 0, 70),
+(11, 0, 1, 65),
+(13, 0, 1, 45),
+(15, 0, 1, 40),
+(17, 0, 0, 55),
+(19, 0, 0, 50),
+( 2, 1, 1, 80),
+( 4, 1, 0, 60),
+( 6, 1, 0, 65),
+( 8, 1, 0, 80),
+(10, 1, 0, 60),
+(12, 0, 1, 50),
+(14, 0, 1, 35),
+(16, 0, 1, 50),
+(18, 0, 0, 45),
+(20, 0, 0, 60);
+</pre></li>
+<li>Train a regression model using <a class="el" href="logistic_8sql__in.html#a74210a7ef513dfcbdfdd9f3b37bfe428" title="Compute logistic-regression coefficients and diagnostic statistics. ">logregr_train()</a>. <pre class="example">
+SELECT madlib.logregr_train(
+        'patients',
+        'patients_logregr',
+        'second_attack',
+        'ARRAY[1, treatment, trait_anxiety]');
+</pre></li>
+<li>View the PMML export for this model. <pre class="example">
+SELECT madlib.pmml('patients_logregr');
+</pre> Result: <pre class="result">
+&lt;?xml version="1.0" standalone="yes"?&gt;
+&lt;PMML version="4.1" xmlns="http://www.dmg.org/pmml-v4-1.html"&gt;
+  &lt;Header copyright="redacted for this example"&gt;
+    &lt;Extension extender="MADlib" name="user" value="gpadmin"&gt;
+    &lt;Application name="MADlib" version="1.7"&gt;
+    &lt;Timestamp&gt;
+      2014-06-13 17:30:14.527899 PDT
+    &lt;/Timestamp&gt;
+  &lt;/Header&gt;
+  &lt;DataDictionary numberoffields="4"&gt;
+    &lt;DataField datatype="boolean" name="second_attack_pmml_prediction" optype="categorical"&gt;
+    &lt;DataField datatype="double" name="1" optype="continuous"&gt;
+    &lt;DataField datatype="double" name="treatment" optype="continuous"&gt;
+    &lt;DataField datatype="double" name="trait_anxiety" optype="continuous"&gt;
+  &lt;/DataDictionary&gt;
+  &lt;RegressionModel functionname="classification" normalizationmethod="softmax"&gt;
+    &lt;MiningSchema&gt;
+      &lt;MiningField name="second_attack_pmml_prediction" usagetype="predicted"&gt;
+      &lt;MiningField name="1"&gt;
+      &lt;MiningField name="treatment"&gt;
+      &lt;MiningField name="trait_anxiety"&gt;
+    &lt;/MiningSchema&gt;
+    &lt;RegressionTable intercept="0.0" targetcategory="True"&gt;
+      &lt;NumericPredictor coefficient="-6.36346994178" name="1"&gt;
+      &lt;NumericPredictor coefficient="-1.02410605239" name="treatment"&gt;
+      &lt;NumericPredictor coefficient="0.119044916669" name="trait_anxiety"&gt;
+    &lt;/RegressionTable&gt;
+    &lt;RegressionTable intercept="0.0" targetcategory="False"&gt;
+  &lt;/RegressionModel&gt;
+&lt;/PMML&gt;
+</pre></li>
+</ol>
+</dd></dl>
+<p>Alternatively, the above can also be invoked as below if custom names are needed for fields in the Data Dictionary: </p><pre class="example">
+SELECT madlib.pmml('patients_logregr',
+                   'out_attack~1+in_trait_anxiety+in_treatment');
+</pre><p><b>Note:</b> If the second argument of 'pmml' function is not specified, a default suffix "_pmml_prediction" will be automatically append to the column name to be predicted. This can help avoid name conflicts.</p>
+<p>The following example demonstrates grouping columns in the model table for the same dataset as the previous example.</p>
+<ol type="1">
+<li>Train a different regression model with 'treatment' as the grouping column. <pre class="example">
+SELECT madlib.logregr_train(
+        'patients',
+        'patients_logregr_grouping',
+        'second_attack',
+        'ARRAY[1, trait_anxiety]',
+        'treatment');
+</pre></li>
+<li>View the PMML export for this model. <pre class="example">
+SELECT madlib.pmml('patients_logregr_grouping',
+                   ARRAY['second_attack','1','in_trait_anxiety']);
+</pre> Result: <pre class="result">
+&lt;?xml version="1.0" standalone="yes"?&gt;
+ &lt;PMML version="4.1" xmlns="http://www.dmg.org/pmml-v4-1.html"&gt;
+   &lt;Header copyright="redacted for this example"&gt;
+     &lt;Extension extender="MADlib" name="user" value="gpadmin"&gt;
+     &lt;Application name="MADlib" version="1.7"&gt;
+     &lt;Timestamp&gt;
+       2014-06-13 17:37:55.786307 PDT
+     &lt;/Timestamp&gt;
+   &lt;/Header&gt;
+   &lt;DataDictionary numberoffields="4"&gt;
+     &lt;DataField datatype="boolean" name="second_attack" optype="categorical"&gt;
+     &lt;DataField datatype="double" name="1" optype="continuous"&gt;
+     &lt;DataField datatype="double" name="in_trait_anxiety" optype="continuous"&gt;
+     &lt;DataField datatype="string" name="treatment" optype="categorical"&gt;
+   &lt;/DataDictionary&gt;
+   &lt;MiningModel functionname="classification"&gt;
+     &lt;MiningSchema&gt;
+       &lt;MiningField name="second_attack" usagetype="predicted"&gt;
+       &lt;MiningField name="1"&gt;
+       &lt;MiningField name="in_trait_anxiety"&gt;
+       &lt;MiningField name="treatment"&gt;
+     &lt;/MiningSchema&gt;
+     &lt;Segmentation multiplemodelmethod="selectFirst"&gt;
+       &lt;Segment&gt;
+         &lt;SimplePredicate field="treatment" operator="equal" value="1"&gt;
+         &lt;RegressionModel functionname="classification" normalizationmethod="softmax"&gt;
+           &lt;MiningSchema&gt;
+             &lt;MiningField name="second_attack" usagetype="predicted"&gt;
+             &lt;MiningField name="1"&gt;
+             &lt;MiningField name="in_trait_anxiety"&gt;
+           &lt;/MiningSchema&gt;
+           &lt;RegressionTable intercept="0.0" targetcategory="True"&gt;
+             &lt;NumericPredictor coefficient="-8.02068430057" name="1"&gt;
+             &lt;NumericPredictor coefficient="0.130090428526" name="in_trait_anxiety"&gt;
+           &lt;/RegressionTable&gt;
+           &lt;RegressionTable intercept="0.0" targetcategory="False"&gt;
+         &lt;/RegressionModel&gt;
+       &lt;/Segment&gt;
+       &lt;Segment&gt;
+         &lt;SimplePredicate field="treatment" operator="equal" value="0"&gt;
+         &lt;RegressionModel functionname="classification" normalizationmethod="softmax"&gt;
+           &lt;MiningSchema&gt;
+             &lt;MiningField name="second_attack" usagetype="predicted"&gt;
+             &lt;MiningField name="1"&gt;
+             &lt;MiningField name="in_trait_anxiety"&gt;
+           &lt;/MiningSchema&gt;
+           &lt;RegressionTable intercept="0.0" targetcategory="True"&gt;
+             &lt;NumericPredictor coefficient="-5.75043192191" name="1"&gt;
+             &lt;NumericPredictor coefficient="0.108282446319" name="in_trait_anxiety"&gt;
+           &lt;/RegressionTable&gt;
+           &lt;RegressionTable intercept="0.0" targetcategory="False"&gt;
+         &lt;/RegressionModel&gt;
+       &lt;/Segment&gt;
+     &lt;/Segmentation&gt;
+   &lt;/MiningModel&gt;
+ &lt;/PMML&gt;
+</pre></li>
+</ol>
+<p><b>Note:</b> MADlib currently supports PMML export for Linear Regression, Logistic Regression, Generalized Linear Regression Model, Multinomial Logistic Regression, Ordinal Linear Regression, Decision Tree and Random Forests.</p>
+<p>In Ordinal Regression, the signs of feature coefficients will be different in PMML export and in the default output model table from ordinal(). This is due to the difference of model settings.</p>
+<p><a class="anchor" id="background"></a></p><dl class="section user"><dt>Background</dt><dd>The Predictive Model Markup Language (PMML) is an XML-based file format that provides a way for applications to describe and exchange models produced by data mining and machine learning algorithms. A PMML file comprises the following components:<ul>
+<li>Header: Contains general information of the model, such as copyright information and model description.</li>
+<li>Data Dictionary: Contains definitions of fields used in the model.</li>
+<li>Data Transformations: Contains transformations for mapping user data into a form that can be used by the mining model.</li>
+<li>Model: Contains definitions of the data mining model, which includes attributes such as the model name, function name, and algorithm name.</li>
+<li>Mining Schema: Contains specific information for the fields used in the model, which includes the name and usage type.</li>
+<li>Targets: Allows for post-processing of the predicted value.</li>
+<li>Output: Allows for naming of output fields expected from the model.</li>
+</ul>
+</dd></dl>
+<p>MADlib follows the PMML v4.1 standard. For more details about PMML, see <a href="http://www.dmg.org/v4-1/GeneralStructure.html">http://www.dmg.org/v4-1/GeneralStructure.html</a>.</p>
+<p><a class="anchor" id="related"></a></p><dl class="section user"><dt>Related Topics</dt><dd></dd></dl>
+<p>File <a class="el" href="table__to__pmml_8sql__in.html">table_to_pmml.sql_in</a> documenting the PMML export functions.</p>
+<p><a class="el" href="group__grp__linreg.html">Linear Regression</a></p>
+<p><a class="el" href="group__grp__logreg.html">Logistic Regression</a></p>
+<p><a class="el" href="group__grp__glm.html">Generalized Linear Models</a></p>
+<p><a class="el" href="group__grp__ordinal.html">Ordinal Regression</a></p>
+<p><a class="el" href="group__grp__multinom.html">Multinomial Regression</a></p>
+<p><a class="el" href="group__grp__decision__tree.html">Decision Tree</a></p>
+<p><a class="el" href="group__grp__random__forest.html">Random Forest</a> </p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:59 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__pred.html b/docs/rc/group__grp__pred.html
new file mode 100644
index 0000000..65beca0
--- /dev/null
+++ b/docs/rc/group__grp__pred.html
@@ -0,0 +1,365 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Prediction Metrics</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__pred.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Prediction Metrics<div class="ingroups"><a class="el" href="group__grp__mdl.html">Model Selection</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li>
+<a href="#list">List of Prediction Metric Functions</a> </li>
+<li>
+<a href="#specs">Function Specific Details</a> </li>
+<li>
+<a href="#examples">Examples</a> </li>
+<li>
+<a href="#literature">Literature</a> </li>
+<li>
+<a href="#related">Related Topics</a> </li>
+</ul>
+</div><p>This module provides a set of metrics to evaluate the quality of predictions of a model. A typical function will take a set of "prediction" and "observation" values and use them to calculate the desired metric, unless noted otherwise. Grouping is supported for all functions (except confusion matrix).</p>
+<p><a class="anchor" id="list"></a></p><dl class="section user"><dt>Prediction Metrics Functions</dt><dd><table class="output">
+<tr>
+<th>mean_abs_error(table_in, table_out, prediction_col, observed_col, grouping_cols)</th><td>Mean absolute error  </td></tr>
+<tr>
+<th>mean_abs_perc_error(table_in, table_out, prediction_col, observed_col, grouping_cols)</th><td>Mean absolute percentage error  </td></tr>
+<tr>
+<th>mean_perc_error(table_in, table_out, prediction_col, observed_col, grouping_cols)</th><td>Mean percentage error  </td></tr>
+<tr>
+<th>mean_squared_error(table_in, table_out, prediction_col, observed_col, grouping_cols)</th><td>Mean squared error </td></tr>
+<tr>
+<th>r2_score(table_in, table_out, prediction_col, observed_col, grouping_cols)</th><td>R-squared  </td></tr>
+<tr>
+<th>adjusted_r2_score(table_in, table_out, prediction_col, observed_col, num_predictors, training_size, grouping_cols)</th><td>Adjusted R-squared  </td></tr>
+<tr>
+<th>binary_classifier(table_in, table_out, prediction_col, observed_col, grouping_cols)</th><td>Collection of prediction metrics related to binary classification </td></tr>
+<tr>
+<th>area_under_roc(table_in, table_out, prediction_col, observed_col, grouping_cols)</th><td>Area under the ROC curve (in binary classification)  </td></tr>
+<tr>
+<th>confusion_matrix(table_in, table_out, prediction_col, observed_col, grouping_cols)</th><td>Confusion matrix for a multi-class classifier  </td></tr>
+</table>
+</dd></dl>
+<p><b>Arguments</b> </p><dl class="arglist">
+<dt>table_in </dt>
+<dd>TEXT. Name of the input table. </dd>
+<dt>table_out </dt>
+<dd>TEXT. Name of the output table. For consistency, a table is created for all metric outputs even when grouping is not used, which may mean there is only a single value in the output table in some cases.  </dd>
+<dt>prediction_col </dt>
+<dd>TEXT. Name of the column of predicted values from input table. </dd>
+<dt>observed_col </dt>
+<dd>TEXT. Name of the column of observed values from input table. </dd>
+<dt>num_predictors (for adjusted R-squared score only) </dt>
+<dd>INTEGER. The number of parameters in the predicting model, not counting the constant term. </dd>
+<dt>training_size (for adjusted R-squared score only) </dt>
+<dd>INTEGER. The number of rows used for training, excluding any NULL rows. </dd>
+<dt>grouping_cols (optional) </dt>
+<dd>TEXT, default: NULL. Name of the column of grouping values from input table. </dd>
+</dl>
+<p><a class="anchor" id="specs"></a></p><dl class="section user"><dt>Function Specific Details</dt><dd></dd></dl>
+<p><b>R-squared Score</b></p>
+<p>This function returns the coefficient of determination (R2) between the predicted and observed values. An R2 of 1 indicates that the regression line perfectly fits the data, while an R2 of 0 indicates that the line does not fit the data at all. Negative values of R2 may occur when fitting non-linear functions to data. Please refer to reference <a href="#r2">[1]</a> for more details.</p>
+<p><b>Adjusted R-squared Score</b></p>
+<p>This function returns the adjusted R2 score in addition to the R-squared score described above. Adjusted R2 score is used to counter the problem of the R2 automatically increasing when extra explanatory variables are added to the model. It takes two additional parameters describing the degrees of freedom of the model (num_predictors) and the size of the training set over which it was developed (training_size):</p>
+<ul>
+<li>num_predictors: Indicates the number of parameters the model has other than the constant term. For example, if it is set to '3' the model may take the following form as an example: 7 + 5x + 39y + 0.91z.</li>
+<li>training_size: Indicates the number of rows in the training set (excluding any NULL rows).</li>
+</ul>
+<p>Neither of these arguments can be deduced from the predicted values and the test data alone which is why they are explicit inputs. Please refer to reference <a href="#r2">[1]</a> for more details.</p>
+<p><a class="anchor" id="bc"></a><b>Binary Classification</b></p>
+<p>This function returns an output table with a number of metrics commonly used in binary classification.</p>
+<p>The definitions of the various metrics are as follows:</p>
+<ul>
+<li>\(\textit{tp}\) is the count of correctly-classified positives.</li>
+<li>\(\textit{tn}\) is the count of correctly-classified negatives.</li>
+<li>\(\textit{fp}\) is the count of misclassified negatives.</li>
+<li>\(\textit{fn}\) is the count of misclassified positives.</li>
+<li>\(\textit{tpr}=\textit{tp}/(\textit{tp}+\textit{fn})\).</li>
+<li>\(\textit{tnr}=\textit{tn}/(\textit{fp}+\textit{tn})\).</li>
+<li>\(\textit{ppv}=\textit{tp}/(\textit{tp}+\textit{fp})\).</li>
+<li>\(\textit{npv}=\textit{tn}/(\textit{tn}+\textit{fn})\).</li>
+<li>\(\textit{fpr}=\textit{fp}/(\textit{fp}+\textit{tn})\).</li>
+<li>\(\textit{fdr}=1-\textit{ppv}\).</li>
+<li>\(\textit{fnr}=\textit{fn}/(\textit{fn}+\textit{tp})\).</li>
+<li>\(\textit{acc}=(\textit{tp}+\textit{tn})/(\textit{tp}+\textit{tn}+\textit{fp} +\textit{fn})\).</li>
+<li>\(\textit{f1}=2*\textit{tp}/(2*\textit{tp}+\textit{fp}+\textit{fn})\).</li>
+</ul>
+<p><b>Area Under ROC Curve</b></p>
+<p>This function returns the area under the Receiver Operating Characteristic curve for binary classification (the AUC). The ROC curve is the curve relating the classifier's TPR and FPR metrics. (See <a href="#bc">Binary Classification</a> above for a definition of these metrics). Please refer to reference <a href="#aoc">[2]</a> for more details. Note that the binary classification function can be used to obtain the data (TPR and FPR values) required for drawing the ROC curve.</p>
+<dl class="section note"><dt>Note</dt><dd>For 'binary_classifier' and 'area_under_roc' functions:<ul>
+<li>The 'observed_col' column is assumed to be a numeric column with two values: 0 and 1, or a Boolean column. For the purposes of the metric calculation, 0 is considered to be negative and 1 to be positive.</li>
+<li>The 'pred_col' column is expected to contain numeric values corresponding to likelihood/probability. A larger value corresponds to greater certainty that the observed value will be '1', and a lower value corresponds to a greater certainty that it will be '0'.</li>
+</ul>
+</dd></dl>
+<p><b>Confusion Matrix</b></p>
+<p>This function returns the confusion matrix of a multi-class classification. Each column of the matrix represents the instances in a predicted class while each row represents the instances in an actual class. This allows more detailed analysis than mere proportion of correct guesses (accuracy). Please refer to the reference <a href="#cm">[3]</a> for more details. Please note that grouping is not supported for the confusion matrix.</p>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<ol type="1">
+<li>Create the sample data: <pre class="example">
+DROP TABLE IF EXISTS test_set;
+CREATE TABLE test_set(
+                  pred FLOAT8,
+                  obs FLOAT8
+                );
+INSERT INTO test_set VALUES
+  (37.5,53.1), (12.3,34.2), (74.2,65.4), (91.1,82.1);
+</pre></li>
+<li>Run the Mean Absolute Error function: <pre class="example">
+DROP TABLE IF EXISTS table_out;
+SELECT madlib.mean_abs_error( 'test_set', 'table_out', 'pred', 'obs');
+SELECT * FROM table_out;
+</pre> Result <pre class="result">
+ mean_abs_error
+&#160;----------------
+         13.825
+</pre></li>
+<li>Run the Mean Absolute Percentage Error function: <pre class="example">
+DROP TABLE IF EXISTS table_out;
+SELECT madlib.mean_abs_perc_error( 'test_set', 'table_out', 'pred', 'obs');
+SELECT * FROM table_out;
+</pre> Result <pre class="result">
+ mean_abs_perc_error
+&#160;---------------------
+   0.294578793636013
+</pre></li>
+<li>Run the Mean Percentage Error function: <pre class="example">
+DROP TABLE IF EXISTS table_out;
+SELECT madlib.mean_perc_error( 'test_set', 'table_out', 'pred', 'obs');
+SELECT * FROM table_out;
+</pre> Result <pre class="result">
+ mean_perc_error
+&#160;-------------------
+   -0.17248930032771
+</pre></li>
+<li>Run the Mean Squared Error function: <pre class="example">
+DROP TABLE IF EXISTS table_out;
+SELECT madlib.mean_squared_error( 'test_set', 'table_out', 'pred', 'obs');
+SELECT * FROM table_out;
+</pre> Result <pre class="result">
+ mean_squared_error
+&#160;--------------------
+   220.3525
+</pre></li>
+<li>Run the R2 Score function: <pre class="example">
+DROP TABLE IF EXISTS table_out;
+SELECT madlib.r2_score( 'test_set', 'table_out', 'pred', 'obs');
+SELECT * FROM table_out;
+</pre> Result <pre class="result">
+ r2_score
+&#160;------------------------
+   0.27992908844337695865
+</pre></li>
+<li>Run the Adjusted R2 Score function: <pre class="example">
+DROP TABLE IF EXISTS table_out;
+SELECT madlib.adjusted_r2_score( 'test_set', 'table_out', 'pred', 'obs', 3, 100);
+SELECT * FROM table_out;
+</pre> Result <pre class="result">
+       r2_score      | adjusted_r2_score
+&#160;--------------------+------------------
+   0.279929088443375 | 0.257426872457231
+</pre></li>
+<li>Create the sample data for binary classifier metrics: <pre class="example">
+DROP TABLE IF EXISTS test_set;
+CREATE TABLE test_set AS
+    SELECT ((a*8)::integer)/8.0 pred,
+        ((a*0.5+random()*0.5)&gt;0.5) obs
+    FROM (select random() as a from generate_series(1,100)) x;
+</pre></li>
+<li>Run the Binary Classifier metrics function: <pre class="example">
+DROP TABLE IF EXISTS table_out;
+SELECT madlib.binary_classifier( 'test_set', 'table_out', 'pred', 'obs');
+</pre></li>
+<li>View the True Positive Rate and the False Positive Rate: <pre class="example">
+SELECT threshold, tpr, fpr FROM table_out ORDER BY threshold;
+</pre> Result (your results for this and other functions below will look different due to the presence of the random function in sample data generator): <pre class="result">
+       threshold        |          tpr           |          fpr
+------------------------+------------------------+------------------------
+ 0.00000000000000000000 | 1.00000000000000000000 | 1.00000000000000000000
+ 0.12500000000000000000 | 1.00000000000000000000 | 0.94915254237288135593
+ 0.25000000000000000000 | 0.92682926829268292683 | 0.64406779661016949153
+ 0.37500000000000000000 | 0.80487804878048780488 | 0.47457627118644067797
+ 0.50000000000000000000 | 0.70731707317073170732 | 0.35593220338983050847
+ 0.62500000000000000000 | 0.63414634146341463415 | 0.25423728813559322034
+ 0.75000000000000000000 | 0.48780487804878048780 | 0.06779661016949152542
+ 0.87500000000000000000 | 0.29268292682926829268 | 0.03389830508474576271
+ 1.00000000000000000000 | 0.12195121951219512195 | 0.00000000000000000000
+</pre></li>
+<li>View all metrics at a given threshold value: <pre class="example">
+-- Set extended display on for easier reading of output
+\x on
+SELECT * FROM table_out WHERE threshold=0.5;
+</pre> Result <pre class="result">
+-[ RECORD 1 ]---------------------
+threshold | 0.50000000000000000000
+tp        | 29
+fp        | 21
+fn        | 12
+tn        | 38
+tpr       | 0.70731707317073170732
+tnr       | 0.64406779661016949153
+ppv       | 0.58000000000000000000
+npv       | 0.76000000000000000000
+fpr       | 0.35593220338983050847
+fdr       | 0.42000000000000000000
+fnr       | 0.29268292682926829268
+acc       | 0.67000000000000000000
+f1        | 0.63736263736263736264
+</pre></li>
+<li>Run the Area Under ROC curve function: <pre class="example">
+DROP TABLE IF EXISTS table_out;
+SELECT madlib.area_under_roc( 'test_set', 'table_out', 'pred', 'obs');
+SELECT * FROM table_out;
+</pre> Result <pre class="result">
+ area_under_roc
+&#160;---------------------------------------------
+0.77428689541132699462698842496899545266640
+</pre></li>
+<li>Create the sample data for confusion matrix. <pre class="example">
+DROP TABLE IF EXISTS test_set;
+CREATE TABLE test_set AS
+    SELECT (x+y)%5+1 AS pred,
+        (x*y)%5 AS obs
+    FROM generate_series(1,5) x,
+        generate_series(1,5) y;
+</pre></li>
+<li>Run the confusion matrix function: <pre class="example">
+DROP TABLE IF EXISTS table_out;
+SELECT madlib.confusion_matrix( 'test_set', 'table_out', 'pred', 'obs');
+SELECT * FROM table_out ORDER BY class;
+</pre> Result <pre class="result">
+ class | confusion_arr
+-------+---------------
+     0 | {0,1,2,2,2,2}
+     1 | {0,2,0,1,1,0}
+     2 | {0,0,0,2,2,0}
+     3 | {0,0,2,0,0,2}
+     4 | {0,2,1,0,0,1}
+     5 | {0,0,0,0,0,0}
+</pre></li>
+</ol>
+<p><a class="anchor" id="literature"></a></p><dl class="section user"><dt>Literature</dt><dd></dd></dl>
+<p><a class="anchor" id="r2"></a> [1] <a href="https://en.wikipedia.org/wiki/Coefficient_of_determination">https://en.wikipedia.org/wiki/Coefficient_of_determination</a></p>
+<p><a class="anchor" id="aoc"></a> [2] <a href="https://en.wikipedia.org/wiki/Receiver_operating_characteristic">https://en.wikipedia.org/wiki/Receiver_operating_characteristic</a></p>
+<p><a class="anchor" id="cm"></a> [3] <a href="https://en.wikipedia.org/wiki/Confusion_matrix">https://en.wikipedia.org/wiki/Confusion_matrix</a></p>
+<p><a class="anchor" id="related"></a></p><dl class="section user"><dt>Related Topics</dt><dd></dd></dl>
+<p>File <a class="el" href="pred__metrics_8sql__in.html" title="A collection of summary statistics to gauge model accuracy based on predicted values vs...">pred_metrics.sql_in</a> for list of functions and usage. </p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__prob.html b/docs/rc/group__grp__prob.html
new file mode 100644
index 0000000..da8ee3e
--- /dev/null
+++ b/docs/rc/group__grp__prob.html
@@ -0,0 +1,164 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Probability Functions</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__prob.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Probability Functions<div class="ingroups"><a class="el" href="group__grp__stats.html">Statistics</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li>
+<a href="#syntax">Function Syntax</a> </li>
+<li>
+<a href="#examples">Examples</a> </li>
+<li>
+<a href="#literature">Literature</a> </li>
+<li>
+<a href="#related">Related Topics</a> </li>
+</ul>
+</div><p>The Probability Functions module provides cumulative distribution, density/mass, and quantile functions for a wide range of probability distributions.</p>
+<p>Unless otherwise documented, all of these functions are wrappers around functionality provided by the boost C++ library [1, “<a href="http://www.boost.org/doc/libs/1_49_0/libs/math/doc/sf_and_dist/html/math_toolkit/dist.html">Statistical Distributions and Functions</a>”].</p>
+<p>For convenience, all cumulative distribution and density/mass functions (CDFs and PDF/PMFs in short) are defined over the range of all floating-point numbers including infinity. Inputs that are <code>NULL</code> or <code>NaN</code> (not a number) will always produce a <code>NULL</code> or <code>NaN</code> result, respectively. Inputs that are plus or minus infinity will return the respective limits.</p>
+<p>A quantile function for a probability distrution with CDF \( F \) takes a probability argument \( p \in [0,1] \) and returns the value \( x \) so that \( F(x) = p \), provided such an \( x \) exists and it is unique. If it does not, the result will be \( \sup \{ x \in D \mid F(x) \leq p \} \) (interpreted as 0 if the supremum is over an empty set) if \( p &lt; 0.5 \), and \( \inf \{ x \in D \mid F(x) \geq p \} \) if \( p \geq 0.5 \). Here \( D \) denotes the domain of the distribution, which is the set of reals \( \mathbb R \) for continuous and the set of nonnegative integers \( \mathbb N_0 \) for discrete distributions.</p>
+<p>Intuitively, the formulas in the previous paragraph deal with the following special cases. The 0-quantile will always be the “left end” of the support, and the 1-quantile will be the “right end” of the support of the distribution. For discrete distributions, most values of \( p \in [0,1] \) do not admit an \( x \) with \( F(x) = p \). Instead, there is an \( x \in \mathbb N_0 \) so that \( F(x) &lt; p &lt; F(x + 1) \). The above formulas mean that the value returned as \( p \)-quantile is \( x \) if \( p &lt; 0.5 \), and it is \( x + 1 \) if \( p \geq 0.5 \). (As a special case, in order to ensure that quantiles are always within the support, the \( p \)-quantile will be 0 if \( p &lt; F(0) \)).</p>
+<p>The rationale for choosing this behavior is that \(p\)-quantiles for \( p &lt; 0.5 \) are typically requested when interested in the value \( x \) such that with confidence level <b>at least</b> \( 1 - p \) a random variable will be \( &gt; x \) (or equivalently, with probability <b>at most</b> \( p \), it will be \( \leq x \)). Likewise, \(p\)-quantiles for \( p \geq 0.5 \) are typically requested when interested in the value \( x \) such that with confidence level <b>at least</b> \( p \) a random variable will be \( \leq x \). See also [1, “<a href="http://www.boost.org/doc/libs/1_46_1/libs/math/doc/sf_and_dist/html/math_toolkit/policy/pol_tutorial/understand_dis_quant.html">Understanding Quantiles of Discrete Distributions</a>”].</p>
+<p><a class="anchor" id="syntax"></a></p><dl class="section user"><dt>Function Syntax</dt><dd></dd></dl>
+<p>Cumulative distribution functions:</p>
+<pre class="syntax"><em>distribution</em>_cdf(<em>random variate</em>[, <em>parameter1</em> [, <em>parameter2</em> [, <em>parameter3</em>] ] ])</pre><p>Probability density/mass functions: </p><pre class="syntax"><em>distribution</em>_{pdf|pmf}(<em>random variate</em>[, <em>parameter1</em> [, <em>parameter2</em> [, <em>parameter3</em>] ] ])</pre><p>Quantile functions: </p><pre class="syntax"><em>distribution</em>_quantile(<em>probability</em>[, <em>parameter1</em> [, <em>parameter2</em> [, <em>parameter3</em>] ] ])</pre><p>For concrete function signatures, see <a class="el" href="prob_8sql__in.html">prob.sql_in</a>.</p>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<pre class="example">
+SELECT madlib.normal_cdf(0);
+</pre><p> Result: </p><pre class="result">
+ normal_cdf
+&#160;-----------
+        0.5
+</pre> <pre class="example">
+SELECT madlib.normal_quantile(0.5, 0, 1);
+</pre><p> Result: </p><pre class="result">
+ normal_quantile
+&#160;----------------
+               0
+(1 row)
+</pre><p><a class="anchor" id="literature"></a></p><dl class="section user"><dt>Literature</dt><dd></dd></dl>
+<p>[1] John Maddock, Paul A. Bristow, Hubert Holin, Xiaogang Zhang, Bruno Lalande, Johan Råde, Gautam Sewani and Thijs van den Berg: <em>Boost Math Toolkit</em>, Version 1.49, available at: <a href="http://www.boost.org/doc/libs/1_49_0/libs/math/doc/sf_and_dist/html/index.html">http://www.boost.org/doc/libs/1_49_0/libs/math/doc/sf_and_dist/html/index.html</a></p>
+<dl class="section user"><dt>Related Topics</dt><dd><a class="anchor" id="related"></a>File <a class="el" href="prob_8sql__in.html" title="SQL functions for evaluating probability functions. ">prob.sql_in</a> documenting the SQL functions. </dd></dl>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__random__forest.html b/docs/rc/group__grp__random__forest.html
new file mode 100644
index 0000000..2449e8d
--- /dev/null
+++ b/docs/rc/group__grp__random__forest.html
@@ -0,0 +1,1174 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Random Forest</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__random__forest.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Random Forest<div class="ingroups"><a class="el" href="group__grp__super.html">Supervised Learning</a> &raquo; <a class="el" href="group__grp__tree.html">Tree Methods</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b><ul>
+<li class="level1">
+<a href="#train">Training Function</a> </li>
+<li class="level1">
+<a href="#runtime">Run-time and Memory Usage</a> </li>
+<li class="level1">
+<a href="#predict">Prediction Function</a> </li>
+<li class="level1">
+<a href="#get_tree">Tree Display</a> </li>
+<li class="level1">
+<a href="#get_importance">Importance Display</a> </li>
+<li class="level1">
+<a href="#examples">Examples</a> </li>
+<li class="level1">
+<a href="#literature">Literature</a> </li>
+<li class="level1">
+<a href="#related">Related Topics</a> </li>
+</ul>
+</div><p>Random forest builds an ensemble of classifiers, each of which is a tree model constructed using bootstrapped samples from the input data. The results of these models are then combined to yield a single prediction, which, at the expense of some loss in interpretation, can be highly accurate. Refer to Breiman et al. [1][2][3] for details on the implementation used here.</p>
+<p>Also refer to the <a href="group__grp__decision__tree.html">decision tree user documentation</a> since many parameters and examples are similar to random forest.</p>
+<p><a class="anchor" id="train"></a></p><dl class="section user"><dt>Training Function</dt><dd>Random forest training function has the following format: <pre class="syntax">
+forest_train(training_table_name,
+             output_table_name,
+             id_col_name,
+             dependent_variable,
+             list_of_features,
+             list_of_features_to_exclude,
+             grouping_cols,
+             num_trees,
+             num_random_features,
+             importance,
+             num_permutations,
+             max_tree_depth,
+             min_split,
+             min_bucket,
+             num_splits,
+             null_handling_params,
+             verbose,
+             sample_ratio
+             )
+</pre></dd></dl>
+<p><b>Arguments</b> </p><dl class="arglist">
+<dt>training_table_name </dt>
+<dd><p class="startdd">text. Name of the table containing the training data.</p>
+<p class="enddd"></p>
+</dd>
+<dt>output_table_name </dt>
+<dd><p class="startdd">TEXT. Name of the generated table containing the model. If a table with the same name already exists, an error will be returned. A summary table named <em>&lt;output_table_name&gt;_summary</em> and a grouping table named <em>&lt;output_table_name&gt;_group</em> are also created. These are described later on this page. </p>
+<p class="enddd"></p>
+</dd>
+<dt>id_col_name </dt>
+<dd><p class="startdd">TEXT. Name of the column containing id information in the training data. This is a mandatory argument and is used for prediction and other purposes. The values are expected to be unique for each row.</p>
+<p class="enddd"></p>
+</dd>
+<dt>dependent_variable </dt>
+<dd><p class="startdd">TEXT. Name of the column that contains the output (response) for training. Boolean, integer and text types are considered to be classification outputs, while double precision values are considered to be regression outputs. The response variable for a classification tree can be multinomial, but the time and space complexity of the training function increases linearly as the number of response classes increases.</p>
+<p class="enddd"></p>
+</dd>
+<dt>list_of_features </dt>
+<dd><p class="startdd">TEXT. Comma-separated string of column names or expressions to use as predictors. Can also be a '*' implying all columns are to be used as predictors (except for the ones included in the next argument that lists exclusions). The types of the features can be mixed: boolean, integer, and text columns are considered categorical and double precision columns are considered continuous. Categorical variables are not encoded and used as is in the training.</p>
+<p>Array columns can also be included in the list, where the array is expanded to treat each element of the array as a feature.</p>
+<p>Note that not every combination of the levels of a categorical variable is checked when evaluating a split. The levels of the non-integer categorical variable are ordered by the entropy of the variable in predicting the response. The split at each node is evaluated between these ordered levels. Integer categorical variables, however, are simply ordered by their value. </p>
+<p class="enddd"></p>
+</dd>
+<dt>list_of_features_to_exclude </dt>
+<dd><p class="startdd">TEXT. Comma-separated string of column names to exclude from the predictors list. If the <em>dependent_variable</em> is an expression (including cast of a column name), then this list should include the columns present in the <em>dependent_variable</em> expression, otherwise those columns will be included in the features (resulting in meaningless trees). The names in this parameter should be identical to the names used in the table and quoted appropriately. </p>
+<p class="enddd"></p>
+</dd>
+<dt>grouping_cols (optional) </dt>
+<dd><p class="startdd">TEXT, default: NULL. Comma-separated list of column names to group the data by. This will produce multiple random forests, one for each group.</p>
+<p class="enddd"></p>
+</dd>
+<dt>num_trees (optional) </dt>
+<dd><p class="startdd">INTEGER, default: 100. Maximum number of trees to grow in the random forest model. Actual number of trees grown may be different, depending on the data.</p>
+<p class="enddd"></p>
+</dd>
+<dt>num_random_features (optional) </dt>
+<dd><p class="startdd">INTEGER, default: sqrt(n) for classification, n/3 for regression, where n is the number of features. This parameter is the number of features to randomly select at each split.</p>
+<p class="enddd"></p>
+</dd>
+<dt>importance (optional) </dt>
+<dd><p class="startdd">BOOLEAN, default: true. Whether or not to calculate variable importance. If set to true, out-of-bag variable importance and impurity variable importance for categorical and continuous features will be output to the group table <em>&lt;model_table&gt;_group</em>. Note that total runtime will increase when variable importance is turned on. Refer to [1][2][3] for more information on variable importance. </p>
+<p class="enddd"></p>
+</dd>
+<dt>num_permutations (optional) </dt>
+<dd><p class="startdd">INTEGER, default: 1. Number of times to permute each feature value while calculating the out-of-bag variable importance. Only applies when the 'importance' parameter is set to true.</p>
+<dl class="section note"><dt>Note</dt><dd>Variable importance for a feature is determined by permuting the variable and computing the drop in predictive accuracy using out-of-bag samples [1]. Setting this greater than 1 performs an average over multiple importance calculations, but increases total run time. In most cases, the default value of 1 is sufficient to compute the importance. Due to nature of permutation, the importance value can end up being negative if the number of levels for a categorical variable is small and is unbalanced. In such a scenario, the importance values are shifted to ensure that the lowest importance value is 0. To see importance values normalized to sum to 100 across all variables, use the importance display helper function described later on this page.</dd></dl>
+<p class="enddd"></p>
+</dd>
+<dt>max_tree_depth (optional) </dt>
+<dd><p class="startdd">INTEGER, default: 7. Maximum depth of any node of a tree, with the root node counted as depth 0. A deeper tree can lead to better prediction but will also result in longer processing time and higher memory usage. Current allowed maximum is 15. Note that since random forest is an ensemble method, individual trees typically do not need to be deep.</p>
+<p class="enddd"></p>
+</dd>
+<dt>min_split (optional) </dt>
+<dd><p class="startdd">INTEGER, default: 20. Minimum number of observations that must exist in a node for a split to be attempted.</p>
+<p class="enddd"></p>
+</dd>
+<dt>min_bucket (optional) </dt>
+<dd><p class="startdd">INTEGER, default: min_split/3. Minimum number of observations in any terminal node. If only one of min_bucket or min_split is specified, min_split is set to min_bucket*3 or min_bucket to min_split/3, as appropriate.</p>
+<p class="enddd"></p>
+</dd>
+<dt>num_splits (optional) </dt>
+<dd><p class="startdd">INTEGER, default: 20. Continuous-valued features are binned into discrete quantiles to compute split boundaries. This global parameter is used to compute the resolution of splits for continuous features. Higher number of bins will lead to better prediction, but will also result in longer processing time and higher memory usage.</p>
+<p class="enddd"></p>
+</dd>
+<dt>null_handling_params (optional) </dt>
+<dd><p class="startdd">TEXT. Comma-separated string of key-value pairs controlling the behavior of various features handling missing values. One of the following can be used if desired (not both): </p><table class="output">
+<tr>
+<th>max_surrogates </th><td>Default: 0. Number of surrogates to store for each node. One approach to handling NULLs is to use surrogate splits for each node. A surrogate variable enables you to make better use of the data by using another predictor variable that is associated (correlated) with the primary split variable. The surrogate variable comes into use when the primary predictior value is NULL. Surrogate rules implemented here are based on reference [1].  </td></tr>
+<tr>
+<th>null_as_category </th><td><p class="starttd">Default: FALSE. Whether to treat NULL as a valid level for categorical features. FALSE means that NULL is not a valid level, which is probably the most common sitation.</p>
+<p>If set to TRUE, NULL values are considered a categorical value and placed at the end of the ordering of categorical levels. Placing at the end ensures that NULL is never used as a value to split a node on. One reason to make NULL a category is that it allows you to predict on categorical levels that were not in the training data by lumping them into an "other bucket."</p>
+<p class="endtd">This parameter is ignored for continuous-valued features.   </p>
+</td></tr>
+</table>
+<p class="enddd"></p>
+</dd>
+<dt>verbose (optional) </dt>
+<dd><p class="startdd">BOOLEAN, default: FALSE. Provides verbose output of the results of training.</p>
+<p class="enddd"></p>
+</dd>
+<dt>sample_ratio (optional) </dt>
+<dd>DOUBLE PRECISION, in the range of (0, 1], default: 1. If 'sample_ratio' is less than 1, a bootstrap sample size smaller than the data table is used for training each tree in the forest. A ratio that is close to 0 may result in trees with only the root node. This sample parameter allows users to quickly experiment with the random forest function since it reduces run time by using only some of the data. </dd>
+</dl>
+<p><b>Output</b> </p><dl class="arglist">
+</dl>
+<p>The model table produced by the training function contains the following columns:</p>
+<table class="output">
+<tr>
+<th>gid </th><td>INTEGER. Group id that uniquely identifies a set of grouping column values.  </td></tr>
+<tr>
+<th>sample_id </th><td>INTEGER. The id of the bootstrap sample that this tree is a part of.  </td></tr>
+<tr>
+<th>tree </th><td>BYTEA8. Trained tree model stored in binary format (not human readable).  </td></tr>
+</table>
+<p>A summary table named <em>&lt;model_table&gt;_summary</em> is also created at the same time, which contains the following columns: </p><table class="output">
+<tr>
+<th>method </th><td><p class="starttd">'forest_train' </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>is_classification </th><td><p class="starttd">BOOLEAN. True if it is a classification model, false if for regression. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>source_table </th><td><p class="starttd">TEXT. Data source table name. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>model_table </th><td><p class="starttd">TEXT. Model table name. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>id_col_name </th><td><p class="starttd">TEXT. The ID column name. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>dependent_varname </th><td><p class="starttd">TEXT. Dependent variable. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>independent_varnames </th><td><p class="starttd">TEXT. Independent variables </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>cat_features </th><td><p class="starttd">TEXT. List of categorical features as a comma-separated string. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>con_features </th><td><p class="starttd">TEXT. List of continuous feature as a comma-separated string. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>grouping_cols </th><td><p class="starttd">INTEGER. Names of grouping columns. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>num_trees </th><td><p class="starttd">INTEGER. Number of trees grown by the model. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>num_random_features </th><td><p class="starttd">INTEGER. Number of features randomly selected for each split. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>max_tree_depth </th><td><p class="starttd">INTEGER. Maximum depth of any tree in the random forest model_table. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>min_split </th><td><p class="starttd">INTEGER. Minimum number of observations in a node for it to be split. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>min_bucket </th><td><p class="starttd">INTEGER. Minimum number of observations in any terminal node. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>num_splits </th><td><p class="starttd">INTEGER. Number of buckets for continuous variables. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>verbose </th><td><p class="starttd">BOOLEAN. Whether or not to display debug info. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>importance </th><td><p class="starttd">BOOLEAN. Whether or not to calculate variable importance. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>num_permutations </th><td><p class="starttd">INTEGER. Number of times feature values are permuted while calculating out-of-bag variable importance. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>num_all_groups </th><td><p class="starttd">INTEGER. Number of groups during forest training. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>num_failed_groups </th><td><p class="starttd">INTEGER. Number of failed groups during forest training. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>total_rows_processed </th><td><p class="starttd">BIGINT. Total numbers of rows processed in all groups. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>total_rows_skipped </th><td><p class="starttd">BIGINT. Total numbers of rows skipped in all groups due to missing values or failures. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>dependent_var_levels </th><td><p class="starttd">TEXT. For classification, the distinct levels of the dependent variable. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>dependent_var_type </th><td><p class="starttd">TEXT. The type of dependent variable. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>independent_var_types </th><td><p class="starttd">TEXT. A comma separated string for the types of independent variables. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>null_proxy </th><td>TEXT. Describes how NULLs are handled. If NULL is not treated as a separate categorical variable, this will be NULL. If NULL is treated as a separate categorical value, this will be set to "__NULL__"  </td></tr>
+</table>
+<p>A table named <em>&lt;model_table&gt;_group</em> is also created at the same time, even if no grouping is specified. It contains the following columns: </p><table class="output">
+<tr>
+<th>gid </th><td><p class="starttd">integer. Group id that uniquely identifies a set of grouping column values. If grouping is not used, this will always be 1. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>&lt;...&gt; </th><td><p class="starttd">Same type as in the training data table 'grouping_cols'. This could be multiple columns depending on the 'grouping_cols' input. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>success </th><td><p class="starttd">BOOLEAN. Indicator of the success of the group. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>cat_levels_in_text </th><td><p class="starttd">TEXT[]. Ordered levels (values) of categorical variables corresponding to the categorical features in the 'list_of_features' argument above. Used to help interpret the trained tree. For example, if the categorical features specified are <em>weather_outlook</em> and <em>windy</em> in that order, then 'cat_levels_in_text' might be <em>[overcast, rain, sunny, False, True]</em>. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>cat_n_levels </th><td><p class="starttd">INTEGER[]. Number of levels for each categorical variable. Used to help interpret the trained tree. In the example from above, 'cat_n_levels' would be <em>[3, 2]</em> since there are 3 levels for <em>weather_outlook</em> and 2 levels <em>windy</em>. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>oob_error </th><td><p class="starttd">DOUBLE PRECISION. Out-of-bag error for the random forest model. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>oob_var_importance </th><td><p class="starttd">DOUBLE PRECISION[]. Out-of-bag variable importance for both categorical and continuous features. The order corresponds to the order of the variables in 'independent_varnames' in <em> &lt;model_table&gt;_summary</em>. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th>impurity_var_importance </th><td><p class="starttd">DOUBLE PRECISION[]. Impurity variable importance for both categorial and continuous features. The order corresponds to the order of the variables in 'independent_varnames' in <em> &lt;model_table&gt;_summary</em>. </p>
+<p class="endtd"></p>
+</td></tr>
+</table>
+<p><a class="anchor" id="runtime"></a></p><dl class="section user"><dt>Run-time and Memory Usage</dt><dd></dd></dl>
+<p>The number of features and the number of class values per categorical feature have a direct impact on run-time and memory. In addition, here is a summary of the main parameters in the training function that affect run-time and memory:</p>
+<table class="doxtable">
+<tr>
+<th align="left">Parameter </th><th align="left">Run-time </th><th align="left">Memory </th><th align="left">Notes  </th></tr>
+<tr>
+<td align="left">'num_trees' </td><td align="left">High </td><td align="left">No or little effect. </td><td align="left">Linear with number of trees. Notes that trees train sequentially one after another, though each tree is trained in parallel. </td></tr>
+<tr>
+<td align="left">'importance' </td><td align="left">Moderate </td><td align="left">No or little effect. </td><td align="left">Depends on number of features and 'num_permutations' parameter. </td></tr>
+<tr>
+<td align="left">'num_permutations' </td><td align="left">Moderate </td><td align="left">No or little effect. </td><td align="left">Depends on number of features. </td></tr>
+<tr>
+<td align="left">'max_tree_depth' </td><td align="left">High </td><td align="left">High </td><td align="left">Deeper trees can take longer to run and use more memory. </td></tr>
+<tr>
+<td align="left">'min_split' </td><td align="left">No or little effect, unless very small. </td><td align="left">No or little effect, unless very small. </td><td align="left">If too small, can impact run-time by building trees that are very thick. </td></tr>
+<tr>
+<td align="left">'min_bucket' </td><td align="left">No or little effect, unless very small. </td><td align="left">No or little effect, unless very small. </td><td align="left">If too small, can impact run-time by building trees that are very thick. </td></tr>
+<tr>
+<td align="left">'num_splits' </td><td align="left">High </td><td align="left">High </td><td align="left">Depends on number of continuous variables. Effectively adds more features as the binning becomes more granular. </td></tr>
+<tr>
+<td align="left">'sample_ratio' </td><td align="left">High </td><td align="left">High </td><td align="left">Reduces run time by using only some of the data. </td></tr>
+</table>
+<p>If you experience long run-times or are hitting memory limits, consider reducing one or more of these parameters. One approach when building a random forest model is to start with a small number of trees and a low maximum depth value, and use suggested defaults for other parameters. This will give you a sense of run-time and test set accuracy. Then you can change number of trees and maximum depth in a systematic way as required to improve accuracy.</p>
+<p><a class="anchor" id="predict"></a></p><dl class="section user"><dt>Prediction Function</dt><dd>The prediction function estimates the conditional mean given a new predictor. It has the following syntax: <pre class="syntax">
+forest_predict(random_forest_model,
+               new_data_table,
+               output_table,
+               type)
+</pre></dd></dl>
+<p><b>Arguments</b> </p><dl class="arglist">
+<dt>forest_model </dt>
+<dd><p class="startdd">text. Name of the table containing the random forest model from training.</p>
+<p class="enddd"></p>
+</dd>
+<dt>new_data_table </dt>
+<dd><p class="startdd">TEXT. Name of the table containing prediction data. This table is expected to contain the same features that were used during training. The table should also contain <em>id_col_name</em> used for identifying each row.</p>
+<p class="enddd"></p>
+</dd>
+<dt>output_table </dt>
+<dd><p class="startdd">TEXT. Name of the table to output prediction results. If this table already exists, an error is returned. The table contains the <em>id_col_name</em> column giving the 'id' for each prediction and the prediction columns for the dependent variable.</p>
+<p>If <em>type</em> = 'response', then the table has a single additional column with the prediction value of the response. The type of this column depends on the type of the response variable used during training.</p>
+<p>If <em>type</em> = 'prob', then the table has multiple additional columns, one for each possible value of the response variable. The columns are labeled as 'estimated_prob_<em>dep_value</em>', where <em>dep_value</em> represents each value of the response variable.</p>
+<p class="enddd"></p>
+</dd>
+<dt>type (optional) </dt>
+<dd>TEXT, optional, default: 'response'. For regression trees, the output is always the predicted value of the dependent variable. For classification trees, the <em>type</em> variable can be 'response', giving the classification prediction as output, or 'prob', giving the class probabilities as output. For each value of the dependent variable, a column with the probabilities is added to the output table.  </dd>
+</dl>
+<p><a class="anchor" id="get_tree"></a></p><dl class="section user"><dt>Tree Display</dt><dd>The display function outputs a graph representation of a single tree of the random forest. The output can either be in the popular 'dot' format that can be visualized using various programs including those in the GraphViz package, or in a simple text format. The details of the text format are output with the tree. <pre class="syntax">
+get_tree(forest_model_table,
+         gid,
+         sample_id,
+         dot_format,
+         verbose)
+</pre></dd></dl>
+<p>An additional display function is provided to output the surrogate splits chosen for each internal node: </p><pre class="syntax">
+get_tree_surr(forest_model_table,
+              gid,
+              sample_id)
+</pre><p>This output contains the list of surrogate splits for each internal node. The nodes are sorted in ascending order by id. This is equivalent to viewing the tree in a breadth-first manner. For each surrogate, we output the surrogate split (variable and threshold) and also give the number of rows that were common between the primary split and the surrogate split. Finally, the number of rows present in the majority branch of the primary split is also shown. Only surrogates that perform better than this majority branch are included in the surrogate list. When the primary variable has a NULL value the surrogate variables are used in order to compute the split for that node. If all surrogates variables are NULL, then the majority branch is used to compute the split for a tuple.</p>
+<p><b>Arguments</b> </p><dl class="arglist">
+<dt>forest_model_table </dt>
+<dd><p class="startdd">TEXT. Name of the table containing the random forest model.</p>
+<p class="enddd"></p>
+</dd>
+<dt>gid </dt>
+<dd><p class="startdd">INTEGER. Id of the group that this tree is part of.</p>
+<p class="enddd"></p>
+</dd>
+<dt>sample_id </dt>
+<dd><p class="startdd">INTEGER. Id of the bootstrap sample that this tree is part of.</p>
+<p class="enddd"></p>
+</dd>
+<dt>dot_format (optional) </dt>
+<dd><p class="startdd">BOOLEAN, default = TRUE. Output can either be in a dot format or a text format. If TRUE, the result is in the dot format, else output is in text format.</p>
+<p class="enddd"></p>
+</dd>
+<dt>verbose (optional) </dt>
+<dd>BOOLEAN, default = FALSE. If true, the dot format output will contain additional information (impurity, sample size, number of weighted rows for each response variable, classification or prediction if the tree was pruned at this level) </dd>
+</dl>
+<p>The output is always returned as a 'TEXT'. For the dot format, the output can be redirected to a file on the client side and then rendered using visualization programs.</p>
+<p>To export the dot format result to an external file, use the method below. Please note that you should use unaligned table output mode for psql with '-A' flag, or else you may get an error when you try to convert the dot file to another format for viewing (e.g., PDF). And inside the psql client, both '\t' and '\o' should be used:</p>
+<pre class="example">
+&gt; # under bash
+&gt; psql -A my_database
+# -- in psql now
+# \t
+# \o test.dot -- export to a file
+# select madlib.tree_display('tree_out');
+# \o
+# \t
+</pre><p>After the dot file has been generated, use third-party plotting software to plot the trees in a nice format: </p><pre class="example">
+&gt; # under bash, convert the dot file into a PDF file
+&gt; dot -Tpdf test.dot &gt; test.pdf
+&gt; xpdf test.pdf&amp;
+</pre><p>Please see the <a href="group__grp__decision__tree.html">decision tree user documentation</a> for more details on working with tree output formats.</p>
+<p><a class="anchor" id="get_importance"></a></p><dl class="section user"><dt>Importance Display</dt><dd>This is a helper function that creates a table to more easily view out-of-bag and impurity variable importance values for a given model table. This function rescales the importance values to represent them as percentages i.e. importance values are scaled to sum to 100.</dd></dl>
+<pre class="syntax">
+<a class="el" href="random__forest_8sql__in.html#aea5ca2b827a4ee552a8c0f4d4d947725">get_var_importance(model_table, output_table)</a>
+</pre><p><b>Arguments</b> </p><dl class="arglist">
+<dt>model_table </dt>
+<dd>TEXT. Name of the table containing the random forest model. </dd>
+<dt>output_table </dt>
+<dd>TEXT. Name of the table to create for importance values. </dd>
+</dl>
+<p>The summary and group tables generated by the forest_train function are required for this function to work.</p>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<dl class="section note"><dt>Note</dt><dd><ul>
+<li>Not all random forest parameters are demonstrated in the examples below. Some are shown in the <a href="group__grp__decision__tree.html">decision tree user documentation</a> since usage is similar.</li>
+<li>Your results may look different than those below due the random nature of random forests.</li>
+</ul>
+</dd></dl>
+<p><b>Random Forest Classification Example</b></p>
+<ol type="1">
+<li>Load input data set related to whether to play golf or not: <pre class="example">
+DROP TABLE IF EXISTS rf_golf CASCADE;
+CREATE TABLE rf_golf (
+    id integer NOT NULL,
+    "OUTLOOK" text,
+    temperature double precision,
+    humidity double precision,
+    "Temp_Humidity" double precision[],
+    clouds_airquality text[],
+    windy boolean,
+    class text
+);
+INSERT INTO rf_golf VALUES
+(1,'sunny', 85, 85, ARRAY[85, 85],ARRAY['none', 'unhealthy'], 'false','Don''t Play'),
+(2, 'sunny', 80, 90, ARRAY[80, 90], ARRAY['none', 'moderate'], 'true', 'Don''t Play'),
+(3, 'overcast', 83, 78, ARRAY[83, 78], ARRAY['low', 'moderate'], 'false', 'Play'),
+(4, 'rain', 70, 96, ARRAY[70, 96], ARRAY['low', 'moderate'], 'false', 'Play'),
+(5, 'rain', 68, 80, ARRAY[68, 80], ARRAY['medium', 'good'], 'false', 'Play'),
+(6, 'rain', 65, 70, ARRAY[65, 70], ARRAY['low', 'unhealthy'], 'true', 'Don''t Play'),
+(7, 'overcast', 64, 65, ARRAY[64, 65], ARRAY['medium', 'moderate'], 'true', 'Play'),
+(8, 'sunny', 72, 95, ARRAY[72, 95], ARRAY['high', 'unhealthy'], 'false', 'Don''t Play'),
+(9, 'sunny', 69, 70, ARRAY[69, 70], ARRAY['high', 'good'], 'false', 'Play'),
+(10, 'rain', 75, 80, ARRAY[75, 80], ARRAY['medium', 'good'], 'false', 'Play'),
+(11, 'sunny', 75, 70, ARRAY[75, 70], ARRAY['none', 'good'], 'true', 'Play'),
+(12, 'overcast', 72, 90, ARRAY[72, 90], ARRAY['medium', 'moderate'], 'true', 'Play'),
+(13, 'overcast', 81, 75, ARRAY[81, 75], ARRAY['medium', 'moderate'], 'false', 'Play'),
+(14, 'rain', 71, 80, ARRAY[71, 80], ARRAY['low', 'unhealthy'], 'true', 'Don''t Play');
+</pre></li>
+<li>Train random forest and view the summary table: <pre class="example">
+DROP TABLE IF EXISTS train_output, train_output_group, train_output_summary;
+SELECT madlib.forest_train('rf_golf',         -- source table
+                           'train_output',    -- output model table
+                           'id',              -- id column
+                           'class',           -- response
+                           '"OUTLOOK", temperature, humidity, windy',   -- features
+                           NULL,              -- exclude columns
+                           NULL,              -- grouping columns
+                           20::integer,       -- number of trees
+                           2::integer,        -- number of random features
+                           TRUE::boolean,     -- variable importance
+                           1::integer,        -- num_permutations
+                           8::integer,        -- max depth
+                           3::integer,        -- min split
+                           1::integer,        -- min bucket
+                           10::integer        -- number of splits per continuous variable
+                           );
+\x on
+SELECT * FROM train_output_summary;
+</pre> <pre class="result">
+-[ RECORD 1 ]---------+--------------------------------------------------
+method                | forest_train
+is_classification     | t
+source_table          | rf_golf
+model_table           | train_output
+id_col_name           | id
+dependent_varname     | class
+independent_varnames  | "OUTLOOK",windy,temperature,humidity
+cat_features          | "OUTLOOK",windy
+con_features          | temperature,humidity
+grouping_cols         |
+num_trees             | 20
+num_random_features   | 2
+max_tree_depth        | 8
+min_split             | 3
+min_bucket            | 1
+num_splits            | 10
+verbose               | f
+importance            | t
+num_permutations      | 1
+num_all_groups        | 1
+num_failed_groups     | 0
+total_rows_processed  | 14
+total_rows_skipped    | 0
+dependent_var_levels  | "Don't Play","Play"
+dependent_var_type    | text
+independent_var_types | text, boolean, double precision, double precision
+null_proxy            | None
+</pre> View the group table output: <pre class="example">
+SELECT * FROM train_output_group;
+</pre> <pre class="result">
+-[ RECORD 1 ]-----------+----------------------------------------------------------------------
+gid                     | 1
+success                 | t
+cat_n_levels            | {3,2}
+cat_levels_in_text      | {overcast,sunny,rain,False,True}
+oob_error               | 0.64285714285714285714
+oob_var_importance      | {0.0525595238095238,0,0.0138095238095238,0.0276190476190476}
+impurity_var_importance | {0.254133481284938,0.0837130966399198,0.258520599370744,0.173196167388586}
+</pre> The 'cat_levels_in_text' array shows the levels of the categorical variables "OUTLOOK" and windy, which have 3 and 2 levels respectively. Out-of-bag and impurity variable importance arrays are ordered according to the order of the variables in 'independent_varnames' in &lt;model_table&gt;_summary. A higher value means higher importance for the variable. We can use the helper function to get a normalized view of variable importance: <pre class="example">
+\x off
+DROP TABLE IF EXISTS imp_output;
+SELECT madlib.get_var_importance('train_output','imp_output');
+SELECT * FROM imp_output ORDER BY oob_var_importance DESC;
+</pre> <pre class="result">
+   feature   | oob_var_importance | impurity_var_importance
+-------------+--------------------+-------------------------
+ "OUTLOOK"   |   55.9214692843572 |        33.0230751036133
+ humidity    |   29.3856871437619 |        22.5057714332356
+ temperature |    14.692843571881 |        33.5931539822541
+ windy       |                  0 |         10.877999480897
+(4 rows)
+</pre></li>
+<li>Predict output categories. For the purpose of this example, we use the same data that was used for training: <pre class="example">
+\x off
+DROP TABLE IF EXISTS prediction_results;
+SELECT madlib.forest_predict('train_output',        -- tree model
+                             'rf_golf',             -- new data table
+                             'prediction_results',  -- output table
+                             'response');           -- show response
+SELECT g.id, class, estimated_class FROM prediction_results p,
+rf_golf g WHERE p.id = g.id ORDER BY g.id;
+</pre> <pre class="result">
+ id |   class    | estimated_class
+----+------------+-----------------
+  1 | Don't Play | Don't Play
+  2 | Don't Play | Don't Play
+  3 | Play       | Play
+  4 | Play       | Play
+  5 | Play       | Play
+  6 | Don't Play | Don't Play
+  7 | Play       | Play
+  8 | Don't Play | Don't Play
+  9 | Play       | Play
+ 10 | Play       | Play
+ 11 | Play       | Play
+ 12 | Play       | Play
+ 13 | Play       | Play
+ 14 | Don't Play | Don't Play
+(14 rows)
+</pre> To display the probabilities associated with each value of the dependent variable, set the 'type' parameter to 'prob': <pre class="example">
+DROP TABLE IF EXISTS prediction_results;
+SELECT madlib.forest_predict('train_output',        -- tree model
+                             'rf_golf',             -- new data table
+                             'prediction_results',  -- output table
+                             'prob');               -- show probability
+SELECT g.id, class, "estimated_prob_Don't Play",  "estimated_prob_Play"
+FROM prediction_results p, rf_golf g WHERE p.id = g.id ORDER BY g.id;
+</pre> <pre class="result">
+ id |   class    | estimated_prob_Don't Play | estimated_prob_Play
+----+------------+---------------------------+---------------------
+  1 | Don't Play |                       0.9 |                 0.1
+  2 | Don't Play |                      0.85 |                0.15
+  3 | Play       |                         0 |                   1
+  4 | Play       |                      0.35 |                0.65
+  5 | Play       |                      0.05 |                0.95
+  6 | Don't Play |                      0.85 |                0.15
+  7 | Play       |                      0.25 |                0.75
+  8 | Don't Play |                      0.85 |                0.15
+  9 | Play       |                      0.15 |                0.85
+ 10 | Play       |                      0.15 |                0.85
+ 11 | Play       |                      0.35 |                0.65
+ 12 | Play       |                       0.1 |                 0.9
+ 13 | Play       |                         0 |                   1
+ 14 | Don't Play |                       0.8 |                 0.2
+(14 rows)
+</pre></li>
+<li>View a single tree in text format within the forest identified by 'gid' and 'sample_id', out of the several that were created: <pre class="example">
+SELECT madlib.get_tree('train_output',1,7, FALSE);
+</pre> <pre class="result">
+&#160;-------------------------------------
+&#160;- Each node represented by 'id' inside ().
+&#160;- Leaf nodes have a * while internal nodes have the split condition at the end.
+&#160;- For each internal node (i), it's children will be at (2i+1) and (2i+2).
+&#160;- For each split the first indented child (2i+1) is the 'True' node and
+second indented child (2i+2) is the 'False' node.
+&#160;- Number of (weighted) rows for each response variable inside [].
+&#160;- Order of values = ['"Don\'t Play"', '"Play"']
+&#160;-------------------------------------
+ (0)[ 5 10]  windy in {False}
+    (1)[2 8]  "OUTLOOK" in {overcast,sunny}
+       (3)[2 1]  humidity &lt;= 75
+          (7)[0 1]  * --&gt; "Play"
+          (8)[2 0]  * --&gt; "Don't Play"
+       (4)[0 7]  * --&gt; "Play"
+    (2)[3 2]  temperature &lt;= 75
+       (5)[1 2]  humidity &lt;= 70
+          (11)[1 1]  * --&gt; "Don't Play"
+          (12)[0 1]  * --&gt; "Play"
+       (6)[2 0]  * --&gt; "Don't Play"
+&#160;-------------------------------------
+</pre> Please see the <a href="group__grp__decision__tree.html">decision tree user documentation</a> for an explanation on how to interpret the tree display above.</li>
+<li>View tree in dot format: <pre class="example">
+SELECT madlib.get_tree('train_output',1,7);
+</pre> <pre class="result">
+&#160;----------------------------------------------------
+ digraph "Classification tree for rf_golf" {
+ "0" [label="windy &lt;= False", shape=ellipse];
+ "0" -&gt; "1"[label="yes"];
+ "0" -&gt; "2"[label="no"];
+ "1" [label="\"OUTLOOK" &lt;= sunny", shape=ellipse];
+ "1" -&gt; "3"[label="yes"];
+ "1" -&gt; "4"[label="no"];
+ "4" [label=""Play"",shape=box];
+ "2" [label="temperature &lt;= 75", shape=ellipse];
+ "2" -&gt; "5"[label="yes"];
+ "2" -&gt; "6"[label="no"];
+ "6" [label=""Don't Play"",shape=box];
+ "3" [label="humidity &lt;= 75", shape=ellipse];
+ "3" -&gt; "7"[label="yes"];
+ "7" [label=""Play"",shape=box];
+ "3" -&gt; "8"[label="no"];
+ "8" [label=""Don't Play"",shape=box];
+ "5" [label="humidity &lt;= 70", shape=ellipse];
+ "5" -&gt; "11"[label="yes"];
+ "11" [label=""Don't Play"",shape=box];
+ "5" -&gt; "12"[label="no"];
+ "12" [label=""Play"",shape=box];
+ } //---end of digraph---------
+</pre></li>
+<li>View tree in dot format with additional information: <pre class="example">
+SELECT madlib.get_tree('train_output',1,7, TRUE, TRUE);
+</pre> <pre class="result">
+&#160;---------------------------------------------------------------------------------------------------------------------------
+ digraph "Classification tree for rf_golf" {
+ "0" [label="windy &lt;= False\\n impurity = 0.444444\\n samples = 15\\n value = [ 5 10]\\n class = \"Play"", shape=ellipse];
+ "0" -&gt; "1"[label="yes"];
+ "0" -&gt; "2"[label="no"];
+ "1" [label=""OUTLOOK" &lt;= sunny\n impurity = 0.32\n samples = 10\n value = [2 8]\n class = "Play"", shape=ellipse];
+ "1" -&gt; "3"[label="yes"];
+ "1" -&gt; "4"[label="no"];
+ "4" [label=""Play"\n impurity = 0\n samples = 7\n value = [0 7]",shape=box];
+ "2" [label="temperature &lt;= 75\n impurity = 0.48\n samples = 5\n value = [3 2]\n class = "Don't Play"", shape=ellipse];
+ "2" -&gt; "5"[label="yes"];
+ "2" -&gt; "6"[label="no"];
+ "6" [label=""Don't Play"\n impurity = 0\n samples = 2\n value = [2 0]",shape=box];
+ "3" [label="humidity &lt;= 75\n impurity = 0.444444\n samples = 3\n value = [2 1]\n class = "Don't Play"", shape=ellipse];
+ "3" -&gt; "7"[label="yes"];
+ "7" [label=""Play"\n impurity = 0\n samples = 1\n value = [0 1]",shape=box];
+ "3" -&gt; "8"[label="no"];
+ "8" [label=""Don't Play"\n impurity = 0\n samples = 2\n value = [2 0]",shape=box];
+ "5" [label="humidity &lt;= 70\n impurity = 0.444444\n samples = 3\n value = [1 2]\n class = "Play"", shape=ellipse];
+ "5" -&gt; "11"[label="yes"];
+ "11" [label=""Don't Play"\n impurity = 0.5\n samples = 2\n value = [1 1]",shape=box];
+ "5" -&gt; "12"[label="no"];
+ "12" [label=""Play"\n impurity = 0\n samples = 1\n value = [0 1]",shape=box];
+ } //---end of digraph---------
+</pre></li>
+<li>Arrays of features. Categorical and continuous features can be array columns, in which case the array is expanded to treat each element of the array as a feature: <pre class="example">
+DROP TABLE IF EXISTS train_output, train_output_group, train_output_summary;
+SELECT madlib.forest_train('rf_golf',         -- source table
+                           'train_output',    -- output model table
+                           'id',              -- id column
+                           'class',           -- response
+                           '"Temp_Humidity", clouds_airquality',   -- features
+                           NULL,              -- exclude columns
+                           NULL,              -- grouping columns
+                           20::integer,       -- number of trees
+                           2::integer,        -- number of random features
+                           TRUE::boolean,     -- variable importance
+                           1::integer,        -- num_permutations
+                           8::integer,        -- max depth
+                           3::integer,        -- min split
+                           1::integer,        -- min bucket
+                           10::integer        -- number of splits per continuous variable
+                           );
+\x on
+SELECT * FROM train_output_summary;
+</pre> <pre class="result">
+-[ RECORD 1 ]---------+----------------------------------------------------------------------------------------
+method                | forest_train
+is_classification     | t
+source_table          | rf_golf
+model_table           | train_output
+id_col_name           | id
+dependent_varname     | class
+independent_varnames  | (clouds_airquality)[1],(clouds_airquality)[2],("Temp_Humidity")[1],("Temp_Humidity")[2]
+cat_features          | (clouds_airquality)[1],(clouds_airquality)[2]
+con_features          | ("Temp_Humidity")[1],("Temp_Humidity")[2]
+grouping_cols         |
+num_trees             | 20
+num_random_features   | 2
+max_tree_depth        | 8
+min_split             | 3
+min_bucket            | 1
+num_splits            | 10
+verbose               | f
+importance            | t
+num_permutations      | 1
+num_all_groups        | 1
+num_failed_groups     | 0
+total_rows_processed  | 14
+total_rows_skipped    | 0
+dependent_var_levels  | "Don't Play","Play"
+dependent_var_type    | text
+independent_var_types | text, text, double precision, double precision
+null_proxy            | None
+</pre></li>
+<li>Sample ratio. Use the sample ratio parameter to train on a subset of the data: <pre class="example">
+DROP TABLE IF EXISTS train_output, train_output_group, train_output_summary;
+SELECT madlib.forest_train('rf_golf',         -- source table
+                           'train_output',    -- output model table
+                           'id',              -- id column
+                           'class',           -- response
+                           '"OUTLOOK", temperature, humidity, windy',   -- features
+                           NULL,              -- exclude columns
+                           NULL,              -- grouping columns
+                           20::integer,       -- number of trees
+                           2::integer,        -- number of random features
+                           TRUE::boolean,     -- variable importance
+                           1::integer,        -- num_permutations
+                           8::integer,        -- max depth
+                           3::integer,        -- min split
+                           1::integer,        -- min bucket
+                           10::integer,       -- number of splits per continuous variable
+                           NULL,              -- NULL handling
+                           FALSE,             -- Verbose
+                           0.5                -- Sample ratio
+                           );
+SELECT * FROM train_output_group;
+</pre> <pre class="result">
+-[ RECORD 1 ]-----------+--------------------------------------------------------------------
+gid                     | 1
+success                 | t
+cat_n_levels            | {3,2}
+cat_levels_in_text      | {overcast,rain,sunny,False,True}
+oob_error               | 0.57142857142857142857
+oob_var_importance      | {0,0.0166666666666667,0.0166666666666667,0.0166666666666667}
+impurity_var_importance | {0.143759266026582,0.0342777777777778,0.157507369614512,0.0554953231292517}
+</pre></li>
+</ol>
+<p><b>Random Forest Regression Example</b></p>
+<ol type="1">
+<li>Load input data related to fuel consumption and 10 aspects of automobile design and performance for 32 automobiles (1973–74 models). Data was extracted from the 1974 Motor Trend US magazine. <pre class="example">
+DROP TABLE IF EXISTS mt_cars;
+CREATE TABLE mt_cars (
+    id integer NOT NULL,
+    mpg double precision,
+    cyl integer,
+    disp double precision,
+    hp integer,
+    drat double precision,
+    wt double precision,
+    qsec double precision,
+    vs integer,
+    am integer,
+    gear integer,
+    carb integer
+);
+INSERT INTO mt_cars VALUES
+(1,18.7,8,360,175,3.15,3.44,17.02,0,0,3,2),
+(2,21,6,160,110,3.9,2.62,16.46,0,1,4,4),
+(3,24.4,4,146.7,62,3.69,3.19,20,1,0,4,2),
+(4,21,6,160,110,3.9,2.875,17.02,0,1,4,4),
+(5,17.8,6,167.6,123,3.92,3.44,18.9,1,0,4,4),
+(6,16.4,8,275.8,180,3.078,4.07,17.4,0,0,3,3),
+(7,22.8,4,108,93,3.85,2.32,18.61,1,1,4,1),
+(8,17.3,8,275.8,180,3.078,3.73,17.6,0,0,3,3),
+(9,21.4,null,258,110,3.08,3.215,19.44,1,0,3,1),
+(10,15.2,8,275.8,180,3.078,3.78,18,0,0,3,3),
+(11,18.1,6,225,105,2.768,3.46,20.22,1,0,3,1),
+(12,32.4,4,78.7,66,4.08,2.20,19.47,1,1,4,1),
+(13,14.3,8,360,245,3.21,3.578,15.84,0,0,3,4),
+(14,22.8,4,140.8,95,3.92,3.15,22.9,1,0,4,2),
+(15,30.4,4,75.7,52,4.93,1.615,18.52,1,1,4,2),
+(16,19.2,6,167.6,123,3.92,3.44,18.3,1,0,4,4),
+(17,33.9,4,71.14,65,4.22,1.835,19.9,1,1,4,1),
+(18,15.2,null,304,150,3.15,3.435,17.3,0,0,3,2),
+(19,10.4,8,472,205,2.93,5.25,17.98,0,0,3,4),
+(20,27.3,4,79,66,4.08,1.935,18.9,1,1,4,1),
+(21,10.4,8,460,215,3,5.424,17.82,0,0,3,4),
+(22,26,4,120.3,91,4.43,2.14,16.7,0,1,5,2),
+(23,14.7,8,440,230,3.23,5.345,17.42,0,0,3,4),
+(24,30.4,4,95.14,113,3.77,1.513,16.9,1,1,5,2),
+(25,21.5,4,120.1,97,3.70,2.465,20.01,1,0,3,1),
+(26,15.8,8,351,264,4.22,3.17,14.5,0,1,5,4),
+(27,15.5,8,318,150,2.768,3.52,16.87,0,0,3,2),
+(28,15,8,301,335,3.54,3.578,14.6,0,1,5,8),
+(29,13.3,8,350,245,3.73,3.84,15.41,0,0,3,4),
+(30,19.2,8,400,175,3.08,3.845,17.05,0,0,3,2),
+(31,19.7,6,145,175,3.62,2.77,15.5,0,1,5,6),
+(32,21.4,4,121,109,4.11,2.78,18.6,1,1,4,2);
+</pre></li>
+<li>We train a regression random forest tree with grouping on transmission type (0 = automatic, 1 = manual) and use surrogates for NULL handling: <pre class="example">
+DROP TABLE IF EXISTS mt_cars_output, mt_cars_output_group, mt_cars_output_summary;
+SELECT madlib.forest_train('mt_cars',         -- source table
+                           'mt_cars_output',  -- output model table
+                           'id',              -- id column
+                           'mpg',             -- response
+                           '*',               -- features
+                           'id, hp, drat, am, gear, carb',  -- exclude columns
+                           'am',              -- grouping columns
+                           10::integer,       -- number of trees
+                           2::integer,        -- number of random features
+                           TRUE::boolean,     -- variable importance
+                           1,                 -- num_permutations
+                           10,                -- max depth
+                           8,                 -- min split
+                           3,                 -- min bucket
+                           10,                -- number of splits per continuous variable
+                           'max_surrogates=2' -- NULL handling
+                           );
+\x on
+SELECT * FROM mt_cars_output_summary;
+</pre> <pre class="result">
+-[ RECORD 1 ]---------+-----------------------------------------------------------------------
+method                | forest_train
+is_classification     | f
+source_table          | mt_cars
+model_table           | mt_cars_output
+id_col_name           | id
+dependent_varname     | mpg
+independent_varnames  | vs,cyl,disp,qsec,wt
+cat_features          | vs,cyl
+con_features          | disp,qsec,wt
+grouping_cols         | am
+num_trees             | 10
+num_random_features   | 2
+max_tree_depth        | 10
+min_split             | 8
+min_bucket            | 3
+num_splits            | 10
+verbose               | f
+importance            | t
+num_permutations      | 1
+num_all_groups        | 2
+num_failed_groups     | 0
+total_rows_processed  | 32
+total_rows_skipped    | 0
+dependent_var_levels  |
+dependent_var_type    | double precision
+independent_var_types | integer, integer, double precision, double precision, double precision
+null_proxy            | None
+</pre> Review the group table to see variable importance by group: <pre class="example">
+SELECT * FROM mt_cars_output_group ORDER BY gid;
+</pre> <pre class="result">
+-[ RECORD 1 ]-----------+----------------------------------------------------------------------------------------
+gid                     | 1
+am                      | 0
+success                 | t
+cat_n_levels            | {2,3}
+cat_levels_in_text      | {0,1,4,6,8}
+oob_error               | 8.64500988190963
+oob_var_importance      | {3.91269987042436,0,2.28278236607143,0.0994074074074073,3.42585277187264}
+impurity_var_importance | {5.07135586863621,3.72145581490929,5.06700415274492,0.594942174008333,8.10909642389614}
+-[ RECORD 2 ]-----------+----------------------------------------------------------------------------------------
+gid                     | 2
+am                      | 1
+success                 | t
+cat_n_levels            | {2,3}
+cat_levels_in_text      | {0,1,4,6,8}
+oob_error               | 16.5197718747446
+oob_var_importance      | {5.22711111111111,10.0872041666667,9.6875362244898,3.97782,2.99447839506173}
+impurity_var_importance | {5.1269704861111,7.04765974920884,20.9817274159476,4.02800949238769,10.5539079705215}
+</pre> Use the helper function to display normalized variable importance: <pre class="example">
+\x off
+DROP TABLE IF EXISTS mt_imp_output;
+SELECT madlib.get_var_importance('mt_cars_output','mt_imp_output');
+SELECT * FROM mt_imp_output ORDER BY am, oob_var_importance DESC;
+</pre> <pre class="result">
+ am | feature | oob_var_importance | impurity_var_importance
+----+---------+--------------------+-------------------------
+  0 | vs      |   40.2510395098467 |        22.4755743014842
+  0 | wt      |   35.2427070417256 |        35.9384361725319
+  0 | disp    |   23.4836216045257 |        22.4562880757909
+  0 | qsec    |   1.02263184390195 |        2.63670453886068
+  0 | cyl     |                  0 |        16.4929969113323
+  1 | cyl     |   31.5479979891794 |        14.7631219023997
+  1 | disp    |   30.2980259228064 |        43.9515825943964
+  1 | vs      |   16.3479283355324 |        10.7397480823277
+  1 | qsec    |   12.4407373230344 |         8.4376938269215
+  1 | wt      |    9.3653104294474 |        22.1078535939547
+</pre></li>
+<li>Predict regression output for the same data and compare with original: <pre class="example">
+\x off
+DROP TABLE IF EXISTS prediction_results;
+SELECT madlib.forest_predict('mt_cars_output',
+                             'mt_cars',
+                             'prediction_results',
+                             'response');
+SELECT s.am, s.id, mpg, estimated_mpg, mpg-estimated_mpg as delta
+FROM prediction_results p, mt_cars s WHERE s.id = p.id ORDER BY s.am, s.id;
+</pre> <pre class="result">
+  am | id | mpg  |  estimated_mpg   |        delta
+----+----+------+------------------+----------------------
+  0 |  1 | 18.7 | 16.5055222816399 |     2.19447771836007
+  0 |  3 | 24.4 | 21.8437857142857 |     2.55621428571428
+  0 |  5 | 17.8 | 19.2085504201681 |    -1.40855042016807
+  0 |  6 | 16.4 | 15.7340778371955 |    0.665922162804513
+  0 |  8 | 17.3 | 15.7340778371955 |     1.56592216280452
+  0 |  9 | 21.4 | 18.2305980392157 |     3.16940196078431
+  0 | 10 | 15.2 | 15.2640778371955 |  -0.0640778371954838
+  0 | 11 | 18.1 | 18.9192647058824 |    -0.81926470588235
+  0 | 13 | 14.3 | 15.0690909090909 |   -0.769090909090908
+  0 | 14 | 22.8 | 21.8437857142857 |    0.956214285714289
+  0 | 16 | 19.2 | 19.2085504201681 | -0.00855042016807062
+  0 | 18 | 15.2 | 16.0805222816399 |    -0.88052228163993
+  0 | 19 | 10.4 | 14.7914111705288 |    -4.39141117052882
+  0 | 21 | 10.4 | 14.7914111705288 |    -4.39141117052882
+  0 | 23 | 14.7 | 15.0525222816399 |    -0.35252228163993
+  0 | 25 | 21.5 | 21.8437857142857 |   -0.343785714285712
+  0 | 27 | 15.5 | 15.4775222816399 |   0.0224777183600704
+  0 | 29 | 13.3 | 15.0690909090909 |    -1.76909090909091
+  0 | 30 | 19.2 | 15.4775222816399 |     3.72247771836007
+  1 |  2 |   21 |         19.53275 |              1.46725
+  1 |  4 |   21 | 20.3594166666667 |    0.640583333333332
+  1 |  7 | 22.8 | 23.0550833333333 |   -0.255083333333335
+  1 | 12 | 32.4 | 27.1501666666667 |     5.24983333333333
+  1 | 15 | 30.4 | 28.9628333333333 |     1.43716666666667
+  1 | 17 | 33.9 | 28.0211666666667 |     5.87883333333333
+  1 | 20 | 27.3 | 27.7138333333333 |   -0.413833333333333
+  1 | 22 |   26 | 26.8808333333333 |   -0.880833333333335
+  1 | 24 | 30.4 |          27.8225 |               2.5775
+  1 | 26 | 15.8 | 17.2924166666667 |    -1.49241666666666
+  1 | 28 |   15 | 17.2924166666667 |    -2.29241666666667
+  1 | 31 | 19.7 |         19.53275 |    0.167249999999999
+  1 | 32 | 21.4 | 23.0550833333333 |    -1.65508333333334
+(32 rows)
+</pre></li>
+<li>Display a single tree of the random forest in dot format: <pre class="example">
+SELECT madlib.get_tree('mt_cars_output',1,7);
+</pre> <pre class="result">
+ digraph "Regression tree for mt_cars" {
+ "0" [label="disp &lt;= 258", shape=ellipse];
+ "0" -&gt; "1"[label="yes"];
+ "1" [label="20.35",shape=box];
+ "0" -&gt; "2"[label="no"];
+ "2" [label="qsec &lt;= 17.6", shape=ellipse];
+ "2" -&gt; "5"[label="yes"];
+ "5" [label="15.8",shape=box];
+ "2" -&gt; "6"[label="no"];
+ "6" [label="12.8",shape=box];
+ } //---end of digraph---------
+</pre> Display the surrogate variables that are used to compute the split for each node when the primary variable is NULL: <pre class="example">
+SELECT madlib.get_tree_surr('mt_cars_output',1,7);
+</pre> <pre class="result">
+   &#160;-------------------------------------
+       Surrogates for internal nodes
+   &#160;-------------------------------------
+ (0) disp &lt;= 258
+      1: wt &lt;= 3.46    [common rows = 12]
+      2: cyl in {4,6}    [common rows = 11]
+      [Majority branch = 6 ]
+ (2) qsec &lt;= 17.6
+      1: wt &lt;= 3.435    [common rows = 6]
+      2: disp &gt; 275.8    [common rows = 5]
+      [Majority branch = 4 ]
+</pre></li>
+</ol>
+<h4>NULL Handling Example</h4>
+<ol type="1">
+<li>Create toy example to illustrate 'null-as-category' handling for categorical features: <pre class="example">
+DROP TABLE IF EXISTS null_handling_example;
+CREATE TABLE null_handling_example (
+    id integer,
+    country text,
+    city text,
+    weather text,
+    response text
+);
+INSERT INTO null_handling_example VALUES
+(1,null,null,null,'a'),
+(2,'US',null,null,'b'),
+(3,'US','NY',null,'c'),
+(4,'US','NY','rainy','d');
+</pre></li>
+<li>Train random forest tree. Note that 'NULL' is set as a valid level for the categorical features country, weather and city: <pre class="example">
+DROP TABLE IF EXISTS train_output, train_output_group, train_output_summary;
+SELECT madlib.forest_train('null_handling_example',  -- source table
+                           'train_output',    -- output model table
+                           'id',              -- id column
+                           'response',        -- response
+                           'country, weather, city',   -- features
+                           NULL,              -- exclude columns
+                           NULL,              -- grouping columns
+                           10::integer,        -- number of trees
+                           2::integer,        -- number of random features
+                           TRUE::boolean,     -- variable importance
+                           1::integer,        -- num_permutations
+                           3::integer,        -- max depth
+                           2::integer,        -- min split
+                           1::integer,        -- min bucket
+                           3::integer,        -- number of splits per continuous variable
+                           'null_as_category=TRUE'
+                           );
+\x on
+SELECT * FROM train_output_summary;
+</pre> <pre class="result">
+-[ RECORD 1 ]---------+----------------------
+method                | forest_train
+is_classification     | t
+source_table          | null_handling_example
+model_table           | train_output
+id_col_name           | id
+dependent_varname     | response
+independent_varnames  | country,weather,city
+cat_features          | country,weather,city
+con_features          |
+grouping_cols         |
+num_trees             | 10
+num_random_features   | 2
+max_tree_depth        | 3
+min_split             | 2
+min_bucket            | 1
+num_splits            | 3
+verbose               | f
+importance            | t
+num_permutations      | 1
+num_all_groups        | 1
+num_failed_groups     | 0
+total_rows_processed  | 4
+total_rows_skipped    | 0
+dependent_var_levels  | "a","b","c","d"
+dependent_var_type    | text
+independent_var_types | text, text, text
+null_proxy            | __NULL__
+</pre> View the summary table: <pre class="example">
+SELECT * FROM train_output_group;
+</pre> <pre class="result">
+-[ RECORD 1 ]-----------+-----------------------------------------
+gid                     | 1
+success                 | t
+cat_n_levels            | {2,2,2}
+cat_levels_in_text      | {US,__NULL__,rainy,__NULL__,NY,__NULL__}
+oob_error               | 1.00000000000000000000
+oob_var_importance      | {0,0,0}
+impurity_var_importance | {0.125,0.0944444444444,0.1836666666667}
+</pre></li>
+<li>Predict for data not previously seen by assuming NULL value as the default: <pre class="example">
+\x off
+DROP TABLE IF EXISTS table_test;
+CREATE TABLE table_test (
+    id integer,
+    country text,
+    city text,
+    weather text,
+    expected_response text
+);
+INSERT INTO table_test VALUES
+(1,'IN','MUM','cloudy','a'),
+(2,'US','HOU','humid','b'),
+(3,'US','NY','sunny','c'),
+(4,'US','NY','rainy','d');
+DROP TABLE IF EXISTS prediction_results;
+SELECT madlib.forest_predict('train_output',
+                             'table_test',
+                             'prediction_results',
+                             'response');
+SELECT s.id, expected_response, estimated_response
+FROM prediction_results p, table_test s
+WHERE s.id = p.id ORDER BY id;
+</pre> <pre class="result">
+ id | expected_response | estimated_response
+----+-------------------+--------------------
+  1 | a                 | a
+  2 | b                 | b
+  3 | c                 | c
+  4 | d                 | d
+(4 rows)
+</pre> There is only training data for country 'US' so the response for country 'IN' is 'a', corresponding to a NULL (not 'US') country level. Likewise, any city in the 'US' that is not 'NY' will predict response 'b', corresponding to a NULL (not 'NY') city level.</li>
+</ol>
+<p><a class="anchor" id="literature"></a></p><dl class="section user"><dt>Literature</dt><dd>[1] L. Breiman and A. Cutler. Random Forests. <a href="http://www.stat.berkeley.edu/~breiman/RandomForests">http://www.stat.berkeley.edu/~breiman/RandomForests</a></dd></dl>
+<p>[2] L. Breiman, A. Cutler, A. Liaw, and M. Wiener. randomForest: Breiman and Cutler's Random Forests for Classification and Regression. <a href="http://cran.r-project.org/web/packages/randomForest/index.html">http://cran.r-project.org/web/packages/randomForest/index.html</a></p>
+<p>[3] L. Breiman, J. Friedman, R. Olshen, C. Stone. "Classification and Regression Trees", Chapman &amp; Hall, 1984.</p>
+<p><a class="anchor" id="related"></a></p><dl class="section user"><dt>Related Topics</dt><dd></dd></dl>
+<p>File <a class="el" href="random__forest_8sql__in.html">random_forest.sql_in</a> documenting the training function</p>
+<p><a class="el" href="group__grp__decision__tree.html">Decision Tree</a></p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:59 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__regml.html b/docs/rc/group__grp__regml.html
new file mode 100644
index 0000000..cb60ce5
--- /dev/null
+++ b/docs/rc/group__grp__regml.html
@@ -0,0 +1,166 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Regression Models</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__regml.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#groups">Modules</a>  </div>
+  <div class="headertitle">
+<div class="title">Regression Models<div class="ingroups"><a class="el" href="group__grp__super.html">Supervised Learning</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>A collection of methods for modeling conditional expectation of a response variable. </p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group__grp__clustered__errors"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__clustered__errors.html">Clustered Variance</a></td></tr>
+<tr class="memdesc:group__grp__clustered__errors"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculates clustered variance for linear, logistic, and multinomial logistic regression models, and Cox proportional hazards models. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__cox__prop__hazards"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__cox__prop__hazards.html">Cox-Proportional Hazards Regression</a></td></tr>
+<tr class="memdesc:group__grp__cox__prop__hazards"><td class="mdescLeft">&#160;</td><td class="mdescRight">Models the relationship between one or more independent predictor variables and the amount of time before an event occurs. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__elasticnet"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__elasticnet.html">Elastic Net Regularization</a></td></tr>
+<tr class="memdesc:group__grp__elasticnet"><td class="mdescLeft">&#160;</td><td class="mdescRight">Generates a regularized regression model for variable selection in linear and logistic regression problems, combining the L1 and L2 penalties of the lasso and ridge methods. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__glm"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__glm.html">Generalized Linear Models</a></td></tr>
+<tr class="memdesc:group__grp__glm"><td class="mdescLeft">&#160;</td><td class="mdescRight">Estimate generalized linear model (GLM). GLM is a flexible generalization of ordinary linear regression that allows for response variables that have error distribution models other than a normal distribution. The GLM generalizes linear regression by allowing the linear model to be related to the response variable via a link function and by allowing the magnitude of the variance of each measurement to be a function of its predicted value. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__linreg"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__linreg.html">Linear Regression</a></td></tr>
+<tr class="memdesc:group__grp__linreg"><td class="mdescLeft">&#160;</td><td class="mdescRight">Also called Ordinary Least Squares Regression, models linear relationship between a dependent variable and one or more independent variables. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__logreg"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__logreg.html">Logistic Regression</a></td></tr>
+<tr class="memdesc:group__grp__logreg"><td class="mdescLeft">&#160;</td><td class="mdescRight">Models the relationship between one or more predictor variables and a binary categorical dependent variable by predicting the probability of the dependent variable using a logistic function. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__marginal"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__marginal.html">Marginal Effects</a></td></tr>
+<tr class="memdesc:group__grp__marginal"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculates marginal effects for the coefficients in regression problems. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__multinom"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__multinom.html">Multinomial Regression</a></td></tr>
+<tr class="memdesc:group__grp__multinom"><td class="mdescLeft">&#160;</td><td class="mdescRight">Multinomial regression is to model the conditional distribution of the multinomial response variable using a linear combination of predictors. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__ordinal"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__ordinal.html">Ordinal Regression</a></td></tr>
+<tr class="memdesc:group__grp__ordinal"><td class="mdescLeft">&#160;</td><td class="mdescRight">Regression to model data with ordinal response variable. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__robust"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__robust.html">Robust Variance</a></td></tr>
+<tr class="memdesc:group__grp__robust"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculates Huber-White variance estimates for linear, logistic, and multinomial regression models, and for Cox proportional hazards models. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__regml.js b/docs/rc/group__grp__regml.js
new file mode 100644
index 0000000..76e3c69
--- /dev/null
+++ b/docs/rc/group__grp__regml.js
@@ -0,0 +1,13 @@
+var group__grp__regml =
+[
+    [ "Clustered Variance", "group__grp__clustered__errors.html", null ],
+    [ "Cox-Proportional Hazards Regression", "group__grp__cox__prop__hazards.html", null ],
+    [ "Elastic Net Regularization", "group__grp__elasticnet.html", null ],
+    [ "Generalized Linear Models", "group__grp__glm.html", null ],
+    [ "Linear Regression", "group__grp__linreg.html", null ],
+    [ "Logistic Regression", "group__grp__logreg.html", null ],
+    [ "Marginal Effects", "group__grp__marginal.html", null ],
+    [ "Multinomial Regression", "group__grp__multinom.html", null ],
+    [ "Ordinal Regression", "group__grp__ordinal.html", null ],
+    [ "Robust Variance", "group__grp__robust.html", null ]
+];
\ No newline at end of file
diff --git a/docs/rc/group__grp__robust.html b/docs/rc/group__grp__robust.html
new file mode 100644
index 0000000..30a93ae
--- /dev/null
+++ b/docs/rc/group__grp__robust.html
@@ -0,0 +1,440 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Robust Variance</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__robust.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Robust Variance<div class="ingroups"><a class="el" href="group__grp__super.html">Supervised Learning</a> &raquo; <a class="el" href="group__grp__regml.html">Regression Models</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li class="level1">
+<a href="#train_linregr">Robust Linear Regression Training Function</a> </li>
+<li class="level1">
+<a href="#train_logregr">Robust Logistic Regression Training Function</a> </li>
+<li class="level1">
+<a href="#train_mlogregr">Robust Multinomial Logistic Regression Training Function</a> </li>
+<li class="level1">
+<a href="#robust_variance_coxph">Robust Variance Function For Cox Proportional Hazards</a> </li>
+<li class="level1">
+<a href="#examples">Examples</a> </li>
+<li class="level1">
+<a href="#background">Technical Background</a> </li>
+<li class="level1">
+<a href="#literature">Literature</a> </li>
+<li class="level1">
+<a href="#related">Related Topics</a> </li>
+</ul>
+</div><p>The functions in this module calculate robust variance (Huber-White estimates) for linear regression, logistic regression, multinomial logistic regression, and Cox proportional hazards. They are useful in calculating variances in a dataset with potentially noisy outliers. The Huber-White implemented here is identical to the "HC0" sandwich operator in the R module "sandwich".</p>
+<p>The interfaces for robust linear, logistic, and multinomial logistic regression are similar. Each regression type has its own training function. The regression results are saved in an output table with small differences, depending on the regression type.</p>
+<dl class="section warning"><dt>Warning</dt><dd>Please note that the interface for Cox proportional hazards, unlike the interface of other regression methods, accepts an output model table produced by <a class="el" href="cox__prop__hazards_8sql__in.html#a737450bbfe0f10204b0074a9d45b0cef">coxph_train()</a> function.</dd></dl>
+<p><a class="anchor" id="train_linregr"></a></p><dl class="section user"><dt>Robust Linear Regression Training Function</dt><dd></dd></dl>
+<p>The <a class="el" href="robust_8sql__in.html#a390473d2fd45e268f0fc13ca971b49b4">robust_variance_linregr()</a> function has the following syntax: </p><pre class="syntax">
+robust_variance_linregr( source_table,
+                         out_table,
+                         dependent_varname,
+                         independent_varname,
+                         grouping_cols
+                       )
+</pre> <dl class="arglist">
+<dt>source_table </dt>
+<dd>VARCHAR. The name of the table containing the training data. </dd>
+<dt>out_table </dt>
+<dd><p class="startdd">VARCHAR. Name of the generated table containing the output model. The output table contains the following columns. </p><table class="output">
+<tr>
+<th>coef </th><td>DOUBLE PRECISION[]. Vector of the coefficients of the regression.  </td></tr>
+<tr>
+<th>std_err </th><td>DOUBLE PRECISION[]. Vector of the standard error of the coefficients.  </td></tr>
+<tr>
+<th>t_stats </th><td>DOUBLE PRECISION[]. Vector of the t-stats of the coefficients.  </td></tr>
+<tr>
+<th>p_values </th><td>DOUBLE PRECISION[]. Vector of the p-values of the coefficients.  </td></tr>
+</table>
+<p class="enddd">A summary table named &lt;out_table&gt;_summary is also created, which is the same as the summary table created by linregr_train function. Please refer to the documentation for linear regression for details.  </p>
+</dd>
+<dt>dependent_varname </dt>
+<dd>VARCHAR. The name of the column containing the dependent variable. </dd>
+<dt>independent_varname </dt>
+<dd>VARCHAR. Expression list to evaluate for the independent variables. An intercept variable is not assumed. It is common to provide an explicit intercept term by including a single constant 1 term in the independent variable list.  </dd>
+<dt>grouping_cols (optional) </dt>
+<dd>VARCHAR, default: NULL. An expression list used to group the input dataset into discrete groups, running one regression per group. Similar to the SQL "GROUP BY" clause. When this value is NULL, no grouping is used and a single result model is generated. Default value: NULL.  </dd>
+</dl>
+<p><a class="anchor" id="train_logregr"></a></p><dl class="section user"><dt>Robust Logistic Regression Training Function</dt><dd></dd></dl>
+<p>The <a class="el" href="robust_8sql__in.html#abc20ec2c5e74f268e7727c33a4bb9054">robust_variance_logregr()</a> function has the following syntax: </p><pre class="syntax">
+robust_variance_logregr( source_table,
+                         out_table,
+                         dependent_varname,
+                         independent_varname,
+                         grouping_cols,
+                         max_iter,
+                         optimizer,
+                         tolerance,
+                         verbose_mode
+                       )
+</pre> <dl class="arglist">
+<dt>source_table </dt>
+<dd>VARCHAR. The name of the table containing the training data. </dd>
+<dt>out_table </dt>
+<dd><p class="startdd">VARCHAR. Name of the generated table containing the output model. The output table has the following columns: </p><table class="output">
+<tr>
+<th>coef </th><td>Vector of the coefficients of the regression.  </td></tr>
+<tr>
+<th>std_err </th><td>Vector of the standard error of the coefficients.  </td></tr>
+<tr>
+<th>z_stats </th><td>Vector of the z-stats of the coefficients.  </td></tr>
+<tr>
+<th>p_values </th><td>Vector of the p-values of the coefficients.  </td></tr>
+</table>
+<p class="enddd">A summary table named &lt;out_table&gt;_summary is also created, which is the same as the summary table created by logregr_train function. Please refer to the documentation for logistic regression for details.  </p>
+</dd>
+<dt>dependent_varname </dt>
+<dd>VARCHAR. The name of the column containing the independent variable. </dd>
+<dt>independent_varname </dt>
+<dd>VARCHAR. Expression list to evaluate for the independent variables. An intercept variable is not assumed. It is common to provide an explicit intercept term by including a single constant 1 term in the independent variable list. </dd>
+<dt>grouping_cols (optional) </dt>
+<dd>VARCHAR, default: NULL. An expression list used to group the input dataset into discrete groups, running one regression per group. Similar to the SQL "GROUP BY" clause. When this value is NULL, no grouping is used and a single result model is generated.  </dd>
+<dt>max_iter (optional) </dt>
+<dd>INTEGER, default: 20. The maximum number of iterations that are allowed. </dd>
+<dt>optimizer </dt>
+<dd>VARCHAR, default: 'fista'. Name of optimizer, either 'fista' or 'igd'. </dd>
+<dt>tolerance (optional) </dt>
+<dd>DOUBLE PRECISION, default: 1e-6. The criteria to end iterations. Both the 'fista' and 'igd' optimizers compute the average difference between the coefficients of two consecutive iterations, and when the difference is smaller than tolerance or the iteration number is larger than max_iter, the computation stops.  </dd>
+<dt>verbose_mode (optional) </dt>
+<dd>BOOLEAN, default: FALSE. Whether the regression fit should print any warning messages.  </dd>
+</dl>
+<p><a class="anchor" id="train_mlogregr"></a></p><dl class="section user"><dt>Robust Multinomial Logistic Regression Function</dt><dd></dd></dl>
+<p>The <a class="el" href="robust_8sql__in.html#a1f27c072a4ef885a55825f75d12b3bd8">robust_variance_mlogregr()</a> function has the following syntax: </p><pre class="syntax">
+robust_variance_mlogregr( source_table,
+                          out_table,
+                          dependent_varname,
+                          independent_varname,
+                          ref_category,
+                          grouping_cols,
+                          optimizer_params,
+                          verbose_mode
+                        )
+</pre> <dl class="arglist">
+<dt>source_table </dt>
+<dd>VARCHAR. The name of the table containing training data, properly qualified. </dd>
+<dt>out_table </dt>
+<dd><p class="startdd">VARCHAR. The name of the table where the regression model will be stored. The output table has the following columns: </p><table class="output">
+<tr>
+<th>category </th><td>The category.  </td></tr>
+<tr>
+<th>ref_category </th><td>The refererence category used for modeling.  </td></tr>
+<tr>
+<th>coef </th><td>Vector of the coefficients of the regression.  </td></tr>
+<tr>
+<th>std_err </th><td>Vector of the standard error of the coefficients.  </td></tr>
+<tr>
+<th>z_stats </th><td>Vector of the z-stats of the coefficients.  </td></tr>
+<tr>
+<th>p_values </th><td>Vector of the p-values of the coefficients.  </td></tr>
+</table>
+<p class="enddd">A summary table named &lt;out_table&gt;_summary is also created, which is the same as the summary table created by mlogregr_train function. Please refer to the documentation for multinomial logistic regression for details.  </p>
+</dd>
+<dt>dependent_varname </dt>
+<dd>VARCHAR. The name of the column containing the dependent variable. </dd>
+<dt>independent_varname </dt>
+<dd>VARCHAR. Expression list to evaluate for the independent variables. An intercept variable is not assumed. It is common to provide an explicit intercept term by including a single constant 1 term in the independent variable list. The <em>independent_varname</em> can be the name of a column that contains an array of numeric values. It can also be a string with the format 'ARRAY[1, x1, x2, x3]', where <em>x1</em>, <em>x2</em> and <em>x3</em> are each column names. </dd>
+<dt>ref_category (optional) </dt>
+<dd>INTEGER, default: 0. The reference category. </dd>
+<dt>grouping_cols (optional) </dt>
+<dd>VARCHAR, default: NULL. <em>Not currently implemented. Any non-NULL value is ignored.</em> An expression list used to group the input dataset into discrete groups, running one regression per group. Similar to the SQL "GROUP BY" clause. When this value is NULL, no grouping is used and a single result model is generated. </dd>
+<dt>optimizer_params (optional) </dt>
+<dd>TEXT, default: NULL, which uses the default values of optimizer parameters: max_iter=20, optimizer='newton', tolerance=1e-4. It should be a string that contains pairs of 'key=value' separated by commas. </dd>
+<dt>verbose_mode (optional) </dt>
+<dd>BOOLEAN, default FALSE. <em>Not currently implemented.</em> TRUE if the regression fit should print warning messages. </dd>
+</dl>
+<p><a class="anchor" id="robust_variance_coxph"></a></p><dl class="section user"><dt>Robust Variance Function For Cox Proportional Hazards</dt><dd></dd></dl>
+<p>The <a class="el" href="clustered__variance__coxph_8sql__in.html#abaeae5d6cd30db4b06a49d24d714812e">robust_variance_coxph()</a> function has the following syntax: </p><pre class="syntax">
+robust_variance_coxph(model_table, output_table)
+</pre><p><b>Arguments</b> </p><dl class="arglist">
+<dt>model_table </dt>
+<dd>TEXT. The name of the model table, which is exactaly the same as the 'output_table' parameter of <a class="el" href="cox__prop__hazards_8sql__in.html#a737450bbfe0f10204b0074a9d45b0cef" title="Compute cox-regression coefficients and diagnostic statistics. ">coxph_train()</a> function. </dd>
+<dt>output_table </dt>
+<dd>TEXT. The name of the table where the output is saved. It has the following columns: <table class="output">
+<tr>
+<th>coef </th><td>FLOAT8[]. Vector of the coefficients.  </td></tr>
+<tr>
+<th>loglikelihood </th><td>FLOAT8. Log-likelihood value of the MLE estimate.  </td></tr>
+<tr>
+<th>std_err </th><td>FLOAT8[]. Vector of the standard error of the coefficients.  </td></tr>
+<tr>
+<th>robust_se </th><td>FLOAT8[]. Vector of the robust standard errors of the coefficients.  </td></tr>
+<tr>
+<th>robust_z </th><td>FLOAT8[]. Vector of the robust z-stats of the coefficients.  </td></tr>
+<tr>
+<th>robust_p </th><td>FLOAT8[]. Vector of the robust p-values of the coefficients.  </td></tr>
+<tr>
+<th>hessian </th><td>FLOAT8[]. The Hessian matrix.  </td></tr>
+</table>
+</dd>
+</dl>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<p><b> Logistic Regression Example </b></p><ol type="1">
+<li>View online help for the logistic regression training function. <pre class="example">
+SELECT madlib.robust_variance_logregr();
+</pre></li>
+<li>Create the training data table. <pre class="example">
+DROP TABLE IF EXISTS patients;
+CREATE TABLE patients (id INTEGER NOT NULL, second_attack INTEGER,
+    treatment INTEGER, trait_anxiety INTEGER);
+COPY patients FROM STDIN WITH DELIMITER '|';
+  1 |             1 |         1 |            70
+  3 |             1 |         1 |            50
+  5 |             1 |         0 |            40
+  7 |             1 |         0 |            75
+  9 |             1 |         0 |            70
+ 11 |             0 |         1 |            65
+ 13 |             0 |         1 |            45
+ 15 |             0 |         1 |            40
+ 17 |             0 |         0 |            55
+ 19 |             0 |         0 |            50
+  2 |             1 |         1 |            80
+  4 |             1 |         0 |            60
+  6 |             1 |         0 |            65
+  8 |             1 |         0 |            80
+ 10 |             1 |         0 |            60
+ 12 |             0 |         1 |            50
+ 14 |             0 |         1 |            35
+ 16 |             0 |         1 |            50
+ 18 |             0 |         0 |            45
+ 20 |             0 |         0 |            60
+\.
+</pre></li>
+<li>Run the logistic regression training function and compute the robust logistic variance of the regression: <pre class="example">
+DROP TABLE IF EXISTS patients_logregr;
+SELECT madlib.robust_variance_logregr( 'patients',
+                                       'patients_logregr',
+                                       'second_attack',
+                                       'ARRAY[1, treatment, trait_anxiety]'
+                                     );
+</pre></li>
+<li>View the regression results. <pre class="example">
+\x on
+Expanded display is on.
+SELECT * FROM patients_logregr;
+</pre> Result: <pre class="result">
+&#160;-[ RECORD 1 ]-------------------------------------------------------
+ coef     | {-6.36346994178179,-1.02410605239327,0.119044916668605}
+ std_err  | {3.45872062333648,1.1716192578234,0.0534328864185018}
+ z_stats  | {-1.83983346294192,-0.874094587943036,2.22793348156809}
+ p_values | {0.0657926909738889,0.382066744585541,0.0258849510757339}
+</pre> Alternatively, unnest the arrays in the results for easier reading of output. <pre class="example">
+\x off
+SELECT unnest(array['intercept', 'treatment', 'trait_anxiety' ]) as attribute,
+       unnest(coef) as coefficient,
+       unnest(std_err) as standard_error,
+       unnest(z_stats) as z_stat,
+       unnest(p_values) as pvalue
+FROM patients_logregr;
+</pre></li>
+</ol>
+<p><b> Cox Proportional Hazards Example </b></p><ol type="1">
+<li>View online help for the robust Cox Proportional hazards training method. <pre class="example">
+SELECT madlib.robust_variance_coxph();
+</pre></li>
+<li>Create an input data set. <pre class="example">
+DROP TABLE IF EXISTS sample_data;
+CREATE TABLE sample_data (
+    id INTEGER NOT NULL,
+    grp DOUBLE PRECISION,
+    wbc DOUBLE PRECISION,
+    timedeath INTEGER,
+    status BOOLEAN
+);
+COPY sample_data FROM STDIN DELIMITER '|';
+  0 |   0 | 1.45 |        35 | t
+  1 |   0 | 1.47 |        34 | t
+  3 |   0 |  2.2 |        32 | t
+  4 |   0 | 1.78 |        25 | t
+  5 |   0 | 2.57 |        23 | t
+  6 |   0 | 2.32 |        22 | t
+  7 |   0 | 2.01 |        20 | t
+  8 |   0 | 2.05 |        19 | t
+  9 |   0 | 2.16 |        17 | t
+ 10 |   0 |  3.6 |        16 | t
+ 11 |   1 |  2.3 |        15 | t
+ 12 |   0 | 2.88 |        13 | t
+ 13 |   1 |  1.5 |        12 | t
+ 14 |   0 |  2.6 |        11 | t
+ 15 |   0 |  2.7 |        10 | t
+ 16 |   0 |  2.8 |         9 | t
+ 17 |   1 | 2.32 |         8 | t
+ 18 |   0 | 4.43 |         7 | t
+ 19 |   0 | 2.31 |         6 | t
+ 20 |   1 | 3.49 |         5 | t
+ 21 |   1 | 2.42 |         4 | t
+ 22 |   1 | 4.01 |         3 | t
+ 23 |   1 | 4.91 |         2 | t
+ 24 |   1 |    5 |         1 | t
+\.
+</pre></li>
+<li>Run the Cox regression function. <pre class="example">
+SELECT madlib.coxph_train( 'sample_data',
+                           'sample_cox',
+                           'timedeath',
+                           'ARRAY[grp,wbc]',
+                           'status'
+                         );
+</pre></li>
+<li>Run the Robust Cox regression function. <pre class="example">
+SELECT madlib.robust_variance_coxph( 'sample_cox',
+                           'sample_robust_cox'
+                         );
+</pre></li>
+<li>View the results of the robust Cox regression. <pre class="example">
+\x on
+SELECT * FROM sample_robust_cox;
+</pre> Results: <pre class="result">
+-[ RECORD 1 ]-+----------------------------------------------------------------------------
+coef          | {2.54407073265105,1.67172094780081}
+loglikelihood | -37.8532498733452
+std_err       | {0.677180599295459,0.387195514577754}
+robust_se     | {0.621095581073685,0.274773521439328}
+robust_z      | {4.09610180811965,6.08399579058399}
+robust_p      | {4.2016521208424e-05,1.17223683104729e-09}
+hessian       | {{2.78043065745405,-2.25848560642669},{-2.25848560642669,8.50472838284265}}
+</pre></li>
+</ol>
+<p><a class="anchor" id="background"></a></p><dl class="section user"><dt>Technical Background</dt><dd></dd></dl>
+<p>When doing regression analysis, we are sometimes interested in the variance of the computed coefficients \( \boldsymbol c \). While the built-in regression functions provide variance estimates, we may prefer a <em>robust</em> variance estimate.</p>
+<p>The robust variance calculation can be expressed in a sandwich formation, which is the form </p><p class="formulaDsp">
+\[ S( \boldsymbol c) = B( \boldsymbol c) M( \boldsymbol c) B( \boldsymbol c) \]
+</p>
+<p> where \( B( \boldsymbol c)\) and \( M( \boldsymbol c)\) are matrices. The \( B( \boldsymbol c) \) matrix, also known as the bread, is relatively straight forward, and can be computed as </p><p class="formulaDsp">
+\[ B( \boldsymbol c) = n\left(\sum_i^n -H(y_i, x_i, \boldsymbol c) \right)^{-1} \]
+</p>
+<p> where \( H \) is the hessian matrix.</p>
+<p>The \( M( \boldsymbol c)\) matrix has several variations, each with different robustness properties. The form implemented here is the Huber-White sandwich operator, which takes the form </p><p class="formulaDsp">
+\[ M_{H} =\frac{1}{n} \sum_i^n \psi(y_i,x_i, \boldsymbol c)^T \psi(y_i,x_i, \boldsymbol c). \]
+</p>
+<p>The above method for calculating robust variance (Huber-White estimates) is implemented for linear regression, logistic regression, and multinomial logistic regression. It is useful in calculating variances in a dataset with potentially noisy outliers. The Huber-White implemented here is identical to the "HC0" sandwich operator in the R module "sandwich".</p>
+<p>When multinomial logistic regression is computed before the multinomial robust regression, it uses a default reference category of zero and the regression coefficients are included in the output table. The regression coefficients in the output are in the same order as the multinomial logistic regression function, which is described below. For a problem with \( K \) dependent variables \( (1, ..., K) \) and \( J \) categories \( (0, ..., J-1) \), let \( {m_{k,j}} \) denote the coefficient for dependent variable \( k \) and category \( j \) . The output is \( {m_{k_1, j_0}, m_{k_1, j_1} \ldots m_{k_1, j_{J-1}}, m_{k_2, j_0}, m_{k_2, j_1} \ldots m_{k_K, j_{J-1}}} \). The order is NOT CONSISTENT with the multinomial regression marginal effect calculation with function <em>marginal_mlogregr</em>. This is deliberate because the interfaces of all multinomial regressions (robust, clustered, ...) will be moved to match that used in marginal.</p>
+<p>The robust variance of Cox proportional hazards is more complex because coeeficients are trained by maximizing a partial log-likelihood. Therefore, one cannot directly use the formula for \( M( \boldsymbol c) \) as in Huber-White robust estimator. Extra terms are needed. See [4] for details.</p>
+<p><a class="anchor" id="literature"></a></p><dl class="section user"><dt>Literature</dt><dd></dd></dl>
+<p>[1] vce(cluster) function in STATA: <a href="http://www.stata.com/help.cgi?vce_option">http://www.stata.com/help.cgi?vce_option</a></p>
+<p>[2] clustered estimators in R: <a href="http://people.su.se/~ma/clustering.pdf">http://people.su.se/~ma/clustering.pdf</a></p>
+<p>[3] Achim Zeileis: Object-oriented Computation of Sandwich Estimators. Research Report Series / Department of Statistics and Mathematics, 37. Department of Statistics and Mathematics, WU Vienna University of Economics and Business, Vienna. <a href="http://cran.r-project.org/web/packages/sandwich/vignettes/sandwich-OOP.pdf">http://cran.r-project.org/web/packages/sandwich/vignettes/sandwich-OOP.pdf</a></p>
+<p>[4] D. Y. Lin and L . J. Wei, <em>The Robust Inference for the Cox Proportional Hazards Model</em>, Journal of the American Statistical Association, Vol. 84, No. 408, p.1074 (1989).</p>
+<p><a class="anchor" id="related"></a></p><dl class="section user"><dt>Related Topics</dt><dd>File <a class="el" href="robust_8sql__in.html" title="SQL functions for robust variance linear and logistic regression. ">robust.sql_in</a> documenting the SQL functions File <a class="el" href="robust__variance__coxph_8sql__in.html" title="SQL functions for robust cox proportional hazards regression. ">robust_variance_coxph.sql_in</a> documenting more the SQL functions</dd></dl>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:59 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__sample.html b/docs/rc/group__grp__sample.html
new file mode 100644
index 0000000..6c44418
--- /dev/null
+++ b/docs/rc/group__grp__sample.html
@@ -0,0 +1,150 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Random Sampling</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__sample.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Random Sampling<div class="ingroups"><a class="el" href="group__grp__early__stage.html">Early Stage Development</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li>
+<a href="#func_list">Functions</a> </li>
+<li>
+<a href="#related">Related Topics</a> </li>
+</ul>
+</div><dl class="section warning"><dt>Warning</dt><dd><em> This MADlib method is still in early stage development. Interface and implementation are subject to change. </em></dd></dl>
+<p>The random sampling module consists of useful utility functions for sampling operations. These functions can be used while implementing new algorithms.</p>
+<p><a class="anchor" id="syntax"></a></p><dl class="section user"><dt>Functions</dt><dd></dd></dl>
+<p>Sample a single row according to weights. </p><pre class="syntax">
+weighted_sample( value,
+                 weight
+               )
+</pre><p><b>Arguments</b> </p><dl class="arglist">
+<dt>value </dt>
+<dd>BIGINT or FLOAT8[]. Value of row. Uniqueness is not enforced. If a value occurs multiple times, the probability of sampling this value is proportional to the sum of its weights.  </dd>
+<dt>weight </dt>
+<dd>FLOAT8. Weight for row. A negative value here is treated has zero weight.  </dd>
+</dl>
+<p>Refer to the file for documentation on each of the utility functions.</p>
+<p><a class="anchor" id="related"></a></p><dl class="section user"><dt>Related Topics</dt><dd></dd></dl>
+<dl class="section see"><dt>See also</dt><dd>File <a class="el" href="sample_8sql__in.html" title="SQL functions for random sampling. ">sample.sql_in</a> documenting the SQL functions. </dd></dl>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__sampling.html b/docs/rc/group__grp__sampling.html
new file mode 100644
index 0000000..7aa5d71
--- /dev/null
+++ b/docs/rc/group__grp__sampling.html
@@ -0,0 +1,142 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Sampling</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__sampling.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#groups">Modules</a>  </div>
+  <div class="headertitle">
+<div class="title">Sampling</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>A collection of methods for sampling from a population. </p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group__grp__balance__sampling"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__balance__sampling.html">Balanced Sampling</a></td></tr>
+<tr class="memdesc:group__grp__balance__sampling"><td class="mdescLeft">&#160;</td><td class="mdescRight">A method to independently sample classes to produce a balanced data set. This is commonly used when classes are imbalanced, to ensure that subclasses are adequately represented in the sample. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__strs"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__strs.html">Stratified Sampling</a></td></tr>
+<tr class="memdesc:group__grp__strs"><td class="mdescLeft">&#160;</td><td class="mdescRight">A method for independently sampling subpopulations (strata). <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__sampling.js b/docs/rc/group__grp__sampling.js
new file mode 100644
index 0000000..719fc9d
--- /dev/null
+++ b/docs/rc/group__grp__sampling.js
@@ -0,0 +1,5 @@
+var group__grp__sampling =
+[
+    [ "Balanced Sampling", "group__grp__balance__sampling.html", null ],
+    [ "Stratified Sampling", "group__grp__strs.html", null ]
+];
\ No newline at end of file
diff --git a/docs/rc/group__grp__sessionize.html b/docs/rc/group__grp__sessionize.html
new file mode 100644
index 0000000..becb626
--- /dev/null
+++ b/docs/rc/group__grp__sessionize.html
@@ -0,0 +1,276 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Sessionize</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__sessionize.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Sessionize<div class="ingroups"><a class="el" href="group__grp__datatrans.html">Data Types and Transformations</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li>
+<a href="#syntax">Function Syntax</a> </li>
+<li>
+<a href="#examples">Examples</a> </li>
+<li>
+<a href="#literature">Literature</a> </li>
+</ul>
+</div><p>The MADlib sessionize function performs time-oriented session reconstruction on a data set comprising a sequence of events. A defined period of inactivity indicates the end of one session and beginning of the next session. Sessions can be useful in many domains including web analytics [1], network security, manufacturing, finance, and operational analytics.</p>
+<p><a class="anchor" id="syntax"></a></p><dl class="section user"><dt>Function Syntax</dt><dd><pre class="syntax">
+sessionize(
+   source_table,
+   output_table,
+   partition_expr,
+   time_stamp,
+   max_time,
+   output_cols,
+   create_view
+)
+</pre></dd></dl>
+<p><b>Arguments</b> </p><dl class="arglist">
+<dt>source_table </dt>
+<dd><p class="startdd">VARCHAR. Name of the source table that contains the data to be sessionized.</p>
+<p class="enddd"></p>
+</dd>
+<dt>output_table </dt>
+<dd><p class="startdd">VARCHAR. Name of the output view or table. (The parameter create_view described below defines whether the output is actually a view or a table.) In addition to the columns in the source_table, the output also contains a new column called session_id: </p><ul>
+<li>
+session_id=1,2,...n where n is the number of the session in the partition. </li>
+</ul>
+<p class="enddd"></p>
+</dd>
+<dt>partition_expr </dt>
+<dd><p class="startdd">VARCHAR. The 'partition_expr' is a single column or a list of comma-separated columns/expressions to divide all rows into groups, or partitions. Sessionization is applied across the rows that fall into the same partition. This parameter can be set to NULL or '' to indicate the sessionization operation is to be applied to the whole input table.</p>
+<p class="enddd"></p>
+</dd>
+<dt>time_stamp </dt>
+<dd><p class="startdd">VARCHAR. The time stamp column name that is used for sessionization calculation. Note that the time_stamp column will be sorted in ascending order before the session reconstruction is done within a partition.</p>
+<p class="enddd"></p>
+</dd>
+<dt>max_time </dt>
+<dd><p class="startdd">INTERVAL. Maximum delta time (i.e., time out) between subsequent events that define a session. If the elapsed time between subsequent events is longer than max_time, a new session is created.</p>
+<p class="enddd"><a class="anchor" id="note"></a></p><dl class="section note"><dt>Note</dt><dd>Note that max_time is of time type INTERVAL which is a PostgreSQL way of describing elapsed time. For more information on INTERVAL please refer to reference [2].</dd></dl>
+</dd>
+<dt>output_cols (optional) </dt>
+<dd><p class="startdd">VARCHAR. An optional comma separated list of columns to be written to the output_table. Must be a valid SELECT expression. This is set to '*' by default, which means all columns in the input table will be written to the output_table plus the session_id column. Note that this parameter could include a list containing the partition_expr or any other expressions of interest. E.g., '*, expr1, expr2, etc.' where this means output all columns from the input table plus the expressions listed plus the session_id column.</p>
+<p class="enddd"></p>
+</dd>
+<dt>create_view (optional) </dt>
+<dd>BOOLEAN default: TRUE. Determines whether to create a view or materialize the output as a table. If you only need session info once, creating a view could be significantly faster than materializing as a table. Please note that if you set create_view to NULL (allowed by PostgreSQL) it will get set to the default value of TRUE. </dd>
+</dl>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<p>The data set describes shopper behavior on a notional web site that sells beer and wine. A beacon fires an event to a log file when the shopper visits different pages on the site: landing page, beer selection page, wine selection page, and checkout. Each user is identified by a a user id, and every time a page is visited, the page and time stamp are logged.</p>
+<p>Create the data table:</p>
+<pre class="example">
+DROP TABLE IF EXISTS eventlog CASCADE;  -- Using CASCADE in case you are running through this example more than once (views used below)
+CREATE TABLE eventlog (event_timestamp TIMESTAMP,
+            user_id INT,
+            page TEXT,
+            revenue FLOAT);
+INSERT INTO eventlog VALUES
+('04/15/2015 02:19:00', 101331, 'CHECKOUT', 16),
+('04/15/2015 02:17:00', 202201, 'WINE', 0),
+('04/15/2015 03:18:00', 202201, 'BEER', 0),
+('04/15/2015 01:03:00', 100821, 'LANDING', 0),
+('04/15/2015 01:04:00', 100821, 'WINE', 0),
+('04/15/2015 01:05:00', 100821, 'CHECKOUT', 39),
+('04/15/2015 02:06:00', 100821, 'WINE', 0),
+('04/15/2015 02:09:00', 100821, 'WINE', 0),
+('04/15/2015 02:15:00', 101331, 'LANDING', 0),
+('04/15/2015 02:16:00', 101331, 'WINE', 0),
+('04/15/2015 02:17:00', 101331, 'HELP', 0),
+('04/15/2015 02:18:00', 101331, 'WINE', 0),
+('04/15/2015 02:29:00', 201881, 'LANDING', 0),
+('04/15/2015 02:30:00', 201881, 'BEER', 0),
+('04/15/2015 01:05:00', 202201, 'LANDING', 0),
+('04/15/2015 01:06:00', 202201, 'HELP', 0),
+('04/15/2015 01:09:00', 202201, 'LANDING', 0),
+('04/15/2015 02:15:00', 202201, 'WINE', 0),
+('04/15/2015 02:16:00', 202201, 'BEER', 0),
+('04/15/2015 03:19:00', 202201, 'WINE', 0),
+('04/15/2015 03:22:00', 202201, 'CHECKOUT', 21);
+</pre><p>Sessionize the table by each user_id: </p><pre class="example">
+ DROP VIEW IF EXISTS sessionize_output_view;
+ SELECT madlib.sessionize(
+     'eventlog',             -- Name of input table
+     'sessionize_output_view',   -- View to store sessionize results
+     'user_id',             -- Partition input table by user id
+     'event_timestamp',      -- Time column used to compute sessions
+     '0:30:0'                -- Use 30 minute time out to define sessions
+    );
+SELECT * FROM sessionize_output_view ORDER BY user_id, event_timestamp;
+</pre><p>Result: </p><pre class="result">
+   event_timestamp   | user_id |   page   | revenue | session_id
+---------------------+---------+----------+---------+------------
+ 2015-04-15 01:03:00 |  100821 | LANDING  |       0 |          1
+ 2015-04-15 01:04:00 |  100821 | WINE     |       0 |          1
+ 2015-04-15 01:05:00 |  100821 | CHECKOUT |      39 |          1
+ 2015-04-15 02:06:00 |  100821 | WINE     |       0 |          2
+ 2015-04-15 02:09:00 |  100821 | WINE     |       0 |          2
+ 2015-04-15 02:15:00 |  101331 | LANDING  |       0 |          1
+ 2015-04-15 02:16:00 |  101331 | WINE     |       0 |          1
+ 2015-04-15 02:17:00 |  101331 | HELP     |       0 |          1
+ 2015-04-15 02:18:00 |  101331 | WINE     |       0 |          1
+ 2015-04-15 02:19:00 |  101331 | CHECKOUT |      16 |          1
+ 2015-04-15 02:29:00 |  201881 | LANDING  |       0 |          1
+ 2015-04-15 02:30:00 |  201881 | BEER     |       0 |          1
+ 2015-04-15 01:05:00 |  202201 | LANDING  |       0 |          1
+ 2015-04-15 01:06:00 |  202201 | HELP     |       0 |          1
+ 2015-04-15 01:09:00 |  202201 | LANDING  |       0 |          1
+ 2015-04-15 02:15:00 |  202201 | WINE     |       0 |          2
+ 2015-04-15 02:16:00 |  202201 | BEER     |       0 |          2
+ 2015-04-15 02:17:00 |  202201 | WINE     |       0 |          2
+ 2015-04-15 03:18:00 |  202201 | BEER     |       0 |          3
+ 2015-04-15 03:19:00 |  202201 | WINE     |       0 |          3
+ 2015-04-15 03:22:00 |  202201 | CHECKOUT |      21 |          3
+(21 rows)
+</pre><p>Now let's say we want to see 3 minute sessions by a group of users with a certain range of user IDs. To do this, we need to sessionize the table based on a partition expression. Also, we want to persist a table output with a reduced set of columns in the table. </p><pre class="example">
+ DROP TABLE IF EXISTS sessionize_output_table;
+ SELECT madlib.sessionize(
+     'eventlog',                    -- Name of input table
+     'sessionize_output_table',     -- Table to store sessionize results
+     'user_id &lt; 200000',            -- Partition input table by subset of users
+     'event_timestamp',             -- Order partitions in input table by time
+     '180',                         -- Use 180 second time out to define sessions (same as '0:03:0')
+     'event_timestamp, user_id, user_id &lt; 200000 AS "Department-A1"',    -- Select only user_id and event_timestamp columns, along with the session id as output
+     'f'                            -- create a table
+     );
+ SELECT * FROM sessionize_output_table WHERE "Department-A1"='TRUE' ORDER BY event_timestamp;
+</pre><p>Result showing 2 users and 3 total sessions across the group: </p><pre class="result">
+   event_timestamp   | user_id | Department-A1 | session_id
+---------------------+---------+---------------+------------
+ 2015-04-15 01:03:00 |  100821 | t             |          1
+ 2015-04-15 01:04:00 |  100821 | t             |          1
+ 2015-04-15 01:05:00 |  100821 | t             |          1
+ 2015-04-15 02:06:00 |  100821 | t             |          2
+ 2015-04-15 02:09:00 |  100821 | t             |          2
+ 2015-04-15 02:15:00 |  101331 | t             |          3
+ 2015-04-15 02:16:00 |  101331 | t             |          3
+ 2015-04-15 02:17:00 |  101331 | t             |          3
+ 2015-04-15 02:18:00 |  101331 | t             |          3
+ 2015-04-15 02:19:00 |  101331 | t             |          3
+(10 rows)
+</pre><p><a class="anchor" id="literature"></a></p><dl class="section user"><dt>Literature</dt><dd></dd></dl>
+<p>NOTE: The following PostgreSQL link refers to documentation resources for the current PostgreSQL database version. Depending upon your database platform version, you may need to change "current" reference in the link to your database version.</p>
+<p>If your database platform uses the Greenplum Database (or related variants), please check with the project community and/or your database vendor to identify the PostgreSQL version it is based on.</p>
+<p>[1] Sesssions in web analytics <a href="https://en.wikipedia.org/wiki/Session_(web_analytics)">https://en.wikipedia.org/wiki/Session_(web_analytics)</a></p>
+<p>[2] PostgreSQL date/time types <a href="https://www.postgresql.org/docs/current/static/datatype-datetime.html">https://www.postgresql.org/docs/current/static/datatype-datetime.html</a> </p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__sketches.html b/docs/rc/group__grp__sketches.html
new file mode 100644
index 0000000..e851b6e
--- /dev/null
+++ b/docs/rc/group__grp__sketches.html
@@ -0,0 +1,160 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Cardinality Estimators</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__sketches.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#groups">Modules</a>  </div>
+  <div class="headertitle">
+<div class="title">Cardinality Estimators<div class="ingroups"><a class="el" href="group__grp__stats.html">Statistics</a> &raquo; <a class="el" href="group__grp__desc__stats.html">Descriptive Statistics</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>A collection of methods to estimate the number of unique values contained in the data.</p>
+<p>Sketches (sometimes called "synopsis data structures") are small randomized in-memory data structures that capture statistical properties of a large set of values (e.g., a column of a table). Sketches can be formed in a single pass of the data, and used to approximate a variety of descriptive statistics.</p>
+<p>We implement sketches as SQL User-Defined Aggregates (UDAs). Because they are single-pass, small-space and parallelized, a single query can use many sketches to gather summary statistics on many columns of a table efficiently.</p>
+<p>This module currently implements user-defined aggregates based on three main sketch methods:</p><ul>
+<li><em>Count-Min (CM)</em> sketches, which can be used to approximate a number of descriptive statistics including<ul>
+<li><code>COUNT</code> of rows whose column value matches a given value in a set</li>
+<li><code>COUNT</code> of rows whose column value falls in a range (*)</li>
+<li>order statistics including <em>median</em> and <em>centiles</em> (*)</li>
+<li><em>histograms</em>: both <em>equi-width</em> and <em>equi-depth</em> (*)</li>
+</ul>
+</li>
+<li><em>Flajolet-Martin (FM)</em> sketches for approximating <code>COUNT(DISTINCT)</code>.</li>
+<li><em>Most Frequent Value (MFV)</em> sketches, which output the most frequently-occuring values in a column, along with their associated counts.</li>
+</ul>
+<p><em>Note:</em> Features marked with a star (*) only work for discrete types that can be cast to int8.</p>
+<p>The sketch methods consist of a number of SQL UDAs (user-defined aggregates) and UDFs (user-defined functions), to be used directly in SQL queries. </p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group__grp__countmin"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__countmin.html">CountMin (Cormode-Muthukrishnan)</a></td></tr>
+<tr class="memdesc:group__grp__countmin"><td class="mdescLeft">&#160;</td><td class="mdescRight">Implements Cormode-Mathukrishnan <em>CountMin</em> sketches on integer values as a user-defined aggregate. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__fmsketch"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__fmsketch.html">FM (Flajolet-Martin)</a></td></tr>
+<tr class="memdesc:group__grp__fmsketch"><td class="mdescLeft">&#160;</td><td class="mdescRight">Implements Flajolet-Martin's distinct count estimation as a user-defined aggregate. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__mfvsketch"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__mfvsketch.html">MFV (Most Frequent Values)</a></td></tr>
+<tr class="memdesc:group__grp__mfvsketch"><td class="mdescLeft">&#160;</td><td class="mdescRight">Implements the most frequent values variant of the CountMin sketch as a user-defined aggregate. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__sketches.js b/docs/rc/group__grp__sketches.js
new file mode 100644
index 0000000..1e443dd
--- /dev/null
+++ b/docs/rc/group__grp__sketches.js
@@ -0,0 +1,6 @@
+var group__grp__sketches =
+[
+    [ "CountMin (Cormode-Muthukrishnan)", "group__grp__countmin.html", null ],
+    [ "FM (Flajolet-Martin)", "group__grp__fmsketch.html", null ],
+    [ "MFV (Most Frequent Values)", "group__grp__mfvsketch.html", null ]
+];
\ No newline at end of file
diff --git a/docs/rc/group__grp__sparse__linear__solver.html b/docs/rc/group__grp__sparse__linear__solver.html
new file mode 100644
index 0000000..d655df7
--- /dev/null
+++ b/docs/rc/group__grp__sparse__linear__solver.html
@@ -0,0 +1,354 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Sparse Linear Systems</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__sparse__linear__solver.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Sparse Linear Systems<div class="ingroups"><a class="el" href="group__grp__other__functions.html">Utilities</a> &raquo; <a class="el" href="group__grp__linear__solver.html">Linear Solvers</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li class="level1">
+<a href="#sls_usage">Solution Function</a> </li>
+<li class="level1">
+<a href="#sls_opt_params">Optimizer Parameters</a> </li>
+<li class="level1">
+<a href="#sls_output">Output Tables</a> </li>
+<li class="level1">
+<a href="#sls_examples">Examples</a> </li>
+<li>
+<a href="related">Related Topics</a> </li>
+</ul>
+</div><p>The sparse linear systems module implements solution methods for systems of consistent linear equations. Systems of linear equations take the form: </p><p class="formulaDsp">
+\[ Ax = b \]
+</p>
+<p>where \(x \in \mathbb{R}^{n}\), \(A \in \mathbb{R}^{m \times n} \) and \(b \in \mathbb{R}^{m}\). This module accepts sparse matrix input formats for \(A\) and \(b\). We assume that there are no rows of \(A\) where all elements are zero.</p>
+<dl class="section note"><dt>Note</dt><dd>Algorithms with fail if there is an row of the input matrix containing all zeros.</dd></dl>
+<p>The algorithms implemented in this module can handle large sparse square linear systems. Currently, the algorithms implemented in this module solve the linear system using direct or iterative methods.</p>
+<p><a class="anchor" id="sls_usage"></a></p><dl class="section user"><dt>Sparse Linear Systems Solution Function</dt><dd></dd></dl>
+<pre class="syntax">
+linear_solver_sparse( tbl_source_lhs,
+                      tbl_source_rhs,
+                      tbl_result,
+                      lhs_row_id,
+                      lhs_col_id,
+                      lhs_value,
+                      rhs_row_id,
+                      rhs_value,
+                      grouping_cols := NULL,
+                      optimizer := 'direct',
+                      optimizer_params :=
+                      'algorithm = llt'
+                    )
+</pre><p> <b>Arguments</b> </p><dl class="arglist">
+<dt>tbl_source_lhs </dt>
+<dd><p class="startdd">The name of the table containing the left hand side matrix. For the LHS matrix, the input data is expected to be of the following form: </p><pre>
+{TABLE|VIEW} <em>sourceName</em> (
+    ...
+    <em>row_id</em> FLOAT8,
+    <em>col_id</em> FLOAT8,
+    <em>value</em> FLOAT8,
+    ...
+)</pre><p> Each row represents a single equation. The <em>rhs</em> columns refer to the right hand side of the equations and the <em>lhs</em> columns refer to the multipliers on the variables on the left hand side of the same equations. </p>
+<p class="enddd"></p>
+</dd>
+<dt>tbl_source_rhs </dt>
+<dd><p class="startdd">TEXT. The name of the table containing the right hand side vector. For the RHS matrix, the input data is expected to be of the following form: </p><pre class="fragment">{TABLE|VIEW} &lt;em&gt;sourceName&lt;/em&gt; (
+    ...
+    &lt;em&gt;row_id&lt;/em&gt; FLOAT8,
+    &lt;em&gt;value&lt;/em&gt; FLOAT8
+    ...
+)</pre><p> Each row represents a single equation. The <em>rhs</em> columns refer to the right hand side of the equations while the <em>lhs</em> columns refers to the multipliers on the variables on the left hand side of the same equations. </p>
+<p class="enddd"></p>
+</dd>
+<dt>tbl_result </dt>
+<dd><p class="startdd">TEXT. The name of the table where the output is saved. Output is stored in the tabled named by the <em>tbl_result</em> argument. The table contains the following columns. The output contains the following columns: </p><table class="output">
+<tr>
+<th>solution </th><td>FLOAT8[]. The solution is an array with the variables in the same order as that provided as input in the 'left_hand_side' column name of the 'source_table'   </td></tr>
+<tr>
+<th>residual_norm </th><td>FLOAT8. Scaled residual norm, defined as \( \frac{|Ax - b|}{|b|} \). This value is an indication of the accuracy of the solution.   </td></tr>
+<tr>
+<th>iters </th><td>INTEGER. Number of iterations required by the algorithm (only applicable for iterative algorithms) . The output is NULL for 'direct' methods.   </td></tr>
+</table>
+<p class="enddd"></p>
+</dd>
+<dt>lhs_row_id </dt>
+<dd>TEXT. The name of the column storing the 'row id' of the equations. <dl class="section note"><dt>Note</dt><dd>For a system with N equations, the row_id's must be a continuous range of integers from \( 0 \ldots n-1 \).</dd></dl>
+</dd>
+<dt>lhs_col_id </dt>
+<dd><p class="startdd">TEXT. The name of the column (in tbl_source_lhs) storing the 'col id' of the equations.</p>
+<p class="enddd"></p>
+</dd>
+<dt>lhs_value </dt>
+<dd><p class="startdd">TEXT. The name of the column (in tbl_source_lhs) storing the 'value' of the equations.</p>
+<p class="enddd"></p>
+</dd>
+<dt>rhs_row_id </dt>
+<dd><p class="startdd">TEXT. The name of the column (in tbl_source_rhs) storing the 'col id' of the equations.</p>
+<p class="enddd"></p>
+</dd>
+<dt>rhs_value </dt>
+<dd><p class="startdd">TEXT. The name of the column (in tbl_source_rhs) storing the 'value' of the equations.</p>
+<p class="enddd"></p>
+</dd>
+<dt>num_vars </dt>
+<dd><p class="startdd">INTEGER. The number of variables in the linear system equations.</p>
+<p class="enddd"></p>
+</dd>
+<dt>grouping_col (optional)  </dt>
+<dd>TEXT, default: NULL. Group by column names. <dl class="section note"><dt>Note</dt><dd>The grouping feature is currently not implemented and this parameter is only a placeholder.</dd></dl>
+</dd>
+<dt>optimizer (optional)  </dt>
+<dd><p class="startdd">TEXT, default: 'direct'. Type of optimizer.</p>
+<p class="enddd"></p>
+</dd>
+<dt>optimizer_params (optional) </dt>
+<dd>TEXT, default: NULL. Optimizer specific parameters. </dd>
+</dl>
+<p><a class="anchor" id="sls_opt_params"></a></p><dl class="section user"><dt>Optimizer Parameters</dt><dd></dd></dl>
+<p>For each optimizer, there are specific parameters that can be tuned for better performance.</p>
+<dl class="arglist">
+<dt>algorithm (default: ldlt) </dt>
+<dd><p class="startdd"></p>
+<p>There are several algorithms that can be classified as 'direct' methods of solving linear systems. Madlib functions provide various algorithmic options available for users.</p>
+<p>The following table provides a guideline on the choice of algorithm based on conditions on the A matrix, speed of the algorithms and numerical stability.</p>
+<pre class="fragment">    Algorithm          | Conditions on A  | Speed | Memory
+    ----------------------------------------------------------
+    llt                | Sym. Pos Def     |  ++   |  ---
+    ldlt               | Sym. Pos Def     |  ++   |  ---
+
+    For speed '++' is faster than '+', which is faster than '-'.
+    For accuracy '+++' is better than '++'.
+    For memory, '-' uses less memory than '--'.
+
+    Note: ldlt is often preferred over llt
+</pre><p>There are several algorithms that can be classified as 'iterative' methods of solving linear systems. Madlib functions provide various algorithmic options available for users.</p>
+<p>The following table provides a guideline on the choice of algorithm based on conditions on the A matrix, speed of the algorithms and numerical stability.</p>
+<pre class="fragment">    Algorithm            | Conditions on A  | Speed | Memory | Convergence
+    ----------------------------------------------------------------------
+    cg-mem               | Sym. Pos Def     |  +++  |   -    |    ++
+    bicgstab-mem         | Square           |  ++   |   -    |    +
+    precond-cg-mem       | Sym. Pos Def     |  ++   |   -    |    +++
+    precond-bicgstab-mem | Square           |  +    |   -    |    ++
+
+    For memory, '-' uses less memory than '--'.
+    For speed, '++' is faster than '+'.
+</pre><p>Algorithm Details: </p><table class="output">
+<tr>
+<th>cg-mem</th><td>In memory conjugate gradient with diagonal preconditioners.  </td></tr>
+<tr>
+<th>bicgstab-mem</th><td>Bi-conjugate gradient (equivalent to performing CG on the least squares formulation of Ax=b) with incomplete LU preconditioners.  </td></tr>
+<tr>
+<th>precond-cg-mem</th><td>In memory conjugate gradient with diagonal preconditioners.  </td></tr>
+<tr>
+<th>bicgstab-mem</th><td>Bi-conjugate gradient (equivalent to performing CG on the least squares formulation of Ax=b) with incomplete LU preconditioners.  </td></tr>
+</table>
+<p class="enddd"></p>
+</dd>
+<dt>toler (default: 1e-5) </dt>
+<dd><p class="startdd">Termination tolerance (applicable only for iterative methods) which determines the stopping criterion (with respect to residual norm) for iterative methods. </p>
+<p class="enddd"></p>
+</dd>
+</dl>
+<p><a class="anchor" id="sls_examples"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<ol type="1">
+<li>View online help for the sparse linear systems solver function. <pre class="example">
+SELECT madlib.linear_solver_sparse();
+</pre></li>
+<li>Create the sample data set. <pre class="example">
+DROP TABLE IF EXISTS sparse_linear_systems_lhs;
+CREATE TABLE sparse_linear_systems_lhs (
+    rid INTEGER NOT NULL,
+    cid  INTEGER,
+    val DOUBLE PRECISION
+);
+DROP TABLE IF EXISTS sparse_linear_systems_rhs;
+CREATE TABLE sparse_linear_systems_rhs (
+    rid INTEGER NOT NULL,
+    val DOUBLE PRECISION
+);
+INSERT INTO sparse_linear_systems_lhs(rid, cid, val) VALUES
+(0, 0, 1),
+(1, 1, 1),
+(2, 2, 1),
+(3, 3, 1);
+INSERT INTO sparse_linear_systems_rhs(rid, val) VALUES
+(0, 10),
+(1, 20),
+(2, 30);
+</pre></li>
+<li>Solve the linear systems with default parameters. <pre class="example">
+SELECT madlib.linear_solver_sparse( 'sparse_linear_systems_lhs',
+                                    'sparse_linear_systems_rhs',
+                                    'output_table',
+                                    'rid',
+                                    'cid',
+                                    'val',
+                                    'rid',
+                                    'val',
+                                    4
+                                  );
+</pre></li>
+<li>View the contents of the output table. <pre class="example">
+\x on
+SELECT * FROM output_table;
+</pre> Result: <pre class="result">
+--------------------+-------------------------------------
+solution            | {10,20,30,0}
+residual_norm       | 0
+iters               | NULL
+</pre></li>
+<li>Choose a different algorithm than the default algorithm. <pre class="example">
+DROP TABLE IF EXISTS output_table;
+SELECT madlib.linear_solver_sparse( 'sparse_linear_systems_lhs',
+                                    'sparse_linear_systems_rhs',
+                                    'output_table',
+                                    'rid',
+                                    'cid',
+                                    'val',
+                                    'rid',
+                                    'val',
+                                    4,
+                                    NULL,
+                                    'direct',
+                                    'algorithm=llt'
+                                  );
+</pre></li>
+<li>Choose a different algorithm than the default algorithm. <pre class="example">
+DROP TABLE IF EXISTS output_table;
+SELECT madlib.linear_solver_sparse(
+                                    'sparse_linear_systems_lhs',
+                                    'sparse_linear_systems_rhs',
+                                    'output_table',
+                                    'rid',
+                                    'cid',
+                                    'val',
+                                    'rid',
+                                    'val',
+                                    4,
+                                    NULL,
+                                    'iterative',
+                                    'algorithm=cg-mem, toler=1e-5'
+                                  );
+</pre></li>
+</ol>
+<p><a class="anchor" id="related"></a></p><dl class="section user"><dt>Related Topics</dt><dd>File sparse_linear_sytems.sql_in documenting the SQL functions.</dd></dl>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:59 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__sssp.html b/docs/rc/group__grp__sssp.html
new file mode 100644
index 0000000..738e35c
--- /dev/null
+++ b/docs/rc/group__grp__sssp.html
@@ -0,0 +1,364 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Single Source Shortest Path</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__sssp.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Single Source Shortest Path<div class="ingroups"><a class="el" href="group__grp__graph.html">Graph</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li>
+<a href="#sssp">SSSP</a> </li>
+<li>
+<a href="#notes">Notes</a> </li>
+<li>
+<a href="#examples">Examples</a> </li>
+<li>
+<a href="#literature">Literature</a> </li>
+</ul>
+</div><p>Given a graph and a source vertex, the single source shortest path (SSSP) algorithm finds a path from the source vertex to every other vertex in the graph, such that the sum of the weights of the path edges is minimized.</p>
+<p><a class="anchor" id="sssp"></a></p><dl class="section user"><dt>SSSP</dt><dd><pre class="syntax">
+graph_sssp( vertex_table,
+            vertex_id,
+            edge_table,
+            edge_args,
+            source_vertex,
+            out_table,
+            grouping_cols
+          )
+</pre></dd></dl>
+<p><b>Arguments</b> </p><dl class="arglist">
+<dt>vertex_table </dt>
+<dd><p class="startdd">TEXT. Name of the table containing the vertex data for the graph. Must contain the column specified in the 'vertex_id' parameter below.</p>
+<p class="enddd"></p>
+</dd>
+<dt>vertex_id </dt>
+<dd><p class="startdd">TEXT, default = 'id'. Name of the column in 'vertex_table' containing vertex ids. The vertex ids are of type BIGINT with no duplicates. They do not need to be contiguous.</p>
+<p class="enddd"></p>
+</dd>
+<dt>edge_table </dt>
+<dd><p class="startdd">TEXT. Name of the table containing the edge data. The edge table must contain columns for source vertex, destination vertex and edge weight. Column naming convention is described below in the 'edge_args' parameter.</p>
+<p class="enddd"></p>
+</dd>
+<dt>edge_args </dt>
+<dd><p class="startdd">TEXT. A comma-delimited string containing multiple named arguments of the form "name=value". The following parameters are supported for this string argument:</p><ul>
+<li>src (BIGINT): Name of the column containing the source vertex ids in the edge table. Default column name is 'src'.</li>
+<li>dest (BIGINT): Name of the column containing the destination vertex ids in the edge table. Default column name is 'dest'.</li>
+<li>weight (FLOAT8): Name of the column containing the edge weights in the edge table. Default column name is 'weight'.</li>
+</ul>
+<p class="enddd"></p>
+</dd>
+<dt>source_vertex </dt>
+<dd><p class="startdd">BIGINT. The source vertex id for the algorithm to start. This vertex id must exist in the 'vertex_id' column of 'vertex_table'.</p>
+<p class="enddd"></p>
+</dd>
+<dt>out_table </dt>
+<dd><p class="startdd">TEXT. Name of the table to store the result of SSSP. It contains a row for every vertex of every group and have the following columns (in addition to the grouping columns):</p><ul>
+<li>vertex_id : The id for the destination. Will use the input parameter 'vertex_id' for column naming.</li>
+<li>weight : The total weight of the shortest path from the source vertex to this particular vertex. Will use the input parameter 'weight' for column naming.</li>
+<li>parent : The parent of this vertex in the shortest path from source. Will use 'parent' for column naming.</li>
+</ul>
+<p>A summary table named &lt;out_table&gt;_summary is also created. This is an internal table that keeps a record of the input parameters and is used by the path function described below. </p>
+<p class="enddd"></p>
+</dd>
+<dt>grouping_cols (optional) </dt>
+<dd>TEXT, default = NULL. List of columns used to group the input into discrete subgraphs. These columns must exist in the edge table. When this value is null, no grouping is used and a single SSSP result is generated.  </dd>
+</dl>
+<dl class="section note"><dt>Note</dt><dd>On a Greenplum cluster, the edge table should be distributed by the source vertex id column for better performance.</dd></dl>
+<dl class="section user"><dt>Path Retrieval</dt><dd></dd></dl>
+<p>The path retrieval function returns the shortest path from the source vertex to a specified desination vertex.</p>
+<pre class="syntax">
+graph_sssp_get_path( sssp_table,
+                     dest_vertex,
+                     path_table
+                    )
+</pre><p><b>Arguments</b> </p><dl class="arglist">
+<dt>sssp_table </dt>
+<dd><p class="startdd">TEXT. Name of the table that contains the SSSP output.</p>
+<p class="enddd"></p>
+</dd>
+<dt>dest_vertex </dt>
+<dd><p class="startdd">BIGINT. The vertex that will be the destination of the desired path.</p>
+<p class="enddd"></p>
+</dd>
+<dt>path_table </dt>
+<dd><p class="startdd">TEXT. Name of the output table that contains the path. It contains a row for every group and has the following columns:</p><ul>
+<li>grouping_cols : The grouping columns given in the creation of the SSSP table. If there are no grouping columns, these columns will not exist and the table will have a single row.</li>
+<li>path (ARRAY) : The shortest path from the source vertex (as specified in the SSSP execution) to the destination vertex. </li>
+</ul>
+<p class="enddd"></p>
+</dd>
+</dl>
+<p><a class="anchor" id="notes"></a></p><dl class="section user"><dt>Notes</dt><dd></dd></dl>
+<p>The Bellman-Ford algorithm [1] is used to implement SSSP. This algorithm allows negative edges but not negative cycles. In the case of graphs with negative cycles, an error will be given and no output table will be generated.</p>
+<p>Also see the Grail project [2] for more background on graph analytics processing in relational databases.</p>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<ol type="1">
+<li>Create vertex and edge tables to represent the graph: <pre class="syntax">
+DROP TABLE IF EXISTS vertex, edge;
+CREATE TABLE vertex(
+        id INTEGER
+        );
+CREATE TABLE edge(
+        src INTEGER,
+        dest INTEGER,
+        weight FLOAT8
+        );
+INSERT INTO vertex VALUES
+(0),
+(1),
+(2),
+(3),
+(4),
+(5),
+(6),
+(7);
+INSERT INTO edge VALUES
+(0, 1, 1.0),
+(0, 2, 1.0),
+(0, 4, 10.0),
+(1, 2, 2.0),
+(1, 3, 10.0),
+(2, 3, 1.0),
+(2, 5, 1.0),
+(2, 6, 3.0),
+(3, 0, 1.0),
+(4, 0, -2.0),
+(5, 6, 1.0),
+(6, 7, 1.0);
+</pre></li>
+<li>Calculate the shortest paths from vertex 0: <pre class="syntax">
+DROP TABLE IF EXISTS out, out_summary;
+SELECT madlib.graph_sssp(
+                         'vertex',      -- Vertex table
+                         NULL,          -- Vertix id column (NULL means use default naming)
+                         'edge',        -- Edge table
+                         NULL,          -- Edge arguments (NULL means use default naming)
+                         0,             -- Source vertex for path calculation
+                         'out');        -- Output table of shortest paths
+SELECT * FROM out ORDER BY id;
+</pre> <pre class="result">
+ id | weight | parent
+----+--------+--------
+  0 |      0 |      0
+  1 |      1 |      0
+  2 |      1 |      0
+  3 |      2 |      2
+  4 |     10 |      0
+  5 |      2 |      2
+  6 |      3 |      5
+  7 |      4 |      6
+(8 rows)
+</pre></li>
+<li>Get the shortest path to vertex 5: <pre class="syntax">
+DROP TABLE IF EXISTS out_path;
+SELECT madlib.graph_sssp_get_path('out',5,'out_path');
+SELECT * FROM out_path;
+</pre> <pre class="result">
+  path
+---------
+ {0,2,5}
+</pre></li>
+<li>Now let's do a similar example except using different column names in the tables (i.e., not the defaults). Create the vertex and edge tables: <pre class="syntax">
+DROP TABLE IF EXISTS vertex_alt, edge_alt;
+CREATE TABLE vertex_alt AS SELECT id AS v_id FROM vertex;
+CREATE TABLE edge_alt AS SELECT src AS e_src, dest, weight AS e_weight FROM edge;
+</pre></li>
+<li>Get the shortest path from vertex 1: <pre class="syntax">
+DROP TABLE IF EXISTS out_alt, out_alt_summary;
+SELECT madlib.graph_sssp(
+                         'vertex_alt',                  -- Vertex table
+                         'v_id',                        -- Vertex id column (NULL means use default naming)
+                         'edge_alt',                    -- Edge table
+                         'src=e_src, weight=e_weight',  -- Edge arguments (NULL means use default naming)
+                         1,                             -- Source vertex for path calculation
+                         'out_alt');                    -- Output table of shortest paths
+SELECT * FROM out_alt ORDER BY v_id;
+</pre> <pre class="result">
+ v_id | e_weight | parent
+------+----------+--------
+    0 |        4 |      3
+    1 |        0 |      1
+    2 |        2 |      1
+    3 |        3 |      2
+    4 |       14 |      0
+    5 |        3 |      2
+    6 |        4 |      5
+    7 |        5 |      6
+(8 rows)
+</pre></li>
+<li>Create a graph with 2 groups: <pre class="syntax">
+DROP TABLE IF EXISTS edge_gr;
+CREATE TABLE edge_gr AS
+(
+  SELECT *, 0 AS grp FROM edge
+  UNION
+  SELECT *, 1 AS grp FROM edge WHERE src &lt; 6 AND dest &lt; 6
+);
+INSERT INTO edge_gr VALUES
+(4,5,-20,1);
+</pre></li>
+<li>Find SSSP for all groups <pre class="syntax">
+DROP TABLE IF EXISTS out_gr, out_gr_summary;
+SELECT madlib.graph_sssp(
+                         'vertex',      -- Vertex table
+                         NULL,          -- Vertex id column (NULL means use default naming)
+                         'edge_gr',     -- Edge table
+                         NULL,          -- Edge arguments (NULL means use default naming)
+                         0,             -- Source vertex for path calculation
+                         'out_gr',      -- Output table of shortest paths
+                         'grp'          -- Grouping columns
+);
+SELECT * FROM out_gr ORDER BY grp,id;
+</pre> <pre class="result">
+ grp | id | weight | parent
+-----+----+--------+--------
+   0 |  0 |      0 |      0
+   0 |  1 |      1 |      0
+   0 |  2 |      1 |      0
+   0 |  3 |      2 |      2
+   0 |  4 |     10 |      0
+   0 |  5 |      2 |      2
+   0 |  6 |      3 |      5
+   0 |  7 |      4 |      6
+   1 |  0 |      0 |      0
+   1 |  1 |      1 |      0
+   1 |  2 |      1 |      0
+   1 |  3 |      2 |      2
+   1 |  4 |     10 |      0
+   1 |  5 |    -10 |      4
+</pre></li>
+<li>Find the path to vertex 5 in every group <pre class="syntax">
+DROP TABLE IF EXISTS out_gr_path;
+SELECT madlib.graph_sssp_get_path('out_gr',5,'out_gr_path');
+SELECT * FROM out_gr_path ORDER BY grp;
+</pre> <pre class="result">
+ grp |  path
+-----+---------
+   0 | {0,2,5}
+   1 | {0,4,5}
+</pre></li>
+</ol>
+<p><a class="anchor" id="literature"></a></p><dl class="section user"><dt>Literature</dt><dd></dd></dl>
+<p>[1] Bellman–Ford algorithm. <a href="https://en.wikipedia.org/wiki/Bellman%E2%80%93Ford_algorithm">https://en.wikipedia.org/wiki/Bellman%E2%80%93Ford_algorithm</a></p>
+<p>[2] The case against specialized graph analytics engines, J. Fan, G. Soosai Raj, and J. M. Patel. CIDR 2015. <a href="http://cidrdb.org/cidr2015/Papers/CIDR15_Paper20.pdf">http://cidrdb.org/cidr2015/Papers/CIDR15_Paper20.pdf</a> </p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__stats.html b/docs/rc/group__grp__stats.html
new file mode 100644
index 0000000..cf341d6
--- /dev/null
+++ b/docs/rc/group__grp__stats.html
@@ -0,0 +1,145 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Statistics</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__stats.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#groups">Modules</a>  </div>
+  <div class="headertitle">
+<div class="title">Statistics</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>A collection of probability and statistics modules. </p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group__grp__desc__stats"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__desc__stats.html">Descriptive Statistics</a></td></tr>
+<tr class="memdesc:group__grp__desc__stats"><td class="mdescLeft">&#160;</td><td class="mdescRight">Methods to compute descriptive statistics of a dataset. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__inf__stats"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__inf__stats.html">Inferential Statistics</a></td></tr>
+<tr class="memdesc:group__grp__inf__stats"><td class="mdescLeft">&#160;</td><td class="mdescRight">Methods to compute inferential statistics of a dataset. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__prob"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__prob.html">Probability Functions</a></td></tr>
+<tr class="memdesc:group__grp__prob"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provides cumulative distribution, density/mass, and quantile functions for a wide range of probability distributions. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__stats.js b/docs/rc/group__grp__stats.js
new file mode 100644
index 0000000..0828141
--- /dev/null
+++ b/docs/rc/group__grp__stats.js
@@ -0,0 +1,6 @@
+var group__grp__stats =
+[
+    [ "Descriptive Statistics", "group__grp__desc__stats.html", "group__grp__desc__stats" ],
+    [ "Inferential Statistics", "group__grp__inf__stats.html", "group__grp__inf__stats" ],
+    [ "Probability Functions", "group__grp__prob.html", null ]
+];
\ No newline at end of file
diff --git a/docs/rc/group__grp__stats__tests.html b/docs/rc/group__grp__stats__tests.html
new file mode 100644
index 0000000..786f06b
--- /dev/null
+++ b/docs/rc/group__grp__stats__tests.html
@@ -0,0 +1,541 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Hypothesis Tests</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__stats__tests.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Hypothesis Tests<div class="ingroups"><a class="el" href="group__grp__stats.html">Statistics</a> &raquo; <a class="el" href="group__grp__inf__stats.html">Inferential Statistics</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li>
+<a href="#input">Input</a> </li>
+<li>
+<a href="#usage">Usage</a> </li>
+<li>
+<a href="#examples">Examples</a> </li>
+<li>
+<a href="#literature">Literature</a> </li>
+<li>
+<a href="#related">Related Topics</a> </li>
+</ul>
+</div><p>Hypothesis tests are used to confirm or reject a <em>null hypothesis</em> \( H_0 \) about the distribution of random variables, given realizations of these random variables. Since in general it is not possible to make statements with certainty, one is interested in the probability \( p \) of seeing random variates at least as extreme as the ones observed, assuming that \( H_0 \) is true. If this probability \( p \) is small, \( H_0 \) will be rejected by the test with <em>significance level</em> \( p \). Falsifying \( H_0 \) is the canonic goal when employing a hypothesis test. That is, hypothesis tests are typically used in order to substantiate that instead the <em>alternative hypothesis</em> \( H_1 \) is true.</p>
+<p>Hypothesis tests may be divided into parametric and non-parametric tests. A parametric test assumes certain distributions and makes inferences about parameters of the distributions (e.g., the mean of a normal distribution). Formally, there is a given domain of possible parameters \( \Gamma \) and the null hypothesis \( H_0 \) is the event that the true parameter \( \gamma_0 \in \Gamma_0 \), where \( \Gamma_0 \subsetneq \Gamma \). Non-parametric tests, on the other hand, do not assume any particular distribution of the sample (e.g., a non-parametric test may simply test if two distributions are similar).</p>
+<p>The first step of a hypothesis test is to compute a <em>test statistic</em>, which is a function of the random variates, i.e., a random variate itself. A hypothesis test relies on the distribution of the test statistic being (approximately) known. Now, the \( p \)-value is the probability of seeing a test statistic at least as extreme as the one observed, assuming that \( H_0 \) is true. In a case where the null hypothesis corresponds to a family of distributions (e.g., in a parametric test where \( \Gamma_0 \) is not a singleton set), the \( p \)-value is the supremum, over all possible distributions according to the null hypothesis, of these probabilities.</p>
+<dl class="section note"><dt>Note</dt><dd>Please refer to <a class="el" href="hypothesis__tests_8sql__in.html">hypothesis_tests.sql_in</a> for additional technical information on the MADlib implementation of hypothesis tests, and for detailed function signatures for all tests.</dd></dl>
+<p><a class="anchor" id="input"></a></p><dl class="section user"><dt>Input</dt><dd></dd></dl>
+<p>Input data is assumed to be normalized with all values stored row-wise. In general, the following inputs are expected.</p>
+<p><b>One-sample tests</b> expect the following form: </p><pre>{TABLE|VIEW} <em>source</em> (
+    ...
+    <em>value</em> DOUBLE PRECISION
+    ...
+)</pre><p><b>Two-sample tests</b> expect the following form: </p><pre>{TABLE|VIEW} <em>source</em> (
+    ...
+    <em>first</em> BOOLEAN,
+    <em>value</em> DOUBLE PRECISION
+    ...
+)</pre><p> The <code>first</code> column indicates whether a value is from the first sample (if <code>TRUE</code>) or the second sample (if <code>FALSE</code>).</p>
+<p><b>Many-sample tests</b> expect the following form: </p><pre>{TABLE|VIEW} <em>source</em> (
+    ...
+    <em>group</em> INTEGER,
+    <em>value</em> DOUBLE PRECISION
+    ...
+)</pre><p><a class="anchor" id="usage"></a></p><dl class="section user"><dt>Usage</dt><dd></dd></dl>
+<p>All tests are implemented as aggregate functions. The non-parametric (rank-based) tests are implemented as ordered aggregate functions and thus necessitate an <code>ORDER BY</code> clause. In the following, the most simple forms of usage are given. Specific function signatures, as described in <a class="el" href="hypothesis__tests_8sql__in.html">hypothesis_tests.sql_in</a>, may require more arguments or a different <code>ORDER BY</code> clause.</p>
+<ul>
+<li>Run a parametric one-sample test: <pre>SELECT <em>test</em>(<em>value</em>) FROM <em>source</em></pre> where '<em>test</em>' can be one of<ul>
+<li><code>t_test_one</code> (one-sample or dependent paired Student's t-test)</li>
+<li><code>chi2_gof_test</code> (Pearson's chi-squared goodness of fit test, also used for chi-squared independence test as shown in example section below)</li>
+</ul>
+</li>
+<li>Run a parametric two-sample/multi-sample test: <pre>SELECT <em>test</em>(<em>first/group</em>, <em>value</em>) FROM <em>source</em></pre> where '<em>test</em>' can be one of<ul>
+<li><code>f_test</code> (Fisher F-test)</li>
+<li><code>t_test_two_pooled</code> (two-sample pooled Student’s t-test, i.e. equal variances)</li>
+<li><code>t_test_two_unpooled</code> (two-sample unpooled t-test, i.e., unequal variances, also known as Welch's t-test)</li>
+<li><code>one_way_anova</code> (one-way analysis of variance, multi-sample)</li>
+</ul>
+</li>
+<li><p class="startli">Run a non-parametric two-sample/multi-sample test: </p><pre>SELECT <em>test</em>(<em>first/group</em>, <em>value</em> ORDER BY <em>value</em>) FROM <em>source</em></pre><p> where '<em>test</em>' can be one of</p><ul>
+<li><code>ks_test</code> (Kolmogorov-Smirnov test)</li>
+<li><code>mw_test</code> (Mann-Whitney test)</li>
+<li><code>wsr_test</code> (Wilcoxon signed-rank test, multi-sample)</li>
+</ul>
+<p class="startli"><b>Note on non-parametric tests:</b> Kolomogov-Smirnov two-sample test is based on the asymptotic theory. The p-value is given by comparing the test statistics with the Kolomogov distribution. The p-value is also adjusted for data with heavy tail distribution, which may give different results than those given by R function's ks.test. See [3] for a detailed explanation. The literature is not unanimous about the definitions of the Wilcoxon rank sum and Mann-Whitney tests. There are two possible definitions for the statistic; MADlib outputs the minimum of the two and uses it for significance testing. This might give different results for both mw_test and wsr_test compared to statistical functions in other popular packages (like R's wilcox.test function). See [4] for a detailed explanation.</p>
+</li>
+</ul>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<ul>
+<li><b>One-sample and two-sample t-test</b> (data is subset of mpg data from <a href="http://www.itl.nist.gov/div898/handbook/eda/section3/eda352.htm">NIST/SEMATECH</a>)</li>
+</ul>
+<pre class="example">
+-- Load data
+DROP TABLE IF EXISTS auto83b;
+CREATE TABLE auto83b (
+    id SERIAL,
+    mpg_us DOUBLE PRECISION,
+    mpg_j DOUBLE PRECISION
+);
+COPY auto83b (mpg_us, mpg_j) FROM stdin DELIMITER '|';
+18|24
+15|27
+18|27
+16|25
+17|31
+15|35
+14|24
+14|19
+21|31
+10|32
+10|24
+11|26
+9| 9
+\N|32
+\N|37
+\N|38
+\N|34
+\N|34
+\N|32
+\N|33
+\N|32
+\N|25
+\N|24
+\N|37
+13|\N
+12|\N
+18|\N
+21|\N
+19|\N
+21|\N
+15|\N
+16|\N
+15|\N
+11|\N
+20|\N
+21|\N
+19|\N
+15|\N
+\.
+</pre><pre class="example">
+-- Create table for one sample tests
+DROP TABLE IF EXISTS auto83b_one_sample;
+CREATE TABLE auto83b_one_sample AS
+    SELECT mpg_us AS mpg
+    FROM auto83b
+    WHERE mpg_us is not NULL;
+-- Print table
+SELECT * FROM auto83b_one_sample;
+</pre><pre class="result">
+mpg
+  18
+  15
+  18
+  16
+  17
+  15
+  14
+  14
+  21
+  10
+  10
+  11
+   9
+  13
+  12
+  18
+  21
+  19
+  21
+  15
+  16
+  15
+  11
+  20
+  21
+  19
+  15
+(27 rows)
+</pre> <pre class="example">
+-- Create table for two sample tests
+DROP TABLE IF EXISTS auto83b_two_sample;
+CREATE TABLE auto83b_two_sample AS
+SELECT TRUE AS is_us, mpg_us AS mpg
+    FROM auto83b
+    WHERE mpg_us is not NULL
+    UNION ALL
+    SELECT FALSE, mpg_j
+    FROM auto83b
+    WHERE mpg_j is not NULL;
+-- Print table
+SELECT * FROM auto83b_two_sample;
+</pre> <pre class="result">
+ is_us | mpg
+-------+-----
+ t     |  18
+ t     |  15
+ t     |  18
+ t     |  16
+ t     |  17
+ t     |  15
+ t     |  14
+ t     |  14
+ t     |  21
+ t     |  10
+ t     |  10
+ t     |  11
+ t     |   9
+ t     |  13
+ t     |  12
+ t     |  18
+ t     |  21
+ t     |  19
+ t     |  21
+ t     |  15
+ t     |  16
+ t     |  15
+ t     |  11
+ t     |  20
+ t     |  21
+ t     |  19
+ t     |  15
+ f     |  24
+ f     |  27
+ f     |  27
+ f     |  25
+ f     |  31
+ f     |  35
+ f     |  24
+ f     |  19
+ f     |  31
+ f     |  32
+ f     |  24
+ f     |  26
+ f     |   9
+ f     |  32
+ f     |  37
+ f     |  38
+ f     |  34
+ f     |  34
+ f     |  32
+ f     |  33
+ f     |  32
+ f     |  25
+ f     |  24
+ f     |  37
+(51 rows)
+</pre> <pre class="example">
+-- One sample tests
+SELECT (madlib.t_test_one(mpg - 20)).* FROM auto83b_one_sample;  -- test rejected for mean = 20
+</pre><pre class="result">
+     statistic     | df | p_value_one_sided |  p_value_two_sided
+ ------------------+----+-------------------+----------------------
+  -6.0532478722666 | 26 | 0.999998926789141 | 2.14642171769697e-06
+ </pre><pre class="example">
+SELECT (madlib.t_test_one(mpg - 15.7)).* FROM auto83b_one_sample;  -- test not rejected
+</pre><pre class="result">
+       statistic      | df | p_value_one_sided | p_value_two_sided
+ ---------------------+----+-------------------+-------------------
+  0.00521831713126531 | 26 | 0.497938118950661 | 0.995876237901321
+</pre><pre class="example">
+-- Two sample tests
+SELECT (madlib.t_test_two_pooled(is_us, mpg)).* FROM auto83b_two_sample;
+</pre> <pre class="result">
+     statistic     | df | p_value_one_sided |  p_value_two_sided
+ -------------------+----+-------------------+----------------------
+  -8.89342267075968 | 49 | 0.999999999995748 | 8.50408632402377e-12
+ </pre><pre class="example">
+SELECT (madlib.t_test_two_unpooled(is_us, mpg)).* FROM auto83b_two_sample;
+</pre><pre class="result">
+      statistic     |        df        | p_value_one_sided |  p_value_two_sided
+ -------------------+------------------+-------------------+----------------------
+  -8.61746388524314 | 35.1283818346179 | 0.999999999821218 | 3.57563867403599e-10
+</pre><ul>
+<li><b>F-Test</b> (Uses same data as above t-test)</li>
+</ul>
+<pre class="example">
+SELECT (madlib.f_test(is_us, mpg)).* FROM auto83b_two_sample;
+-- Test result indicates that the two distributions have different variances
+</pre> <pre class="result">
+      statistic     | df1 | df2 | p_value_one_sided |  p_value_two_sided
+ -------------------+-----+-----+-------------------+---------------------
+  0.311786921089247 |  26 |  23 | 0.997559863672441 | 0.00488027265511803
+</pre><ul>
+<li><b>Chi-squared goodness-of-fit test</b> (<a href="http://www.statsdirect.com/help/default.htm#nonparametric_methods/chisq_goodness_fit.htm">Data source</a>)</li>
+</ul>
+<pre class="example">
+CREATE TABLE chi2_test_blood_group (
+    id SERIAL,
+    blood_group VARCHAR,
+    observed BIGINT,
+    expected DOUBLE PRECISION
+);
+INSERT INTO chi2_test_blood_group(blood_group, observed, expected) VALUES
+    ('O', 67, 82.28),
+    ('A', 83, 84.15),
+    ('B', 29, 14.96),
+    ('AB', 8, 5.61);
+SELECT (madlib.chi2_gof_test(observed, expected)).* FROM chi2_test_blood_group;
+</pre> <pre class="result">
+     statistic     |       p_value        | df |       phi        | contingency_coef
+ ------------------+----------------------+----+------------------+-------------------
+  17.0481013341976 | 0.000690824622923826 |  3 | 2.06446732440826 | 0.899977280680593
+ </pre><ul>
+<li><b>Chi-squared independence test</b> (<a href="http://itl.nist.gov/div898/software/dataplot/refman1/auxillar/chistest.htm">Data source</a>)</li>
+</ul>
+<p>The Chi-squared independence test uses the Chi-squared goodness-of-fit function, as shown in the example below. The expected value needs to be computed and passed to the goodness-of-fit function. The expected value for MADlib is computed as <em>sum of rows * sum of columns</em>, for each element of the input matrix. For e.g., expected value for element (2,1) would be <em>sum of row 2 * sum of column 1</em>.</p>
+<pre class="example">
+CREATE TABLE chi2_test_friendly (
+    id_x SERIAL,
+    values INTEGER[]
+);
+INSERT INTO chi2_test_friendly(values) VALUES
+    (array[5, 29, 14, 16]),
+    (array[15, 54, 14, 10]),
+    (array[20, 84, 17, 94]),
+    (array[68, 119, 26, 7]);</pre><pre class="example">-- Input table is expected to be unpivoted, so need to pivot it
+CREATE TABLE chi2_test_friendly_unpivoted AS
+SELECT id_x, id_y, values[id_y] AS observed
+FROM
+    chi2_test_friendly,
+    generate_series(1,4) AS id_y;</pre><pre class="example">-- Compute Chi-squared independence statistic, by calculating expected value in the SQL and calling the goodness-of-fit function
+SELECT (madlib.chi2_gof_test(observed, expected, deg_freedom)).*
+FROM (
+    -- Compute expected values and degrees of freedom
+    SELECT
+        observed,
+        sum(observed) OVER (PARTITION BY id_x)::DOUBLE PRECISION *
+        sum(observed) OVER (PARTITION BY id_y) AS expected
+    FROM chi2_test_friendly_unpivoted
+) p, (
+    SELECT
+        (count(DISTINCT id_x) - 1) * (count(DISTINCT id_y) - 1) AS deg_freedom
+    FROM chi2_test_friendly_unpivoted
+) q;
+</pre> <pre class="result">
+     statistic     |       p_value        | df |       phi        | contingency_coef
+ ------------------+----------------------+----+------------------+-------------------
+  138.289841626008 | 2.32528678709871e-25 |  9 | 2.93991753313346 | 0.946730727519112
+ </pre><ul>
+<li><b>ANOVA test</b> (<a href="http://www.itl.nist.gov/div898/handbook/prc/section4/prc433.htm">Data source</a>)</li>
+</ul>
+<pre class="example">
+CREATE TABLE nist_anova_test (
+    id SERIAL,
+    resistance FLOAT8[]
+);
+INSERT INTO nist_anova_test(resistance) VALUES
+    (array[6.9,8.3,8.0]),
+    (array[5.4,6.8,10.5]),
+    (array[5.8,7.8,8.1]),
+    (array[4.6,9.2,6.9]),
+    (array[4.0,6.5,9.3]);</pre><pre class="example">SELECT (madlib.one_way_anova(level, value)).* FROM (
+    SELECT level, resistance[level] AS value
+    FROM
+        nist_anova_test, (SELECT * FROM generate_series(1,3) level) q1
+) q2;
+</pre> <pre class="result">
+  sum_squares_between | sum_squares_within | df_between | df_within | mean_squares_between | mean_squares_within |    statistic     |      p_value
+ ---------------------+--------------------+------------+-----------+----------------------+---------------------+------------------+--------------------
+     27.8973333333333 |             17.452 |          2 |        12 |     13.9486666666667 |    1.45433333333333 | 9.59110703644281 | 0.0032482226008593
+</pre><ul>
+<li><b>Kolmogorov-Smirnov test</b> (<a href="http://www.physics.csbsju.edu/stats/KS-test.html">Data source</a>)</li>
+</ul>
+<pre class="example">
+CREATE TABLE ks_sample_1 AS
+SELECT
+    TRUE AS first,
+    unnest(ARRAY[0.22, -0.87, -2.39, -1.79, 0.37, -1.54, 1.28, -0.31, -0.74, 1.72, 0.38, -0.17, -0.62, -1.10, 0.30, 0.15, 2.30, 0.19, -0.50, -0.09]) AS value
+UNION ALL
+SELECT
+    FALSE,
+    unnest(ARRAY[-5.13, -2.19, -2.43, -3.83, 0.50, -3.25, 4.32, 1.63, 5.18, -0.43, 7.11, 4.87, -3.10, -5.81, 3.76, 6.31, 2.58, 0.07, 5.76, 3.50]);</pre><pre class="example">SELECT (madlib.ks_test(first, value,
+    (SELECT count(value) FROM ks_sample_1 WHERE first),
+    (SELECT count(value) FROM ks_sample_1 WHERE NOT first)
+    ORDER BY value)).*
+FROM ks_sample_1;
+</pre> <pre class="result">
+  statistic |   k_statistic   |      p_value
+ -----------+-----------------+--------------------
+       0.45 | 1.4926782214936 | 0.0232132758544496
+</pre><ul>
+<li><b>Mann-Whitney test</b> (use same data as t-test)</li>
+</ul>
+<pre class="example">
+SELECT (madlib.mw_test(is_us, mpg ORDER BY mpg)).* from auto83b_two_sample;
+-- Note first parameter above is BOOLEAN
+</pre> <pre class="result">
+      statistic     | u_statistic | p_value_one_sided |  p_value_two_sided
+ -------------------+-------------+-------------------+----------------------
+  -5.50097925755249 |        32.5 | 0.999999981115618 | 3.77687645883758e-08
+</pre><ul>
+<li><b>Wilcoxon signed-rank test</b></li>
+</ul>
+<pre class="example">
+DROP TABLE IF EXISTS test_wsr;
+CREATE TABLE test_wsr (
+    x DOUBLE PRECISION,
+    y DOUBLE PRECISION
+);
+COPY test_wsr (x, y) FROM stdin DELIMITER '|';
+0.32|0.39
+0.4|0.47
+0.11|0.11
+0.47|0.43
+0.32|0.42
+0.35|0.3
+0.32|0.43
+0.63|0.98
+0.5|0.86
+0.6|0.79
+0.38|0.33
+0.46|0.45
+0.2|0.22
+0.31|0.3
+0.62|0.6
+0.52|0.53
+0.77|0.85
+0.23|0.21
+0.3|0.33
+0.7|0.57
+0.41|0.43
+0.53|0.49
+0.19|0.2
+0.31|0.35
+0.48|0.4
+\.
+
+SELECT (madlib.wsr_test(
+    x - y,
+    2 * 2^(-52) * greatest(x,y)
+    ORDER BY abs(x - y)
+)).*
+FROM test_wsr;
+</pre> <pre class="result">
+  statistic | rank_sum_pos | rank_sum_neg | num |    z_statistic    | p_value_one_sided | p_value_two_sided
+ -----------+--------------+--------------+-----+-------------------+-------------------+-------------------
+      105.5 |        105.5 |        194.5 |  24 | -1.27318365656729 | 0.898523560667509 | 0.202952878664983
+</pre><p><a class="anchor" id="literature"></a></p><dl class="section user"><dt>Literature</dt><dd></dd></dl>
+<p>[1] M. Hollander, D. Wolfe: <em>Nonparametric Statistical Methods</em>, 2nd edition, Wiley, 1999</p>
+<p>[2] E. Lehmann, J. Romano: <em>Testing Statistical Hypotheses</em>, 3rd edition, Springer, 2005</p>
+<p>[3] M. Stephens: <em>Use of the Kolmogorov-Smirnov, Cramer-Von Mises and related statistics without extensive tables</em>, Journal of the Royal Statistical Society. Series B (Methodological) (1970): 115-122.</p>
+<p>[4] Wikipedia: Mann–Whitney U test calculation, <a href="http://en.wikipedia.org/wiki/Mann-Whitney_test#Calculations">http://en.wikipedia.org/wiki/Mann-Whitney_test#Calculations</a></p>
+<p><a class="anchor" id="related"></a></p><dl class="section user"><dt>Related Topics</dt><dd></dd></dl>
+<p>File <a class="el" href="hypothesis__tests_8sql__in.html" title="SQL functions for statistical hypothesis tests. ">hypothesis_tests.sql_in</a> documenting the SQL functions. </p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__stemmer.html b/docs/rc/group__grp__stemmer.html
new file mode 100644
index 0000000..038abf2
--- /dev/null
+++ b/docs/rc/group__grp__stemmer.html
@@ -0,0 +1,240 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Stemming</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__stemmer.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Stemming<div class="ingroups"><a class="el" href="group__grp__datatrans.html">Data Types and Transformations</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li>
+<a href="#notes">Implementation Notes</a> </li>
+<li>
+<a href="#list">List of Stemmer Operations</a> </li>
+<li>
+<a href="#examples">Examples</a> </li>
+<li>
+<a href="#related">Related Topics</a> </li>
+</ul>
+</div><p>This module provides a basic stemming operation for text input. It is a support module for several machine learning algorithms that require a stemmer. Currently, it only supports English words.</p>
+<p>This function is a SQL interface to the implementation of the <a href="http://tartarus.org/~martin/PorterStemmer/">Porter Stemming Algorithm</a>. The original stemming algorithm is written and maintained by Martin Porter</p>
+<p><a class="anchor" id="notes"></a></p><dl class="section user"><dt>Implementation Notes</dt><dd></dd></dl>
+<p>All functions described in this module work with text OR text array.</p>
+<p>Several of the function require TEXT VALUES, and returns NULL for a NULL input. See details in description of individual functions.</p>
+<p><a class="anchor" id="list"></a></p><dl class="section user"><dt>Stemmer Operations</dt><dd><table class="output">
+<tr>
+<th><a class="el" href="porter__stemmer_8sql__in.html#aca5bc24a9a8f5c33470b9f0bf0b3c515" title="Returns stem of input token. Returns NULL if input token is NULL. ">stem_token()</a></th><td><p class="starttd">Returns the stem of the token. Returns NULL if input is NULL.</p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th><a class="el" href="porter__stemmer_8sql__in.html#a1ac3a2fd645ddf807b36a1328134a4ea" title="Returns stems in an array of input token array. Returns NULL element for corresponding input NULL tok...">stem_token_arr()</a></th><td><p class="starttd">Returns the stems in an array of input token array. The stem would be NULL for corresponding NULL token.</p>
+<p class="endtd"><a class="anchor" id="examples"></a></p>
+</td></tr>
+</table>
+</dd></dl>
+<dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<ol type="1">
+<li>Create a table with some words to be stemmed. <pre class="example">
+CREATE TABLE token_tbl ( id integer,
+                         word text
+                       );
+INSERT INTO token_tbl VALUES
+ (1, 'kneel'),
+ (2, 'kneeled'),
+ (3, 'kneeling'),
+ (4, 'kneels'),
+ (5, 'knees'),
+ (6, 'knell'),
+ (7, 'knelt'),
+ (8, 'knew'),
+ (9, 'knick'),
+ (10, 'knif'),
+ (11, 'knife'),
+ (12, 'knight'),
+ (13, 'knightly'),
+ (14, 'knights'),
+ (15, 'knit'),
+ (16, 'knits'),
+ (17, 'knitted'),
+ (18, 'knitting'),
+ (19, 'knives'),
+ (20, 'knob'),
+ (21, 'knobs'),
+ (22, 'knock'),
+ (23, 'knocked'),
+ (24, 'knocker'),
+ (25, 'knockers'),
+ (26, 'knocking'),
+ (27, 'knocks'),
+ (28, 'knopp'),
+ (29, 'knot'),
+ (30, 'knots');
+</pre></li>
+<li>Return the stem words <pre class="example">
+SELECT madlib.stem_token(word) FROM token_tbl;
+</pre> <pre class="result">
+ stem_token
+&#160;------------
+ kneel
+ kneel
+ kneel
+ kneel
+ knee
+ knell
+ knelt
+ knew
+ knick
+ knif
+ knife
+ knight
+ knight
+ knight
+ knit
+ knit
+ knit
+ knit
+ knive
+ knob
+ knob
+ knock
+ knock
+ knocker
+ knocker
+ knock
+ knock
+ knopp
+ knot
+ knot
+(30 rows)
+</pre></li>
+<li>The input can be processed as an array <pre class="example">
+SELECT madlib.stem_token_arr(array_agg(word order by word)) FROM token_tbl;
+</pre> <pre class="result">
+  stem_token_arr
+&#160;-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ {kneel,kneel,kneel,kneel,knee,knell,knelt,knew,knick,knif,knife,knight,knight,knight,knit,knit,knit,knit,knive,knob,knob,knock,knock,knocker,knocker,knock,knock,knopp,knot,knot}
+(1 row)
+</pre></li>
+</ol>
+<p><a class="anchor" id="related"></a></p><dl class="section user"><dt>Related Topics</dt><dd></dd></dl>
+<p>File <a class="el" href="porter__stemmer_8sql__in.html" title="implementation of porter stemmer operations in SQL ">porter_stemmer.sql_in</a> for list of functions and usage. </p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__strs.html b/docs/rc/group__grp__strs.html
new file mode 100644
index 0000000..8bcf2ae
--- /dev/null
+++ b/docs/rc/group__grp__strs.html
@@ -0,0 +1,262 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Stratified Sampling</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__strs.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Stratified Sampling<div class="ingroups"><a class="el" href="group__grp__sampling.html">Sampling</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li>
+<a href="#strs">Stratified Sampling</a> </li>
+<li>
+<a href="#examples">Examples</a> </li>
+</ul>
+</div><p>Stratified sampling is a method for independently sampling subpopulations (strata). It is commonly used to reduce sampling error by ensuring that subgroups are adequately represented in the sample.</p>
+<p><a class="anchor" id="strs"></a></p><dl class="section user"><dt>Stratified Sampling</dt><dd></dd></dl>
+<pre class="syntax">
+stratified_sample(  source_table,
+                    output_table,
+                    proportion,
+                    grouping_cols,
+                    target_cols,
+                    with_replacement
+                  )
+</pre><p><b>Arguments</b> </p><dl class="arglist">
+<dt>source_table </dt>
+<dd><p class="startdd">TEXT. Name of the table containing the input data.</p>
+<p class="enddd"></p>
+</dd>
+<dt>output_table </dt>
+<dd><p class="startdd">TEXT. Name of output table that contains the sampled data. The output table contains all columns present in the source table unless otherwise specified in the 'target_cols' parameter below.</p>
+<p class="enddd"></p>
+</dd>
+<dt>proportion </dt>
+<dd><p class="startdd">FLOAT8 in the range (0,1). Each stratum is sampled independently.</p>
+<p class="enddd"></p>
+</dd>
+<dt>grouping_cols (optional) </dt>
+<dd><p class="startdd">TEXT, default: NULL. A single column or a list of comma-separated columns that defines the strata. When this parameter is NULL, no grouping is used so the sampling is non-stratified, that is, the whole table is treated as a single group.</p>
+<p class="enddd"></p>
+</dd>
+<dt>target_cols (optional) </dt>
+<dd><p class="startdd">TEXT, default NULL. A comma-separated list of columns to appear in the 'output_table'. If NULL or '*', all columns from the 'source_table' will appear in the 'output_table'.</p>
+<p class="enddd"><a class="anchor" id="note"></a></p><dl class="section note"><dt>Note</dt><dd>Do not include 'grouping_cols' in the parameter 'target_cols', because they are always included in the 'output_table'.</dd></dl>
+</dd>
+<dt>with_replacement (optional) </dt>
+<dd>BOOLEAN, default FALSE. Determines whether to sample with replacement or without replacement (default). With replacement means that it is possible that the same row may appear in the sample set more than once. Without replacement means a given row can be selected only once. </dd>
+</dl>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<p>Please note that due to the random nature of sampling, your results may look different from those below.</p>
+<ol type="1">
+<li>Create an input table: <pre class="syntax">
+DROP TABLE IF EXISTS test;
+CREATE TABLE test(
+    id1 INTEGER,
+    id2 INTEGER,
+    gr1 INTEGER,
+    gr2 INTEGER
+);
+INSERT INTO test VALUES
+(1,0,1,1),
+(2,0,1,1),
+(3,0,1,1),
+(4,0,1,1),
+(5,0,1,1),
+(6,0,1,1),
+(7,0,1,1),
+(8,0,1,1),
+(9,0,1,1),
+(9,0,1,1),
+(9,0,1,1),
+(9,0,1,1),
+(0,1,1,2),
+(0,2,1,2),
+(0,3,1,2),
+(0,4,1,2),
+(0,5,1,2),
+(0,6,1,2),
+(10,10,2,2),
+(20,20,2,2),
+(30,30,2,2),
+(40,40,2,2),
+(50,50,2,2),
+(60,60,2,2),
+(70,70,2,2);
+</pre></li>
+<li>Sample without replacement: <pre class="syntax">
+DROP TABLE IF EXISTS out;
+SELECT madlib.stratified_sample(
+                                'test',    -- Source table
+                                'out',     -- Output table
+                                0.5,       -- Sample proportion
+                                'gr1,gr2', -- Strata definition
+                                'id1,id2', -- Columns to output
+                                FALSE);    -- Sample without replacement
+SELECT * FROM out ORDER BY gr1,gr2,id1,id2;
+</pre> <pre class="result">
+ gr1 | gr2 | id1 | id2
+-----+-----+-----+-----
+   1 |   1 |   2 |   0
+   1 |   1 |   4 |   0
+   1 |   1 |   7 |   0
+   1 |   1 |   8 |   0
+   1 |   1 |   9 |   0
+   1 |   1 |   9 |   0
+   1 |   2 |   0 |   2
+   1 |   2 |   0 |   3
+   1 |   2 |   0 |   4
+   2 |   2 |  20 |  20
+   2 |   2 |  30 |  30
+   2 |   2 |  40 |  40
+   2 |   2 |  60 |  60
+(13 rows)
+</pre></li>
+<li>Sample with replacement: <pre class="syntax">
+DROP TABLE IF EXISTS out;
+SELECT madlib.stratified_sample(
+                                'test',    -- Source table
+                                'out',     -- Output table
+                                0.5,       -- Sample proportion
+                                'gr1,gr2', -- Strata definition
+                                'id1,id2', -- Columns to output
+                                TRUE);     -- Sample with replacement
+SELECT * FROM out ORDER BY gr1,gr2,id1,id2;
+</pre> <pre class="result">
+ gr1 | gr2 | id1 | id2
+----&mdash;+----&mdash;+----&mdash;+----&mdash;
+   1 |   1 |   3 |   0
+   1 |   1 |   6 |   0
+   1 |   1 |   6 |   0
+   1 |   1 |   7 |   0
+   1 |   1 |   7 |   0
+   1 |   1 |   9 |   0
+   1 |   2 |   0 |   1
+   1 |   2 |   0 |   2
+   1 |   2 |   0 |   6
+   2 |   2 |  20 |  20
+   2 |   2 |  30 |  30
+   2 |   2 |  50 |  50
+   2 |   2 |  50 |  50
+</pre> </li>
+</ol>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__summary.html b/docs/rc/group__grp__summary.html
new file mode 100644
index 0000000..1c163aa
--- /dev/null
+++ b/docs/rc/group__grp__summary.html
@@ -0,0 +1,497 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Summary</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__summary.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Summary<div class="ingroups"><a class="el" href="group__grp__stats.html">Statistics</a> &raquo; <a class="el" href="group__grp__desc__stats.html">Descriptive Statistics</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li>
+<a href="#usage">Summary Function Syntax</a> </li>
+<li>
+<a href="#examples">Examples</a> </li>
+<li>
+<a href="#notes">Notes</a> </li>
+<li>
+<a href="#related">Related Topics</a> </li>
+</ul>
+</div><p>The MADlib <b><a class="el" href="summary_8sql__in.html#a4be51e88a1df45191a1692b95429af36">summary()</a></b> function produces summary statistics for any data table. The function invokes various methods from the MADlib library to provide the data overview.</p>
+<p><a class="anchor" id="usage"></a></p><dl class="section user"><dt>Summary Function Syntax</dt><dd>The <b><a class="el" href="summary_8sql__in.html#a4be51e88a1df45191a1692b95429af36">summary()</a></b> function has the following syntax:</dd></dl>
+<pre class="syntax">
+summary ( source_table,
+          output_table,
+          target_cols,
+          grouping_cols,
+          get_distinct,
+          get_quartiles,
+          ntile_array,
+          how_many_mfv,
+          get_estimates,
+          n_cols_per_run
+        )
+</pre><p> The <b><a class="el" href="summary_8sql__in.html#a4be51e88a1df45191a1692b95429af36">summary()</a></b> function returns a composite type containing three fields: </p><table class="output">
+<tr>
+<th>output_table </th><td>TEXT. The name of the output table.  </td></tr>
+<tr>
+<th>num_col_summarized </th><td>INTEGER. The number of columns from the source table that have been summarized.  </td></tr>
+<tr>
+<th>duration </th><td>FLOAT8. The time taken (in seconds) to compute the summary.  </td></tr>
+</table>
+<p><b>Arguments</b> </p><dl class="arglist">
+<dt>source_table </dt>
+<dd><p class="startdd">TEXT. Name of the table containing the input data.</p>
+<p class="enddd"></p>
+</dd>
+<dt>output_table </dt>
+<dd><p class="startdd">TEXT. Name of the table for the output summary statistics. This table contains the following columns: </p><table class="output">
+<tr>
+<th>group_by </th><td>Group-by column name. NULL if none provided.  </td></tr>
+<tr>
+<th>group_by_value </th><td>Value of the group-by column. NULL if there is no grouping.  </td></tr>
+<tr>
+<th>target_column </th><td>Targeted column values for which summary is requested.  </td></tr>
+<tr>
+<th>column_number </th><td>Physical column number for the target column, as described in <em>pg_attribute</em>  catalog.  </td></tr>
+<tr>
+<th>data_type </th><td>Data type of the target column. Standard GPDB type descriptors are displayed.  </td></tr>
+<tr>
+<th>row_count </th><td>Number of rows for the target column.  </td></tr>
+<tr>
+<th>distinct_values </th><td>Number of distinct values in the target column. If the <a class="el" href="summary_8sql__in.html#a4be51e88a1df45191a1692b95429af36">summary()</a> function is called with the <em>get_estimates</em> argument set to TRUE (default), then this is an estimated statistic based on the Flajolet-Martin distinct count estimator. If the <em>get_estimates</em> argument set to FALSE, will use PostgreSQL COUNT DISTINCT.  </td></tr>
+<tr>
+<th>missing_values </th><td>Number of missing values in the target column.  </td></tr>
+<tr>
+<th>blank_values </th><td>Number of blank values. Blanks are defined by this regular expression:<pre class="fragment">'^\w*$'</pre>  </td></tr>
+<tr>
+<th>fraction_missing </th><td>Percentage of total rows that are missing, as a decimal value, e.g. 0.3.  </td></tr>
+<tr>
+<th>fraction_blank </th><td>Percentage of total rows that are blank, as a decimal value, e.g. 0.3.  </td></tr>
+<tr>
+<th>positive_values </th><td>Number of positive values in the target column if target is numeric, otherwise NULL.  </td></tr>
+<tr>
+<th>negative_values </th><td>Number of negative values in the target column if target is numeric, otherwise NULL.  </td></tr>
+<tr>
+<th>zero_values </th><td>Number of zero values in the target column if target is numeric, otherwise NULL. Note that we are reporting exact equality to 0.0 here, so even if you have a float value that is extremely small (say due to rounding), it will not be reported as a zero value.  </td></tr>
+<tr>
+<th>mean </th><td>Mean value of target column if target is numeric, otherwise NULL.  </td></tr>
+<tr>
+<th>variance </th><td>Variance of target column if target is numeric, otherwise NULL.  </td></tr>
+<tr>
+<th>confidence_interval </th><td>Confidence interval (95% using z-score) of the mean value for the target column if target is numeric, otherwise NULL. Presented as an array of two elements in the form {lower bound, upper bound}.  </td></tr>
+<tr>
+<th>min </th><td>Minimum value of target column. For strings this is the length of the shortest string.  </td></tr>
+<tr>
+<th>max </th><td>Maximum value of target column. For strings this is the length of the longest string.  </td></tr>
+<tr>
+<th>first_quartile </th><td>First quartile (25th percentile), only for numeric columns. (Unavailable for PostgreSQL 9.3 or lower.)  </td></tr>
+<tr>
+<th>median </th><td>Median value of target column, if target is numeric, otherwise NULL. (Unavailable for PostgreSQL 9.3 or lower.)  </td></tr>
+<tr>
+<th>third_quartile </th><td>Third quartile (25th percentile), only for numeric columns. (Unavailable for PostgreSQL 9.3 or lower.)  </td></tr>
+<tr>
+<th>quantile_array </th><td>Percentile values corresponding to <em>ntile_array</em>. (Unavailable for PostgreSQL 9.3 or lower.)  </td></tr>
+<tr>
+<th>most_frequent_values </th><td>An array containing the most frequently occurring values. The <em>how_many_mfv</em> argument determines the length of the array, which is 10 by default. If the <a class="el" href="summary_8sql__in.html#a4be51e88a1df45191a1692b95429af36">summary()</a> function is called with the <em>get_estimates</em> argument set to TRUE (default), the frequent values computation is performed using a parallel aggregation method that is faster, but in some cases may fail to detect the exact most frequent values.  </td></tr>
+<tr>
+<th>mfv_frequencies </th><td>Array containing the frequency count for each of the most frequent values.   </td></tr>
+</table>
+<p class="enddd"></p>
+</dd>
+<dt>target_columns (optional) </dt>
+<dd><p class="startdd">TEXT, default NULL. A comma-separated list of columns to summarize. If NULL, summaries are produced for all columns.</p>
+<p class="enddd"></p>
+</dd>
+<dt>grouping_cols (optional) </dt>
+<dd>TEXT, default: null. A comma-separated list of columns on which to group results. If NULL, summaries are produced for the complete table. <dl class="section note"><dt>Note</dt><dd>Please note that summary statistics are calculated for each grouping column independently. That is, grouping columns are not combined together as in the regular PostgreSQL style GROUP BY directive. (This was done to reduce long run time and huge output table size which would otherwise result in the case of large input tables with a lot of grouping_cols and target_cols specified.)</dd></dl>
+</dd>
+<dt>get_distinct (optional) </dt>
+<dd><p class="startdd">BOOLEAN, default TRUE. If true, distinct values are counted. The method for computing distinct values depends on the setting of the 'get_estimates' parameter below.</p>
+<p class="enddd"></p>
+</dd>
+<dt>get_quartiles (optional) </dt>
+<dd><p class="startdd">BOOLEAN, default TRUE. If TRUE, quartiles are computed.</p>
+<p class="enddd"></p>
+</dd>
+<dt>ntile_array (optional) </dt>
+<dd>FLOAT8[], default NULL. An array of quantile values to compute. If NULL, quantile values are not computed. <dl class="section note"><dt>Note</dt><dd>Quartile and quantile functions are not available in PostgreSQL 9.3 or lower. If you are using PostgreSQL 9.3 or lower, the output table will not contain these values, even if you set 'get_quartiles' = TRUE or provide an array of quantile values for the parameter 'ntile_array'.</dd></dl>
+</dd>
+<dt>how_many_mfv (optional) </dt>
+<dd><p class="startdd">INTEGER, default: 10. The number of most-frequent-values to compute. The method for computing MFV depends on the setting of the 'get_estimates' parameter below.</p>
+<p class="enddd"></p>
+</dd>
+<dt>get_estimates (optional) </dt>
+<dd><p class="startdd">BOOLEAN, default TRUE. If TRUE, estimated values are produced for distinct values and most frequent values. If FALSE, exact values are calculated which will take longer to run, with the impact depending on data size.</p>
+<p class="enddd"></p>
+</dd>
+<dt>n_cols_per_run (optional) </dt>
+<dd>INTEGER, default: 15. The number of columns to collect summary statistics in one pass of the data. This parameter determines the number of passes through the data. For e.g., with a total of 40 columns to summarize and 'n_cols_per_run = 15', there will be 3 passes through the data, with each pass summarizing a maximum of 15 columns. <dl class="section note"><dt>Note</dt><dd>This parameter should be used with caution. Increasing this parameter could decrease the total run time (if number of passes decreases), but will increase the memory consumption during each run. Since PostgreSQL limits the memory available for a single aggregate run, this increased memory consumption could result in an out-of-memory termination error.</dd></dl>
+</dd>
+</dl>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<ol type="1">
+<li>View online help for the <a class="el" href="summary_8sql__in.html#a4be51e88a1df45191a1692b95429af36">summary()</a> function. <pre class="example">
+SELECT * FROM madlib.summary();
+</pre></li>
+<li>Create an input data table using part of the well known iris data set. <pre class="example">
+DROP TABLE IF EXISTS iris;
+CREATE TABLE iris (id INT, sepal_length FLOAT, sepal_width FLOAT,
+                    petal_length FLOAT, petal_width FLOAT,
+                   class_name text);
+INSERT INTO iris VALUES
+(1,5.1,3.5,1.4,0.2,'Iris-setosa'),
+(2,4.9,3.0,1.4,0.2,'Iris-setosa'),
+(3,4.7,3.2,1.3,0.2,'Iris-setosa'),
+(4,4.6,3.1,1.5,0.2,'Iris-setosa'),
+(5,5.0,3.6,1.4,0.2,'Iris-setosa'),
+(6,5.4,3.9,1.7,0.4,'Iris-setosa'),
+(7,4.6,3.4,1.4,0.3,'Iris-setosa'),
+(8,5.0,3.4,1.5,0.2,'Iris-setosa'),
+(9,4.4,2.9,1.4,0.2,'Iris-setosa'),
+(10,4.9,3.1,1.5,0.1,'Iris-setosa'),
+(11,7.0,3.2,4.7,1.4,'Iris-versicolor'),
+(12,6.4,3.2,4.5,1.5,'Iris-versicolor'),
+(13,6.9,3.1,4.9,1.5,'Iris-versicolor'),
+(14,5.5,2.3,4.0,1.3,'Iris-versicolor'),
+(15,6.5,2.8,4.6,1.5,'Iris-versicolor'),
+(16,5.7,2.8,4.5,1.3,'Iris-versicolor'),
+(17,6.3,3.3,4.7,1.6,'Iris-versicolor'),
+(18,4.9,2.4,3.3,1.0,'Iris-versicolor'),
+(19,6.6,2.9,4.6,1.3,'Iris-versicolor'),
+(20,5.2,2.7,3.9,1.4,'Iris-versicolor'),
+(21,6.3,3.3,6.0,2.5,'Iris-virginica'),
+(22,5.8,2.7,5.1,1.9,'Iris-virginica'),
+(23,7.1,3.0,5.9,2.1,'Iris-virginica'),
+(24,6.3,2.9,5.6,1.8,'Iris-virginica'),
+(25,6.5,3.0,5.8,2.2,'Iris-virginica'),
+(26,7.6,3.0,6.6,2.1,'Iris-virginica'),
+(27,4.9,2.5,4.5,1.7,'Iris-virginica'),
+(28,7.3,2.9,6.3,1.8,'Iris-virginica'),
+(29,6.7,2.5,5.8,1.8,'Iris-virginica'),
+(30,7.2,3.6,6.1,2.5,'Iris-virginica');
+</pre></li>
+<li>Run the <b><a class="el" href="summary_8sql__in.html#a4be51e88a1df45191a1692b95429af36">summary()</a></b> function using all defaults. <pre class="example">
+DROP TABLE IF EXISTS iris_summary;
+SELECT * FROM madlib.summary( 'iris',            -- Source table
+                              'iris_summary'     -- Output table
+                            );
+</pre> Result: <pre class="result">
+ output_table | num_col_summarized |     duration
+--------------+--------------------+-------------------
+ iris_summary |                  6 | 0.574938058853149
+(1 row)
+</pre> View the summary data. <pre class="example">
+-- Turn on expanded display for readability.
+\x on
+SELECT * FROM iris_summary;
+</pre> Result (partial): <pre class="result">
+...
+&#160;-[ RECORD 2 ]--------+---------------------------------------------
+group_by             |
+group_by_value       |
+target_column        | sepal_length
+column_number        | 2
+data_type            | float8
+row_count            | 30
+distinct_values      | 22
+missing_values       | 0
+blank_values         |
+fraction_missing     | 0
+fraction_blank       |
+positive_values      | 30
+negative_values      | 0
+zero_values          | 0
+mean                 | 5.84333333333333
+variance             | 0.929436781609188
+confidence_interval  | {5.49834423494374,6.18832243172292}
+min                  | 4.4
+max                  | 7.6
+first_quartile       | 4.925
+median               | 5.75
+third_quartile       | 6.575
+most_frequent_values | {4.9,6.3,5,6.5,4.6,7.2,5.5,5.7,7.3,6.7}
+mfv_frequencies      | {4,3,2,2,2,1,1,1,1,1}
+...
+&#160;-[ RECORD 6 ]--------+---------------------------------------------
+group_by             |
+group_by_value       |
+target_column        | class_name
+column_number        | 6
+data_type            | text
+row_count            | 30
+distinct_values      | 3
+missing_values       | 0
+blank_values         | 0
+fraction_missing     | 0
+fraction_blank       | 0
+positive_values      |
+negative_values      |
+zero_values          |
+mean                 |
+variance             |
+confidence_interval  |
+min                  | 11
+max                  | 15
+first_quartile       |
+median               |
+third_quartile       |
+most_frequent_values | {Iris-setosa,Iris-versicolor,Iris-virginica}
+mfv_frequencies      | {10,10,10}
+</pre> Note that for the text column in record 6, some statistics are n/a, and the min and max values represent the length of the shortest and longest strings respectively.</li>
+<li>Now group by the class of iris: <pre class="example">
+DROP TABLE IF EXISTS iris_summary;
+SELECT * FROM madlib.summary( 'iris',                       -- Source table
+                              'iris_summary',               -- Output table
+                              'sepal_length, sepal_width',  -- Columns to summarize
+                              'class_name'                  -- Grouping column
+                            );
+SELECT * FROM iris_summary;
+</pre> Result (partial): <pre class="result">
+&#160;-[ RECORD 1 ]--------+----------------------------------------
+group_by             | class_name
+group_by_value       | Iris-setosa
+target_column        | sepal_length
+column_number        | 2
+data_type            | float8
+row_count            | 10
+distinct_values      | 7
+missing_values       | 0
+blank_values         |
+fraction_missing     | 0
+fraction_blank       |
+positive_values      | 10
+negative_values      | 0
+zero_values          | 0
+mean                 | 4.86
+variance             | 0.0848888888888875
+confidence_interval  | {4.67941507384182,5.04058492615818}
+min                  | 4.4
+max                  | 5.4
+first_quartile       | 4.625
+median               | 4.9
+third_quartile       | 5
+most_frequent_values | {4.9,5,4.6,5.1,4.7,5.4,4.4}
+mfv_frequencies      | {2,2,2,1,1,1,1}
+...
+&#160;-[ RECORD 3 ]--------+----------------------------------------
+group_by             | class_name
+group_by_value       | Iris-versicolor
+target_column        | sepal_length
+column_number        | 2
+data_type            | float8
+row_count            | 10
+distinct_values      | 10
+missing_values       | 0
+blank_values         |
+fraction_missing     | 0
+fraction_blank       |
+positive_values      | 10
+negative_values      | 0
+zero_values          | 0
+mean                 | 6.1
+variance             | 0.528888888888893
+confidence_interval  | {5.64924734548141,6.55075265451859}
+min                  | 4.9
+max                  | 7
+first_quartile       | 5.55
+median               | 6.35
+third_quartile       | 6.575
+most_frequent_values | {6.9,5.5,6.5,5.7,6.3,4.9,6.6,5.2,7,6.4}
+mfv_frequencies      | {1,1,1,1,1,1,1,1,1,1}
+...
+</pre></li>
+<li>Trying some other parameters: <pre class="example">
+DROP TABLE IF EXISTS iris_summary;
+SELECT * FROM madlib.summary( 'iris',                       -- Source table
+                              'iris_summary',               -- Output table
+                              'sepal_length, sepal_width',  -- Columns to summarize
+                               NULL,                        -- No grouping
+                               TRUE,                        -- Get distinct values
+                               FALSE,                       -- Dont get quartiles
+                               ARRAY[0.33, 0.66],           -- Get ntiles
+                               3,                           -- Number of MFV to compute
+                               FALSE                        -- Get exact values
+                            );
+SELECT * FROM iris_summary;
+</pre> Result: <pre class="result">
+&#160;-[ RECORD 1 ]--------+------------------------------------
+group_by             |
+group_by_value       |
+target_column        | sepal_length
+column_number        | 2
+data_type            | float8
+row_count            | 30
+distinct_values      | 22
+missing_values       | 0
+blank_values         |
+fraction_missing     | 0
+fraction_blank       |
+positive_values      | 30
+negative_values      | 0
+zero_values          | 0
+mean                 | 5.84333333333333
+variance             | 0.929436781609175
+confidence_interval  | {5.49834423494375,6.18832243172292}
+min                  | 4.4
+max                  | 7.6
+quantile_array       | {5.057,6.414}
+most_frequent_values | {4.9,6.3,6.5}
+mfv_frequencies      | {4,3,2}
+&#160;-[ RECORD 2 ]--------+------------------------------------
+group_by             |
+group_by_value       |
+target_column        | sepal_width
+column_number        | 3
+data_type            | float8
+row_count            | 30
+distinct_values      | 14
+missing_values       | 0
+blank_values         |
+fraction_missing     | 0
+fraction_blank       |
+positive_values      | 30
+negative_values      | 0
+zero_values          | 0
+mean                 | 3.04
+variance             | 0.13903448275862
+confidence_interval  | {2.90656901047539,3.17343098952461}
+min                  | 2.3
+max                  | 3.9
+quantile_array       | {2.9,3.2}
+most_frequent_values | {2.9,3,3.2}
+mfv_frequencies      | {4,4,3}
+</pre></li>
+</ol>
+<p><a class="anchor" id="notes"></a></p><dl class="section user"><dt>Notes</dt><dd><ul>
+<li>Table names can be optionally schema qualified (current_schemas() would be searched if a schema name is not provided) and table and column names should follow case-sensitivity and quoting rules per the database. (For instance, 'mytable' and 'MyTable' both resolve to the same entity, i.e. 'mytable'. If mixed-case or multi-byte characters are desired for entity names then the string should be double-quoted; in this case the input would be '"MyTable"').</li>
+<li>The <em>get_estimates</em> parameter controls computation for both distinct count and most frequent values:<ul>
+<li>If <em>get_estimates</em> is TRUE then the distinct value computation is estimated using Flajolet-Martin. MFV is computed using a fast method that does parallel aggregation in Greenplum Database at the expense of missing or duplicating some of the most frequent values.</li>
+<li>If <em>get_estimates</em> is FALSE then the distinct values are computed in a slower but exact method using PostgreSQL COUNT DISTINCT. MFV is computed using a faithful implementation that preserves the approximation guarantees of the Cormode/Muthukrishnan method (more information at <a class="el" href="group__grp__mfvsketch.html">MFV (Most Frequent Values)</a>).</li>
+</ul>
+</li>
+</ul>
+</dd></dl>
+<p><a class="anchor" id="related"></a></p><dl class="section user"><dt>Related Topics</dt><dd>File <a class="el" href="summary_8sql__in.html" title="Summary function for descriptive statistics. ">summary.sql_in</a> documenting the <b><a class="el" href="summary_8sql__in.html#a4be51e88a1df45191a1692b95429af36">summary()</a></b> function</dd></dl>
+<p><a class="el" href="group__grp__fmsketch.html">FM (Flajolet-Martin)</a> <br />
+ <a class="el" href="group__grp__mfvsketch.html">MFV (Most Frequent Values)</a> <br />
+ <a class="el" href="group__grp__countmin.html">CountMin (Cormode-Muthukrishnan)</a> </p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__super.html b/docs/rc/group__grp__super.html
new file mode 100644
index 0000000..fe3ca2a
--- /dev/null
+++ b/docs/rc/group__grp__super.html
@@ -0,0 +1,154 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Supervised Learning</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__super.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#groups">Modules</a>  </div>
+  <div class="headertitle">
+<div class="title">Supervised Learning</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Methods to perform a variety of supervised learning tasks. </p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group__grp__crf"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__crf.html">Conditional Random Field</a></td></tr>
+<tr class="memdesc:group__grp__crf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs a Conditional Random Fields (CRF) model for labeling sequential data. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__knn"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__knn.html">k-Nearest Neighbors</a></td></tr>
+<tr class="memdesc:group__grp__knn"><td class="mdescLeft">&#160;</td><td class="mdescRight">Finds \(k\) nearest data points to the given data point and outputs majority vote value of output classes for classification, or average value of target values for regression. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__nn"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__nn.html">Neural Network</a></td></tr>
+<tr class="memdesc:group__grp__nn"><td class="mdescLeft">&#160;</td><td class="mdescRight">Solves classification and regression problems with several fully connected layers and non-linear activation functions. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__regml"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__regml.html">Regression Models</a></td></tr>
+<tr class="memdesc:group__grp__regml"><td class="mdescLeft">&#160;</td><td class="mdescRight">A collection of methods for modeling conditional expectation of a response variable. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__svm"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__svm.html">Support Vector Machines</a></td></tr>
+<tr class="memdesc:group__grp__svm"><td class="mdescLeft">&#160;</td><td class="mdescRight">Solves classification and regression problems by separating data with a hyperplane or other nonlinear decision boundary. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__tree"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__tree.html">Tree Methods</a></td></tr>
+<tr class="memdesc:group__grp__tree"><td class="mdescLeft">&#160;</td><td class="mdescRight">A collection of recursive partitioning (tree) methods. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__super.js b/docs/rc/group__grp__super.js
new file mode 100644
index 0000000..67b1b34
--- /dev/null
+++ b/docs/rc/group__grp__super.js
@@ -0,0 +1,9 @@
+var group__grp__super =
+[
+    [ "Conditional Random Field", "group__grp__crf.html", null ],
+    [ "k-Nearest Neighbors", "group__grp__knn.html", null ],
+    [ "Neural Network", "group__grp__nn.html", null ],
+    [ "Regression Models", "group__grp__regml.html", "group__grp__regml" ],
+    [ "Support Vector Machines", "group__grp__svm.html", null ],
+    [ "Tree Methods", "group__grp__tree.html", "group__grp__tree" ]
+];
\ No newline at end of file
diff --git a/docs/rc/group__grp__svd.html b/docs/rc/group__grp__svd.html
new file mode 100644
index 0000000..3e6737a
--- /dev/null
+++ b/docs/rc/group__grp__svd.html
@@ -0,0 +1,417 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Singular Value Decomposition</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__svd.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Singular Value Decomposition<div class="ingroups"><a class="el" href="group__grp__datatrans.html">Data Types and Transformations</a> &raquo; <a class="el" href="group__grp__arraysmatrix.html">Arrays and Matrices</a> &raquo; <a class="el" href="group__grp__matrix__factorization.html">Matrix Factorization</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li>
+<a href="#syntax">SVD Functions</a> </li>
+<li>
+<a href="#output">Output Tables</a> </li>
+<li>
+<a href="#examples">Examples</a></li>
+<li>
+</li>
+<li>
+<a href="#background">Technical Background</a> </li>
+</ul>
+</div><p>In linear algebra, the singular value decomposition (SVD) is a factorization of a real or complex matrix, with many useful applications in signal processing and statistics.</p>
+<p>Let \(A\) be a \(mxn\) matrix, where \(m \ge n\). Then \(A\) can be decomposed as follows: </p><p class="formulaDsp">
+\[ A = U \Sigma V^T, \]
+</p>
+<p> where \(U\) is a \(m \times n\) orthonormal matrix, \(\Sigma\) is a \(n \times n\) diagonal matrix, and \(V\) is an \(n \times n\) orthonormal matrix. The diagonal elements of \(\Sigma\) are called the <em>singular values</em>.</p>
+<p><a class="anchor" id="syntax"></a></p><dl class="section user"><dt>SVD Functions</dt><dd></dd></dl>
+<p>SVD factorizations are provided for dense and sparse matrices. In addition, a native implementation is provided for very sparse matrices for improved performance.</p>
+<p><b>SVD Function for Dense Matrices</b></p>
+<pre class="syntax">
+svd( source_table,
+     output_table_prefix,
+     row_id,
+     k,
+     n_iterations,
+     result_summary_table
+);
+</pre><p> <b>Arguments</b> </p><dl class="arglist">
+<dt>source_table </dt>
+<dd><p class="startdd">TEXT. Source table name (dense matrix).</p>
+<p class="enddd">The table contains a <code>row_id</code> column that identifies each row, with numbering starting from 1. The other columns contain the data for the matrix. There are two possible dense formats as illustrated by the 2x2 matrix example below. You can use either of these dense formats:</p><ol type="1">
+<li><pre class="example">
+            row_id     col1     col2
+row1         1           1         0
+row2         2           0         1
+    </pre></li>
+<li><pre class="example">
+        row_id     row_vec
+row1        1       {1, 0}
+row2        2       {0, 1}
+    </pre>  </li>
+</ol>
+</dd>
+<dt>output_table_prefix </dt>
+<dd>TEXT. Prefix for output tables. See <a href="#output">Output Tables</a> below for a description of the convention used. </dd>
+<dt>row_id </dt>
+<dd>TEXT. ID for each row. </dd>
+<dt>k </dt>
+<dd>INTEGER. Number of singular values to compute. </dd>
+<dt>n_iterations (optional).  </dt>
+<dd>INTEGER. Number of iterations to run. <dl class="section note"><dt>Note</dt><dd>The number of iterations must be in the range [k, column dimension], where k is number of singular values. </dd></dl>
+</dd>
+<dt>result_summary_table (optional) </dt>
+<dd>TEXT. The name of the table to store the result summary. </dd>
+</dl>
+<hr/>
+<p> <b>SVD Function for Sparse Matrices</b></p>
+<p>Use this function for matrices that are represented in the sparse-matrix format (example below). <b>Note that the input matrix is converted to a dense matrix before the SVD operation, for efficient computation reasons. </b></p>
+<pre class="syntax">
+svd_sparse( source_table,
+            output_table_prefix,
+            row_id,
+            col_id,
+            value,
+            row_dim,
+            col_dim,
+            k,
+            n_iterations,
+            result_summary_table
+          );
+</pre><p> <b>Arguments</b> </p><dl class="arglist">
+<dt>source_table </dt>
+<dd><p class="startdd">TEXT. Source table name (sparse matrix).</p>
+<p>A sparse matrix is represented using the row and column indices for each non-zero entry of the matrix. This representation is useful for matrices containing multiple zero elements. Below is an example of a sparse 4x7 matrix with just 6 out of 28 entries being non-zero. The dimensionality of the matrix is inferred using the max value in <em>row</em> and <em>col</em> columns. Note the last entry is included (even though it is 0) to provide the dimensionality of the matrix, indicating that the 4th row and 7th column contain all zeros. </p><pre class="example">
+ row_id | col_id | value
+--------+--------+-------
+      1 |      1 |     9
+      1 |      5 |     6
+      1 |      6 |     6
+      2 |      1 |     8
+      3 |      1 |     3
+      3 |      2 |     9
+      4 |      7 |     0
+(6 rows)
+</pre> <p class="enddd"></p>
+</dd>
+<dt>output_table_prefix </dt>
+<dd>TEXT. Prefix for output tables. See <a href="#output">Output Tables</a> below for a description of the convention used.  </dd>
+<dt>row_id </dt>
+<dd>TEXT. Name of the column containing the row index for each entry in sparse matrix. </dd>
+<dt>col_id </dt>
+<dd>TEXT. Name of the column containing the column index for each entry in sparse matrix. </dd>
+<dt>value </dt>
+<dd>TEXT. Name of column containing the non-zero values of the sparse matrix. </dd>
+<dt>row_dim </dt>
+<dd>INTEGER. Number of rows in matrix. </dd>
+<dt>col_dim </dt>
+<dd>INTEGER. Number of columns in matrix. </dd>
+<dt>k </dt>
+<dd>INTEGER. Number of singular values to compute. </dd>
+<dt>n_iterations (optional) </dt>
+<dd>INTEGER. Number of iterations to run. <dl class="section note"><dt>Note</dt><dd>The number of iterations must be in the range [k, column dimension], where k is number of singular values. </dd></dl>
+</dd>
+<dt>result_summary_table (optional) </dt>
+<dd>TEXT. The name of the table to store the result summary. </dd>
+</dl>
+<hr/>
+<p> <b>Native Implementation for Sparse Matrices</b></p>
+<p>Use this function for matrices that are represented in the sparse-matrix format (see sparse matrix example above). This function uses the native sparse representation while computing the SVD. </p><dl class="section note"><dt>Note</dt><dd>Note that this function should be favored if the matrix is highly sparse, since it computes very sparse matrices efficiently. </dd></dl>
+<pre class="syntax">
+svd_sparse_native( source_table,
+                   output_table_prefix,
+                   row_id,
+                   col_id,
+                   value,
+                   row_dim,
+                   col_dim,
+                   k,
+                   n_iterations,
+                   result_summary_table
+                 );
+</pre><p> <b>Arguments</b> </p><dl class="arglist">
+<dt>source_table </dt>
+<dd>TEXT. Source table name (sparse matrix - see example above). </dd>
+<dt>output_table_prefix </dt>
+<dd>TEXT. Prefix for output tables. See <a href="#output">Output Tables</a> below for a description of the convention used. </dd>
+<dt>row_id </dt>
+<dd>TEXT. ID for each row. </dd>
+<dt>col_id </dt>
+<dd>TEXT. ID for each column. </dd>
+<dt>value </dt>
+<dd>TEXT. Non-zero values of the sparse matrix. </dd>
+<dt>row_dim </dt>
+<dd>INTEGER. Row dimension of sparse matrix. </dd>
+<dt>col_dim </dt>
+<dd>INTEGER. Col dimension of sparse matrix. </dd>
+<dt>k </dt>
+<dd>INTEGER. Number of singular values to compute. </dd>
+<dt>n_iterations (optional) </dt>
+<dd>INTEGER. Number of iterations to run. <dl class="section note"><dt>Note</dt><dd>The number of iterations must be in the range [k, column dimension], where k is number of singular values. </dd></dl>
+</dd>
+<dt>result_summary_table (optional) </dt>
+<dd>TEXT. Table name to store result summary. </dd>
+</dl>
+<hr/>
+<p><a class="anchor" id="output"></a></p><dl class="section user"><dt>Output Tables</dt><dd></dd></dl>
+<p>Output for eigenvectors/values is in the following three tables:</p><ul>
+<li>Left singular matrix: Table is named &lt;output_table_prefix&gt;_u (e.g. ‘netflix_u’)</li>
+<li>Right singular matrix: Table is named &lt;output_table_prefix&gt;_v (e.g. ‘netflix_v’)</li>
+<li>Singular values: Table is named &lt;output_table_prefix&gt;_s (e.g. ‘netflix_s’)</li>
+</ul>
+<p>The left and right singular vector tables are of the format: </p><table class="output">
+<tr>
+<th>row_id </th><td>INTEGER. The ID corresponding to each eigenvalue (in decreasing order).  </td></tr>
+<tr>
+<th>row_vec </th><td>FLOAT8[]. Singular vector elements for this row_id. Each array is of size k.  </td></tr>
+</table>
+<p>The singular values table is in sparse table format, since only the diagonal elements of the matrix are non-zero: </p><table class="output">
+<tr>
+<th>row_id </th><td>INTEGER. <em>i</em> for <em>ith</em> eigenvalue.  </td></tr>
+<tr>
+<th>col_id </th><td>INTEGER. <em>i</em> for <em>ith</em> eigenvalue (same as row_id).  </td></tr>
+<tr>
+<th>value </th><td>FLOAT8. Eigenvalue.  </td></tr>
+</table>
+<p>All <code>row_id</code> and <code>col_id</code> in the above tables start from 1.</p>
+<p>The result summary table has the following columns: </p><table class="output">
+<tr>
+<th>rows_used </th><td>INTEGER. Number of rows used for SVD calculation.  </td></tr>
+<tr>
+<th>exec_time </th><td>FLOAT8. Total time for executing SVD.  </td></tr>
+<tr>
+<th>iter </th><td>INTEGER. Total number of iterations run.  </td></tr>
+<tr>
+<th>recon_error </th><td>FLOAT8. Total quality score (i.e. approximation quality) for this set of orthonormal basis.  </td></tr>
+<tr>
+<th>relative_recon_error </th><td>FLOAT8. Relative quality score.  </td></tr>
+</table>
+<p>In the result summary table, the reconstruction error is computed as \( \sqrt{mean((X - USV^T)_{ij}^2)} \), where the average is over all elements of the matrices. The relative reconstruction error is then computed as ratio of the reconstruction error and \( \sqrt{mean(X_{ij}^2)} \).</p>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<ol type="1">
+<li>View online help for the SVD function. <pre class="example">
+SELECT madlib.svd();
+</pre></li>
+<li>Create an input dataset (dense matrix). <pre class="example">
+DROP TABLE IF EXISTS mat, mat_sparse, svd_summary_table, svd_u, svd_v, svd_s;
+CREATE TABLE mat (
+    row_id integer,
+    row_vec double precision[]
+);
+INSERT INTO mat VALUES
+(1,'{396,840,353,446,318,886,15,584,159,383}'),
+(2,'{691,58,899,163,159,533,604,582,269,390}'),
+(3,'{293,742,298,75,404,857,941,662,846,2}'),
+(4,'{462,532,787,265,982,306,600,608,212,885}'),
+(5,'{304,151,337,387,643,753,603,531,459,652}'),
+(6,'{327,946,368,943,7,516,272,24,591,204}'),
+(7,'{877,59,260,302,891,498,710,286,864,675}'),
+(8,'{458,959,774,376,228,354,300,669,718,565}'),
+(9,'{824,390,818,844,180,943,424,520,65,913}'),
+(10,'{882,761,398,688,761,405,125,484,222,873}'),
+(11,'{528,1,860,18,814,242,314,965,935,809}'),
+(12,'{492,220,576,289,321,261,173,1,44,241}'),
+(13,'{415,701,221,503,67,393,479,218,219,916}'),
+(14,'{350,192,211,633,53,783,30,444,176,932}'),
+(15,'{909,472,871,695,930,455,398,893,693,838}'),
+(16,'{739,651,678,577,273,935,661,47,373,618}');
+</pre></li>
+<li>Run SVD function for a dense matrix. <pre class="example">
+SELECT madlib.svd( 'mat',       -- Input table
+                   'svd',       -- Output table prefix
+                   'row_id',    -- Column name with row index
+                   10,          -- Number of singular values to compute
+                   NULL,        -- Use default number of iterations
+                   'svd_summary_table'  -- Result summary table
+                 );
+</pre></li>
+<li>Print out the singular values and the summary table. For the singular values: <pre class="example">
+SELECT * FROM svd_s ORDER BY row_id;
+</pre> Result: <pre class="result">
+ row_id | col_id |      value
+&#160;--------+--------+------------------
+      1 |      1 | 6475.67225281804
+      2 |      2 | 1875.18065580415
+      3 |      3 | 1483.25228429636
+      4 |      4 | 1159.72262897427
+      5 |      5 | 1033.86092570574
+      6 |      6 | 948.437358703966
+      7 |      7 | 795.379572772455
+      8 |      8 | 709.086240684469
+      9 |      9 | 462.473775959371
+     10 |     10 | 365.875217945698
+     10 |     10 |
+(11 rows)
+</pre> For the summary table: <pre class="example">
+SELECT * FROM svd_summary_table;
+</pre> Result: <pre class="result">
+ rows_used | exec_time (ms) | iter |    recon_error    | relative_recon_error
+&#160;-----------+----------------+------+-------------------+----------------------
+        16 |        1332.47 |   10 | 4.36920148766e-13 |    7.63134130332e-16
+(1 row)
+</pre></li>
+<li>Create a sparse matrix by running the <a class="el" href="matrix__ops_8sql__in.html#a390fb7234f49e17c780e961184873759">matrix_sparsify()</a> utility function on the dense matrix. <pre class="example">
+SELECT madlib.matrix_sparsify('mat',
+                              'row=row_id, val=row_vec',
+                              'mat_sparse',
+                              'row=row_id, col=col_id, val=value');
+</pre></li>
+<li>Run the SVD function for a sparse matrix. <pre class="example">
+SELECT madlib.svd_sparse( 'mat_sparse',   -- Input table
+                          'svd',          -- Output table prefix
+                          'row_id',       -- Column name with row index
+                          'col_id',       -- Column name with column index
+                          'value',        -- Matrix cell value
+                          16,             -- Number of rows in matrix
+                          10,             -- Number of columns in matrix
+                          10              -- Number of singular values to compute
+                          );
+</pre></li>
+<li>Run the SVD function for a very sparse matrix. <pre class="example">
+SELECT madlib.svd_sparse_native ( 'mat_sparse',   -- Input table
+                          'svd',          -- Output table prefix
+                          'row_id',       -- Column name with row index
+                          'col_id',       -- Column name with column index
+                          'value',        -- Matrix cell value
+                          16,             -- Number of rows in matrix
+                          10,             -- Number of columns in matrix
+                          10              -- Number of singular values to compute
+                          );
+</pre> <a class="anchor" id="background"></a><dl class="section user"><dt>Technical Background</dt><dd>In linear algebra, the singular value decomposition (SVD) is a factorization of a real or complex matrix, with many useful applications in signal processing and statistics. Let \(A\) be a \(m \times n\) matrix, where \(m \ge n\). Then \(A\) can be decomposed as follows: <p class="formulaDsp">
+\[ A = U \Sigma V^T, \]
+</p>
+ where \(U\) is a \(m \times n\) orthonormal matrix, \(\Sigma\) is a \(n \times n\) diagonal matrix, and \(V\) is an \(n \times n\) orthonormal matrix. The diagonal elements of \(\Sigma\) are called the <em>singular values</em>. It is possible to formulate the problem of computing the singular triplets ( \(\sigma_i, u_i, v_i\)) of \(A\) as an eigenvalue problem involving a Hermitian matrix related to \(A\). There are two possible ways of achieving this:</dd></dl>
+</li>
+</ol>
+<ul>
+<li>With the cross product matrix, \(A^TA\) and \(AA^T\)</li>
+<li>With the cyclic matrix <p class="formulaDsp">
+\[ H(A) = \begin{bmatrix} 0 &amp; A\\ A^* &amp; 0 \end{bmatrix} \]
+</p>
+ The singular values are the nonnegative square roots of the eigenvalues of the cross product matrix. This approach may imply a severe loss of accuracy in the smallest singular values. The cyclic matrix approach is an alternative that avoids this problem, but at the expense of significantly increasing the cost of the computation. Computing the cross product matrix explicitly is not recommended, especially in the case of sparse A. Bidiagonalization was proposed by Golub and Kahan [citation?] as a way of tridiagonalizing the cross product matrix without forming it explicitly. Consider the following decomposition <p class="formulaDsp">
+\[ A = P B Q^T, \]
+</p>
+ where \(P\) and \(Q\) are unitary matrices and \(B\) is an \(m \times n\) upper bidiagonal matrix. Then the tridiagonal matrix \(B*B\) is unitarily similar to \(A*A\). Additionally, specific methods exist that compute the singular values of \(B\) without forming \(B*B\). Therefore, after computing the SVD of B, <p class="formulaDsp">
+\[ B = X\Sigma Y^T, \]
+</p>
+ it only remains to compute the SVD of the original matrix with \(U = PX\) and \(V = QY\). </li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__svec.html b/docs/rc/group__grp__svec.html
new file mode 100644
index 0000000..b7ec314
--- /dev/null
+++ b/docs/rc/group__grp__svec.html
@@ -0,0 +1,448 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Sparse Vectors</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__svec.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Sparse Vectors<div class="ingroups"><a class="el" href="group__grp__datatrans.html">Data Types and Transformations</a> &raquo; <a class="el" href="group__grp__arraysmatrix.html">Arrays and Matrices</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li>
+<a href="#usage">Using Sparse Vectors</a> </li>
+<li>
+<a href="#vectorization">Document Vectorization into Sparse Vectors</a> </li>
+<li>
+<a href="#examples">Examples</a> </li>
+<li>
+<a href="#related">Related Topics</a> </li>
+</ul>
+</div><p>This module implements a sparse vector data type, named "svec", which provides compressed storage of vectors that have many duplicate elements.</p>
+<p>Arrays of floating point numbers for various calculations sometimes have long runs of zeros (or some other default value). This is common in applications like scientific computing, retail optimization, and text processing. Each floating point number takes 8 bytes of storage in memory and/or disk, so saving those zeros is often worthwhile. There are also many computations that can benefit from skipping over the zeros.</p>
+<p>Consider, for example, the following array of doubles stored as a Postgres/Greenplum "float8[]" data type:</p>
+<pre class="example">
+'{0, 33,...40,000 zeros..., 12, 22 }'::float8[]
+</pre><p>This array would occupy slightly more than 320KB of memory or disk, most of it zeros. Even if we were to exploit the null bitmap and store the zeros as nulls, we would still end up with a 5KB null bitmap, which is still not nearly as memory efficient as we'd like. Also, as we perform various operations on the array, we do work on 40,000 fields that turn out to be unimportant.</p>
+<p>To solve the problems associated with the processing of vectors discussed above, the svec type employs a simple Run Length Encoding (RLE) scheme to represent sparse vectors as pairs of count-value arrays. For example, the array above would be represented as</p>
+<pre class="example">
+'{1,1,40000,1,1}:{0,33,0,12,22}'::madlib.svec
+</pre><p>which says there is 1 occurrence of 0, followed by 1 occurrence of 33, followed by 40,000 occurrences of 0, etc. This uses just 5 integers and 5 floating point numbers to store the array. Further, it is easy to implement vector operations that can take advantage of the RLE representation to make computations faster. The SVEC module provides a library of such functions.</p>
+<p>The current version only supports sparse vectors of float8 values. Future versions will support other base types.</p>
+<p><a class="anchor" id="usage"></a></p><dl class="section user"><dt>Using Sparse Vectors</dt><dd></dd></dl>
+<p>An SVEC can be constructed directly with a constant expression, as follows: </p><pre class="example">
+SELECT '{n1,n2,...,nk}:{v1,v2,...vk}'::madlib.svec;
+</pre><p> where <code>n1,n2,...,nk</code> specifies the counts for the values <code>v1,v2,...,vk</code>.</p>
+<p>A float array can be cast to an SVEC: </p><pre class="example">
+SELECT ('{v1,v2,...vk}'::float[])::madlib.svec;
+</pre><p>An SVEC can be created with an aggregation: </p><pre class="example">
+SELECT madlib.svec_agg(v1) FROM generate_series(1,k);
+</pre><p>An SVEC can be created using the <code>madlib.svec_cast_positions_float8arr()</code> function by supplying an array of positions and an array of values at those positions: </p><pre class="example">
+SELECT madlib.svec_cast_positions_float8arr(
+    array[n1,n2,...nk],    -- positions of values in vector
+    array[v1,v2,...vk],    -- values at each position
+    length,                -- length of vector
+    base)                  -- value at unspecified positions
+</pre><p> For example, the following expression: </p><pre class="example">
+SELECT madlib.svec_cast_positions_float8arr(
+    array[1,3,5],
+    array[2,4,6],
+    10,
+    0.0)
+</pre><p> produces this SVEC: </p><pre class="result">
+ svec_cast_positions_float8arr
+ &#160;------------------------------
+ {1,1,1,1,1,5}:{2,0,4,0,6,0}
+</pre><p>Add madlib to the search_path to use the svec operators defined in the module.</p>
+<p><a class="anchor" id="vectorization"></a></p><dl class="section user"><dt>Document Vectorization into Sparse Vectors</dt><dd>This module implements an efficient way for document vectorization, converting text documents into sparse vector representation (MADlib.svec), required by various machine learning algorithms in MADlib.</dd></dl>
+<p>The function accepts two tables as input, dictionary table and documents table, and produces the specified output table containing sparse vectors for the represented documents (in documents table).</p>
+<pre class="syntax">
+madlib.gen_doc_svecs(output_tbl,
+                     dictionary_tbl,
+                     dict_id_col,
+                     dict_term_col,
+                     documents_tbl,
+                     doc_id_col,
+                     doc_term_col,
+                     doc_term_info_col
+                    )
+</pre><p> <b>Arguments</b> </p><dl class="arglist">
+<dt>output_tbl </dt>
+<dd><p class="startdd">TEXT. Name of the output table to be created containing the sparse vector representation of the documents. It has the following columns: </p><table class="output">
+<tr>
+<th>doc_id </th><td>__TYPE_DOC__. Document id. <br />
+ __TYPE_DOC__: Column type depends on the type of <code>doc_id_col</code> in <code>documents_tbl</code>.   </td></tr>
+<tr>
+<th>sparse_vector </th><td>MADlib.svec. Corresponding sparse vector representation.  </td></tr>
+</table>
+<p class="enddd"></p>
+</dd>
+<dt>dictionary_tbl </dt>
+<dd><p class="startdd">TEXT. Name of the dictionary table containing features. </p><table class="output">
+<tr>
+<th>dict_id_col </th><td>TEXT. Name of the id column in the <code>dictionary_tbl</code>. <br />
+ Expected Type: INTEGER or BIGINT. <br />
+ NOTE: Values must be continuous ranging from 0 to total number of elements in the dictionary - 1.  </td></tr>
+<tr>
+<th>dict_term_col </th><td>TEXT. Name of the column containing term (features) in <code>dictionary_tbl</code>.  </td></tr>
+</table>
+<p class="enddd"></p>
+</dd>
+<dt>documents_tbl </dt>
+<dd>TEXT. Name of the documents table representing documents. <table class="output">
+<tr>
+<th>doc_id_col </th><td>TEXT. Name of the id column in the <code>documents_tbl</code>.  </td></tr>
+<tr>
+<th>doc_term_col </th><td>TEXT. Name of the term column in the <code>documents_tbl</code>.  </td></tr>
+<tr>
+<th>doc_term_info_col </th><td>TEXT. Name of the term info column in <code>documents_tbl</code>. The expected type of this column should be: <br />
+ - INTEGER, BIGINT or DOUBLE PRECISION: Values directly used to populate vector. <br />
+ - ARRAY: Length of the array used to populate the vector. <br />
+ ** For an example use case on using these types of column types, please refer to the example below.   </td></tr>
+</table>
+</dd>
+</dl>
+<p><b>Example:</b> <br />
+ Consider a corpus consisting of set of documents consisting of features (terms) along with doc ids: </p><pre class="example">
+1, {this,is,one,document,in,the,corpus}
+2, {i,am,the,second,document,in,the,corpus}
+3, {being,third,never,really,bothered,me,until,now}
+4, {the,document,before,me,is,the,third,document}
+</pre><ol type="1">
+<li>Prepare documents table in appropriate format. <br />
+ The corpus specified above can be represented by any of the following <code>documents_table:</code> <pre class="example">
+SELECT * FROM documents_table ORDER BY id;
+</pre> Result: <pre class="result">
+  id |   term   | count                 id |   term   | positions
+&#160;----+----------+-------               ----+----------+-----------
+   1 | is       |     1                  1 | is       | {1}
+   1 | in       |     1                  1 | in       | {4}
+   1 | one      |     1                  1 | one      | {2}
+   1 | this     |     1                  1 | this     | {0}
+   1 | the      |     1                  1 | the      | {5}
+   1 | document |     1                  1 | document | {3}
+   1 | corpus   |     1                  1 | corpus   | {6}
+   2 | second   |     1                  2 | second   | {3}
+   2 | document |     1                  2 | document | {4}
+   2 | corpus   |     1                  2 | corpus   | {7}
+   . | ...      |    ..                  . | ...      | ...
+   4 | document |     2                  4 | document | {1,7}
+...
+</pre></li>
+<li>Prepare dictionary table in appropriate format. <pre class="example">
+SELECT * FROM dictionary_table ORDER BY id;
+</pre> Result: <pre class="result">
+  id |   term
+&#160;----+----------
+   0 | am
+   1 | before
+   2 | being
+   3 | bothered
+   4 | corpus
+   5 | document
+   6 | i
+   7 | in
+   8 | is
+   9 | me
+...
+</pre></li>
+<li>Generate sparse vector for the documents using dictionary_table and documents_table. <br />
+ <code>doc_term_info_col</code> <code></code>(count) of type INTEGER: <pre class="example">
+SELECT * FROM madlib.gen_doc_svecs('svec_output', 'dictionary_table', 'id', 'term',
+                            'documents_table', 'id', 'term', 'count');
+</pre> <code>doc_term_info_col</code> <code></code>(positions) of type ARRAY: <pre class="example">
+SELECT * FROM madlib.gen_doc_svecs('svec_output', 'dictionary_table', 'id', 'term',
+                            'documents_table', 'id', 'term', 'positions');
+</pre> Result: <pre class="result">
+                                 gen_doc_svecs
+&#160;--------------------------------------------------------------------------------------
+ Created table svec_output (doc_id, sparse_vector) containing sparse vectors
+(1 row)
+</pre></li>
+<li>Analyze the sparse vectors created. <pre class="example">
+SELECT * FROM svec_output ORDER by doc_id;
+</pre> Result: <pre class="result">
+ doc_id |                  sparse_vector
+&#160;--------+-------------------------------------------------
+      1 | {4,2,1,2,3,1,2,1,1,1,1}:{0,1,0,1,0,1,0,1,0,1,0}
+      2 | {1,3,4,6,1,1,3}:{1,0,1,0,1,2,0}
+      3 | {2,2,5,3,1,1,2,1,1,1}:{0,1,0,1,0,1,0,1,0,1}
+      4 | {1,1,3,1,2,2,5,1,1,2}:{0,1,0,2,0,1,0,2,1,0}
+(4 rows)
+</pre></li>
+</ol>
+<p>See the file <a class="el" href="svec_8sql__in.html" title="SQL type definitions and functions for sparse vector data type svec ">svec.sql_in</a> for complete syntax.</p>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<p>We can use operations with svec type like &lt;, &gt;, *, **, /, =, +, SUM, etc, and they have meanings associated with typical vector operations. For example, the plus (+) operator adds each of the terms of two vectors having the same dimension together. </p><pre class="example">
+SELECT ('{0,1,5}'::float8[]::madlib.svec + '{4,3,2}'::float8[]::madlib.svec)::float8[];
+</pre><p> Result: </p><pre class="result">
+ float8
+&#160;--------
+ {4,4,7}
+</pre><p>Without the casting into float8[] at the end, we get: </p><pre class="example">
+SELECT '{0,1,5}'::float8[]::madlib.svec + '{4,3,2}'::float8[]::madlib.svec;
+</pre><p> Result: </p><pre class="result">
+ ?column?
+&#160;---------
+{2,1}:{4,7}
+</pre><p>A dot product (%*%) between the two vectors will result in a scalar result of type float8. The dot product should be (0*4 + 1*3 + 5*2) = 13, like this: </p><pre class="example">
+SELECT '{0,1,5}'::float8[]::madlib.svec %*% '{4,3,2}'::float8[]::madlib.svec;
+</pre> <pre class="result">
+ ?column?
+&#160;---------
+    13
+</pre><p>Special vector aggregate functions are also available. SUM is self explanatory. SVEC_COUNT_NONZERO evaluates the count of non-zero terms in each column found in a set of n-dimensional svecs and returns an svec with the counts. For instance, if we have the vectors {0,1,5}, {10,0,3},{0,0,3},{0,1,0}, then executing the SVEC_COUNT_NONZERO() aggregate function would result in {1,2,3}:</p>
+<pre class="example">
+CREATE TABLE list (a madlib.svec);
+INSERT INTO list VALUES ('{0,1,5}'::float8[]), ('{10,0,3}'::float8[]), ('{0,0,3}'::float8[]),('{0,1,0}'::float8[]);
+SELECT madlib.svec_count_nonzero(a)::float8[] FROM list;
+</pre><p> Result: </p><pre class="result">
+svec_count_nonzero
+&#160;----------------
+    {1,2,3}
+</pre><p>We do not use null bitmaps in the svec data type. A null value in an svec is represented explicitly as an NVP (No Value Present) value. For example, we have: </p><pre class="example">
+SELECT '{1,2,3}:{4,null,5}'::madlib.svec;
+</pre><p> Result: </p><pre class="result">
+      svec
+&#160;------------------
+ {1,2,3}:{4,NVP,5}
+</pre><p>Adding svecs with null values results in NVPs in the sum: </p><pre class="example">
+SELECT '{1,2,3}:{4,null,5}'::madlib.svec + '{2,2,2}:{8,9,10}'::madlib.svec;
+</pre><p> Result: </p><pre class="result">
+         ?column?
+ &#160;-------------------------
+  {1,2,1,2}:{12,NVP,14,15}
+</pre><p>An element of an svec can be accessed using the <a class="el" href="svec__util_8sql__in.html#a8787222aec691f94d9808d1369aa401c">svec_proj()</a> function, which takes an svec and the index of the element desired. </p><pre class="example">
+SELECT madlib.svec_proj('{1,2,3}:{4,5,6}'::madlib.svec, 1) + madlib.svec_proj('{4,5,6}:{1,2,3}'::madlib.svec, 15);
+</pre><p> Result: </p><pre class="result"> ?column?
+&#160;---------
+    7
+</pre><p>A subvector of an svec can be accessed using the <a class="el" href="svec__util_8sql__in.html#a5cb3446de5fc117befe88ccb1ebb0e4e">svec_subvec()</a> function, which takes an svec and the start and end index of the subvector desired. </p><pre class="example">
+SELECT madlib.svec_subvec('{2,4,6}:{1,3,5}'::madlib.svec, 2, 11);
+</pre><p> Result: </p><pre class="result">   svec_subvec
+&#160;----------------
+ {1,4,5}:{1,3,5}
+</pre><p>The elements/subvector of an svec can be changed using the function <a class="el" href="svec__util_8sql__in.html#a59407764a1cbf1937da39cf39a2f447c">svec_change()</a>. It takes three arguments: an m-dimensional svec sv1, a start index j, and an n-dimensional svec sv2 such that j + n - 1 &lt;= m, and returns an svec like sv1 but with the subvector sv1[j:j+n-1] replaced by sv2. An example follows: </p><pre class="example">
+SELECT madlib.svec_change('{1,2,3}:{4,5,6}'::madlib.svec,3,'{2}:{3}'::madlib.svec);
+</pre><p> Result: </p><pre class="result">     svec_change
+&#160;--------------------
+ {1,1,2,2}:{4,5,3,6}
+</pre><p>There are also higher-order functions for processing svecs. For example, the following is the corresponding function for lapply() in R. </p><pre class="example">
+SELECT madlib.svec_lapply('sqrt', '{1,2,3}:{4,5,6}'::madlib.svec);
+</pre><p> Result: </p><pre class="result">
+                  svec_lapply
+&#160;----------------------------------------------
+ {1,2,3}:{2,2.23606797749979,2.44948974278318}
+</pre><p>The full list of functions available for operating on svecs are available in svec.sql-in.</p>
+<p><b> A More Extensive Example</b></p>
+<p>For a text classification example, let's assume we have a dictionary composed of words in a sorted text array: </p><pre class="example">
+CREATE TABLE features (a text[]);
+INSERT INTO features VALUES
+            ('{am,before,being,bothered,corpus,document,i,in,is,me,
+               never,now,one,really,second,the,third,this,until}');
+</pre><p> We have a set of documents, each represented as an array of words: </p><pre class="example">
+CREATE TABLE documents(a int,b text[]);
+INSERT INTO documents VALUES
+            (1,'{this,is,one,document,in,the,corpus}'),
+            (2,'{i,am,the,second,document,in,the,corpus}'),
+            (3,'{being,third,never,really,bothered,me,until,now}'),
+            (4,'{the,document,before,me,is,the,third,document}');
+</pre><p>Now we have a dictionary and some documents, we would like to do some document categorization using vector arithmetic on word counts and proportions of dictionary words in each document.</p>
+<p>To start this process, we'll need to find the dictionary words in each document. We'll prepare what is called a Sparse Feature Vector or SFV for each document. An SFV is a vector of dimension N, where N is the number of dictionary words, and in each cell of an SFV is a count of each dictionary word in the document.</p>
+<p>Inside the sparse vector library, we have a function that will create an SFV from a document, so we can just do this (For a more efficient way for converting documents into sparse vectors, especially for larger datasets, please refer to <a href="#vectorization">Document Vectorization into Sparse Vectors</a>):</p>
+<pre class="example">
+SELECT madlib.svec_sfv((SELECT a FROM features LIMIT 1),b)::float8[]
+         FROM documents;
+</pre><p> Result: </p><pre class="result">
+                svec_sfv
+&#160;----------------------------------------
+ {0,0,0,0,1,1,0,1,1,0,0,0,1,0,0,1,0,1,0}
+ {0,0,1,1,0,0,0,0,0,1,1,1,0,1,0,0,1,0,1}
+ {1,0,0,0,1,1,1,1,0,0,0,0,0,0,1,2,0,0,0}
+ {0,1,0,0,0,2,0,0,1,1,0,0,0,0,0,2,1,0,0}
+</pre><p>Note that the output of madlib.svec_sfv() is an svec for each document containing the count of each of the dictionary words in the ordinal positions of the dictionary. This can more easily be understood by lining up the feature vector and text like this:</p>
+<pre class="example">
+SELECT madlib.svec_sfv((SELECT a FROM features LIMIT 1),b)::float8[]
+                , b
+         FROM documents;
+</pre><p> Result: </p><pre class="result">
+                svec_sfv                 |                        b
+&#160;----------------------------------------+--------------------------------------------------
+ {1,0,0,0,1,1,1,1,0,0,0,0,0,0,1,2,0,0,0} | {i,am,the,second,document,in,the,corpus}
+ {0,1,0,0,0,2,0,0,1,1,0,0,0,0,0,2,1,0,0} | {the,document,before,me,is,the,third,document}
+ {0,0,0,0,1,1,0,1,1,0,0,0,1,0,0,1,0,1,0} | {this,is,one,document,in,the,corpus}
+ {0,0,1,1,0,0,0,0,0,1,1,1,0,1,0,0,1,0,1} | {being,third,never,really,bothered,me,until,now}
+</pre> <pre class="example">
+SELECT * FROM features;
+</pre> <pre class="result">
+                                                a
+&#160;-------------------------------------------------------------------------------------------------------
+{am,before,being,bothered,corpus,document,i,in,is,me,never,now,one,really,second,the,third,this,until}
+</pre><p>Now when we look at the document "i am the second document in the corpus", its SFV is {1,3*0,1,1,1,1,6*0,1,2}. The word "am" is the first ordinate in the dictionary and there is 1 instance of it in the SFV. The word "before" has no instances in the document, so its value is "0" and so on.</p>
+<p>The function madlib.svec_sfv() can process large numbers of documents into their SFVs in parallel at high speed.</p>
+<p>The rest of the categorization process is all vector math. The actual count is hardly ever used. Instead, it's turned into a weight. The most common weight is called tf/idf for Term Frequency / Inverse Document Frequency. The calculation for a given term in a given document is</p>
+<pre class="example">
+{#Times in document} * log {#Documents / #Documents the term appears in}.
+</pre><p>For instance, the term "document" in document A would have weight 1 * log (4/3). In document D, it would have weight 2 * log (4/3). Terms that appear in every document would have tf/idf weight 0, since log (4/4) = log(1) = 0. (Our example has no term like that.) That usually sends a lot of values to 0.</p>
+<p>For this part of the processing, we'll need to have a sparse vector of the dictionary dimension (19) with the values </p><pre class="example">
+log(#documents/#Documents each term appears in).
+</pre><p> There will be one such vector for the whole list of documents (aka the "corpus"). The #documents is just a count of all of the documents, in this case 4, but there is one divisor for each dictionary word and its value is the count of all the times that word appears in the document. This single vector for the whole corpus can then be scalar product multiplied by each document SFV to produce the Term Frequency/Inverse Document Frequency weights.</p>
+<p>This can be done as follows: </p><pre class="example">
+CREATE TABLE corpus AS
+            (SELECT a, madlib.svec_sfv((SELECT a FROM features LIMIT 1),b) sfv
+         FROM documents);
+CREATE TABLE weights AS
+          (SELECT a docnum, madlib.svec_mult(sfv, logidf) tf_idf
+           FROM (SELECT madlib.svec_log(madlib.svec_div(count(sfv)::madlib.svec,madlib.svec_count_nonzero(sfv))) logidf
+                FROM corpus) foo, corpus ORDER BYdocnum);
+SELECT * FROM weights;
+</pre><p> Result </p><pre class="result">
+docnum |                tf_idf
+&#160;------+----------------------------------------------------------------------
+     1 | {4,1,1,1,2,3,1,2,1,1,1,1}:{0,0.69,0.28,0,0.69,0,1.38,0,0.28,0,1.38,0}
+     2 | {1,3,1,1,1,1,6,1,1,3}:{1.38,0,0.69,0.28,1.38,0.69,0,1.38,0.57,0}
+     3 | {2,2,5,1,2,1,1,2,1,1,1}:{0,1.38,0,0.69,1.38,0,1.38,0,0.69,0,1.38}
+     4 | {1,1,3,1,2,2,5,1,1,2}:{0,1.38,0,0.57,0,0.69,0,0.57,0.69,0}
+</pre><p>We can now get the "angular distance" between one document and the rest of the documents using the ACOS of the dot product of the document vectors: The following calculates the angular distance between the first document and each of the other documents: </p><pre class="example">
+SELECT docnum,
+                180. * ( ACOS( madlib.svec_dmin( 1., madlib.svec_dot(tf_idf, testdoc)
+                    / (madlib.svec_l2norm(tf_idf)*madlib.svec_l2norm(testdoc))))/3.141592654) angular_distance
+         FROM weights,(SELECT tf_idf testdoc FROM weights WHERE docnum = 1 LIMIT 1) foo
+         ORDER BY 1;
+</pre><p> Result: </p><pre class="result">
+docnum | angular_distance
+&#160;-------+------------------
+     1 |                0
+     2 | 78.8235846096986
+     3 | 89.9999999882484
+     4 | 80.0232034288617
+</pre><p>We can see that the angular distance between document 1 and itself is 0 degrees and between document 1 and 3 is 90 degrees because they share no features at all. The angular distance can now be plugged into machine learning algorithms that rely on a distance measure between data points.</p>
+<p>SVEC also provides functionality for declaring array given an array of positions and array of values, intermediate values betweens those are declared to be base value that user provides in the same function call. In the example below the fist array of integers represents the positions for the array two (array of floats). Positions do not need to come in the sorted order. Third value represents desired maximum size of the array. This assures that array is of that size even if last position is not. If max size &lt; 1 that value is ignored and array will end at the last position in the position vector. Final value is a float representing the base value to be used between the declared ones (0 would be a common candidate):</p>
+<pre class="example">
+SELECT madlib.svec_cast_positions_float8arr(ARRAY[1,2,7,5,87],ARRAY[.1,.2,.7,.5,.87],90,0.0);
+</pre><p> Result: </p><pre class="result">
+        svec_cast_positions_float8arr
+&#160;----------------------------------------------------
+{1,1,2,1,1,1,79,1,3}:{0.1,0.2,0,0.5,0,0.7,0,0.87,0}
+(1 row)
+</pre><p><a class="anchor" id="related"></a></p><dl class="section user"><dt>Related Topics</dt><dd></dd></dl>
+<p>Other examples of svecs usage can be found in the k-means module, <a class="el" href="group__grp__kmeans.html">k-Means Clustering</a>.</p>
+<p>File <a class="el" href="svec_8sql__in.html" title="SQL type definitions and functions for sparse vector data type svec ">svec.sql_in</a> documenting the SQL functions.</p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__svm.html b/docs/rc/group__grp__svm.html
new file mode 100644
index 0000000..0cb419e
--- /dev/null
+++ b/docs/rc/group__grp__svm.html
@@ -0,0 +1,869 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Support Vector Machines</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__svm.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Support Vector Machines<div class="ingroups"><a class="el" href="group__grp__super.html">Supervised Learning</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b><ul>
+<li class="level1">
+<a href="#svm_classification">Classification Function</a> </li>
+<li class="level1">
+<a href="#svm_regression">Regression Function</a> </li>
+<li class="level1">
+<a href="#novelty_detection">Novelty Detection</a> </li>
+<li class="level1">
+<a href="#kernel_params">Kernel Parameters</a> </li>
+<li class="level1">
+<a href="#parameters">Other Parameters</a> </li>
+<li class="level1">
+<a href="#predict">Prediction Functions</a> </li>
+<li class="level1">
+<a href="#example">Examples</a> </li>
+<li class="level1">
+<a href="#background">Technical Background</a> </li>
+<li class="level1">
+<a href="#literature">Literature</a> </li>
+<li class="level1">
+<a href="#related">Related Topics</a> </li>
+</ul>
+</div><p>Support vector machines are models for regression and classification tasks. SVM models have two particularly desirable features: robustness in the presence of noisy data and applicability to a variety of data configurations. At its core, a <em>linear</em> SVM model is a hyperplane separating two distinct classes of data (in the case of classification problems), in such a way that the distance between the hyperplane and the nearest training data point (called the <em>margin</em>) is maximized. Vectors that lie on this margin are called support vectors. With the support vectors fixed, perturbations of vectors beyond the margin will not affect the model; this contributes to the model’s robustness. By substituting a kernel function for the usual inner product, one can approximate a large variety of decision boundaries in addition to linear hyperplanes. <a class="anchor" id="svm_classification"></a></p><dl class="section user"><dt>Classification Training Function</dt><dd>The SVM binary classification training function has the following format: <pre class="syntax">
+svm_classification(
+    source_table,
+    model_table,
+    dependent_varname,
+    independent_varname,
+    kernel_func,
+    kernel_params,
+    grouping_col,
+    params,
+    verbose
+    )
+</pre> <b>Arguments</b> <dl class="arglist">
+<dt>source_table </dt>
+<dd><p class="startdd">TEXT. Name of the table containing the training data.</p>
+<p class="enddd"></p>
+</dd>
+<dt>model_table </dt>
+<dd><p class="startdd">TEXT. Name of the output table containing the model. Details of the output tables are provided below. </p>
+<p class="enddd"></p>
+</dd>
+<dt>dependent_varname </dt>
+<dd><p class="startdd">TEXT. Name of the dependent variable column. For classification, this column can contain values of any type, but must assume exactly two distinct values since only binary classification is currently supported. </p>
+<p class="enddd"></p>
+</dd>
+<dt>independent_varname </dt>
+<dd><p class="startdd">TEXT. Expression list to evaluate for the independent variables. An intercept variable should not be included as part of this expression. See 'fit_intercept' in the kernel params for info on intercepts. Please note that expression should be able to be cast to DOUBLE PRECISION[].</p>
+<p class="enddd"></p>
+</dd>
+<dt>kernel_func (optional) </dt>
+<dd><p class="startdd">TEXT, default: 'linear'. Type of kernel. Currently three kernel types are supported: 'linear', 'gaussian', and 'polynomial'. The text can be any subset of the three strings; for e.g., kernel_func='ga' will create a Gaussian kernel. </p>
+<p class="enddd"></p>
+</dd>
+<dt>kernel_params (optional) </dt>
+<dd><p class="startdd">TEXT, defaults: NULL. Parameters for non-linear kernel in a comma-separated string of key-value pairs. The actual parameters differ depending on the value of <em>kernel_func</em>. See the description below for details. </p>
+<p class="enddd"></p>
+</dd>
+<dt>grouping_col (optional) </dt>
+<dd><p class="startdd">TEXT, default: NULL. An expression list used to group the input dataset into discrete groups, which results in running one model per group. Similar to the SQL "GROUP BY" clause. When this value is NULL, no grouping is used and a single model is generated. Please note that cross validation is not supported if grouping is used.</p>
+<p class="enddd"></p>
+</dd>
+<dt>params (optional) </dt>
+<dd><p class="startdd">TEXT, default: NULL. Parameters for optimization and regularization in a comma-separated string of key-value pairs. If a list of values is provided, then cross-validation will be performed to select the <em>best</em> value from the list. See the description below for details. </p>
+<p class="enddd"></p>
+</dd>
+<dt>verbose (optional) </dt>
+<dd>BOOLEAN default: FALSE. Verbose output of the results of training. </dd>
+</dl>
+</dd></dl>
+<p><b>Output tables</b> <br />
+ The model table produced by SVM contains the following columns: </p><table class="output">
+<tr>
+<th>coef </th><td>FLOAT8. Vector of coefficients.  </td></tr>
+<tr>
+<th>grouping_key </th><td>TEXT Identifies the group to which the datum belongs.  </td></tr>
+<tr>
+<th>num_rows_processed </th><td>BIGINT. Numbers of rows processed.  </td></tr>
+<tr>
+<th>num_rows_skipped </th><td>BIGINT. Numbers of rows skipped due to missing values or failures.  </td></tr>
+<tr>
+<th>num_iterations </th><td>INTEGER. Number of iterations completed by stochastic gradient descent algorithm. The algorithm either converged in this number of iterations or hit the maximum number specified in the optimization parameters.   </td></tr>
+<tr>
+<th>loss </th><td>FLOAT8. Value of the objective function of SVM, expressed as an average loss per row over the <em>source_table</em>. See Technical Background section below for more details.  </td></tr>
+<tr>
+<th>norm_of_gradient </th><td>FLOAT8. Value of the L2-norm of the (sub)-gradient of the objective function.  </td></tr>
+<tr>
+<th>__dep_var_mapping </th><td>TEXT[]. Vector of dependent variable labels. The first entry corresponds to -1 and the second to +1. For internal use only.  </td></tr>
+</table>
+<p>An auxiliary table named &lt;model_table&gt;_random is created if the kernel is not linear. It contains data needed to embed test data into a random feature space (see references [2,3]). This data is used internally by svm_predict and not meaningful on its own to the user, so you can ignore it.</p>
+<p>A summary table named &lt;model_table&gt;_summary is also created, which has the following columns: </p><table class="output">
+<tr>
+<th>method </th><td>'svm'  </td></tr>
+<tr>
+<th>version_number </th><td>Version of MADlib which was used to generate the model.  </td></tr>
+<tr>
+<th>source_table </th><td>The data source table name.  </td></tr>
+<tr>
+<th>model_table </th><td>The model table name.  </td></tr>
+<tr>
+<th>dependent_varname </th><td>The dependent variable.  </td></tr>
+<tr>
+<th>independent_varname </th><td>The independent variables.  </td></tr>
+<tr>
+<th>kernel_func </th><td>The kernel function.  </td></tr>
+<tr>
+<th>kernel_parameters </th><td>The kernel parameters, as well as random feature map data.  </td></tr>
+<tr>
+<th>grouping_col </th><td>Columns on which to group.  </td></tr>
+<tr>
+<th>optim_params </th><td>A string containing the optimization parameters.  </td></tr>
+<tr>
+<th>reg_params </th><td>A string containing the regularization parameters.  </td></tr>
+<tr>
+<th>num_all_groups </th><td>Number of groups in SVM training.  </td></tr>
+<tr>
+<th>num_failed_groups </th><td>Number of failed groups in SVM training.  </td></tr>
+<tr>
+<th>total_rows_processed </th><td>Total numbers of rows processed in all groups.  </td></tr>
+<tr>
+<th>total_rows_skipped </th><td>Total numbers of rows skipped in all groups due to missing values or failures.  </td></tr>
+</table>
+<p>If cross validation is used, a table is created with a user specified name having the following columns: </p><table class="output">
+<tr>
+<th>... </th><td>Names of cross validation parameters  </td></tr>
+<tr>
+<th>mean_score </th><td>Mean value of accuracy when predicted on the validation fold, averaged over all folds and all rows.  </td></tr>
+<tr>
+<th>std_dev_score </th><td>Standard deviation of accuracy when predicted on the validation fold, averaged over all folds and all rows.  </td></tr>
+</table>
+<p><a class="anchor" id="svm_regression"></a></p><dl class="section user"><dt>Regression Training Function</dt><dd>The SVM regression training function has the following format: <pre class="syntax">
+svm_regression(source_table,
+    model_table,
+    dependent_varname,
+    independent_varname,
+    kernel_func,
+    kernel_params,
+    grouping_col,
+    params,
+    verbose
+    )
+</pre></dd></dl>
+<p><b>Arguments</b> </p>
+<p>Specifications for regression are largely the same as for classification. In the model table, there is no dependent variable mapping. The following arguments have specifications which differ from svm_classification: </p><dl class="arglist">
+<dt>dependent_varname </dt>
+<dd>TEXT. Name of the dependent variable column. For regression, this column can contain only values or expressions that can be cast to DOUBLE PRECISION. Otherwise, an error will be thrown.  </dd>
+<dt>params (optional) </dt>
+<dd>TEXT, default: NULL. The parameters <em>epsilon</em> and <em>eps_table</em> are only meaningful for regression. See description below for more details.  </dd>
+</dl>
+<p><a class="anchor" id="novelty_detection"></a></p><dl class="section user"><dt>Novelty Detection Training Function</dt><dd>The novelty detection function is a one-class SVM classifier, and has the following format: <pre class="syntax">
+svm_one_class(
+    source_table,
+    model_table,
+    independent_varname,
+    kernel_func,
+    kernel_params,
+    grouping_col,
+    params,
+    verbose
+    )
+</pre> <b>Arguments</b> </dd></dl>
+<p>Specifications for novelty detection are largely the same as for classification, except the dependent variable name is not specified. The model table is the same as that for classification.</p>
+<p><a class="anchor" id="kernel_params"></a></p><dl class="section user"><dt>Kernel Parameters</dt><dd>Kernel parameters are supplied in a string containing a comma-delimited list of name-value pairs. All of these named parameters are optional, and their order does not matter. You must use the format "&lt;param_name&gt; = &lt;value&gt;" to specify the value of a parameter, otherwise the parameter is ignored.</dd></dl>
+<dl class="arglist">
+<dt><em>Parameters common to all kernels</em></dt>
+<dd></dd>
+<dt>fit_intercept </dt>
+<dd>Default: True. The parameter <em>fit_intercept</em> is an indicator to add an intercept to the <em>independent_varname</em> array expression. The intercept is added to the end of the feature list - thus the last element of the coefficient list is the intercept.  </dd>
+<dt>n_components </dt>
+<dd>Default: max(100, 2*num_features). The dimensionality of the transformed feature space. A larger value lowers the variance of the estimate of the kernel but requires more memory and takes longer to train. <dl class="section note"><dt>Note</dt><dd>Setting the <em>n_components</em> kernel parameter properly is important to generate an accurate decision boundary and can make the difference between a good model and a useless model. Try increasing the value of <em>n_components</em> if you are not getting an accurate decision boundary. This parameter arises from using the primal formulation, in which we map data into a relatively low-dimensional randomized feature space [2, 3]. The parameter <em>n_components</em> is the dimension of that feature space. We use the primal in MADlib to support scaling to large data sets, compared to R or other single node implementations that use the dual formulation and hence do not have this type of mapping, since the the dimensionality of the transformed feature space in the dual is effectively infinite.</dd></dl>
+</dd>
+<dt>random_state </dt>
+<dd>Default: 1. Seed used by a random number generator.  </dd>
+</dl>
+<dl class="arglist">
+<dt><em>Parameters for 'gaussian' kernel</em></dt>
+<dd></dd>
+<dt>gamma </dt>
+<dd>Default: 1/num_features. The parameter \(\gamma\) in the Radius Basis Function kernel, i.e., \(\exp(-\gamma||x-y||^2)\). Choosing a proper value for <em>gamma</em> is critical to the performance of kernel machine; e.g., while a large <em>gamma</em> tends to cause overfitting, a small <em>gamma</em> will make the model too constrained to capture the complexity of the data.  </dd>
+</dl>
+<dl class="arglist">
+<dt><em>Parameters for 'polynomial' kernel</em></dt>
+<dd></dd>
+<dt>coef0 </dt>
+<dd>Default: 1.0. The independent term \(q\) in \( (\langle x,y\rangle + q)^r \). Must be larger than or equal to 0. When it is 0, the polynomial kernel is in homogeneous form.  </dd>
+<dt>degree </dt>
+<dd>Default: 3. The parameter \(r\) in \( (\langle x,y\rangle + q)^r \).  </dd>
+</dl>
+<p><a class="anchor" id="parameters"></a></p><dl class="section user"><dt>Other Parameters</dt><dd>Parameters in this section are supplied in the <em>params</em> argument as a string containing a comma-delimited list of name-value pairs. All of these named parameters are optional, and their order does not matter. You must use the format "&lt;param_name&gt; = &lt;value&gt;" to specify the value of a parameter, otherwise the parameter is ignored.</dd></dl>
+<p>Hyperparameter optimization can be carried out using the built-in cross validation mechanism, which is activated by assigning a value greater than 1 to the parameter <em>n_folds</em> in <em>params</em>. Please note that cross validation is not supported if grouping is used.</p>
+<p>The values of a parameter to cross validate should be provided in a list. For example, if one wanted to regularize with the L1 norm and use a lambda value from the set {0.3, 0.4, 0.5}, one might input 'lambda={0.3, 0.4, 0.5}, norm=L1, n_folds=10' in <em>params</em>. Note that the use of '{}' and '[]' are both valid here. </p><dl class="section note"><dt>Note</dt><dd>Note that not all of the parameters below can be cross-validated. For parameters where cross validation is allowed, their default values are presented in list format; e.g., [0.01].</dd></dl>
+<pre class="syntax">
+  'init_stepsize = &lt;value&gt;,
+   decay_factor = &lt;value&gt;,
+   max_iter = &lt;value&gt;,
+   tolerance = &lt;value&gt;,
+   lambda = &lt;value&gt;,
+   norm = &lt;value&gt;,
+   epsilon = &lt;value&gt;,
+   eps_table = &lt;value&gt;,
+   validation_result = &lt;value&gt;,
+   n_folds = &lt;value&gt;,
+   class_weight = &lt;value&gt;'
+</pre><p> <b>Parameters</b> </p><dl class="arglist">
+<dt>init_stepsize </dt>
+<dd><p class="startdd">Default: [0.01]. Also known as the initial learning rate. A small value is usually desirable to ensure convergence, while a large value provides more room for progress during training. Since the best value depends on the condition number of the data, in practice one often searches in an exponential grid using built-in cross validation; e.g., "init_stepsize = [1, 0.1, 0.001]". To reduce training time, it is common to run cross validation on a subsampled dataset, since this usually provides a good estimate of the condition number of the whole dataset. Then the resulting <em>init_stepsize</em> can be run on the whole dataset.</p>
+<p></p>
+<p class="enddd"></p>
+</dd>
+<dt>decay_factor </dt>
+<dd><p class="startdd">Default: [0.9]. Control the learning rate schedule: 0 means constant rate; &lt;-1 means inverse scaling, i.e., stepsize = init_stepsize / iteration; &gt; 0 means &lt;exponential decay, i.e., stepsize = init_stepsize * decay_factor^iteration. </p>
+<p class="enddd"></p>
+</dd>
+<dt>max_iter </dt>
+<dd><p class="startdd">Default: [100]. The maximum number of iterations allowed. </p>
+<p class="enddd"></p>
+</dd>
+<dt>tolerance </dt>
+<dd><p class="startdd">Default: 1e-10. The criterion to end iterations. The training stops whenever the difference between the training models of two consecutive iterations is smaller than <em>tolerance</em> or the iteration number is larger than <em>max_iter</em>. </p>
+<p class="enddd"></p>
+</dd>
+<dt>lambda </dt>
+<dd><p class="startdd">Default: [0.01]. Regularization parameter. Must be non-negative. </p>
+<p class="enddd"></p>
+</dd>
+<dt>norm </dt>
+<dd><p class="startdd">Default: 'L2'. Name of the regularization, either 'L2' or 'L1'. </p>
+<p class="enddd"></p>
+</dd>
+<dt>epsilon </dt>
+<dd><p class="startdd">Default: [0.01]. Determines the \(\epsilon\) for \(\epsilon\)-regression. Ignored during classification. When training the model, differences of less than \(\epsilon\) between estimated labels and actual labels are ignored. A larger \(\epsilon\) will yield a model with fewer support vectors, but will not generalize as well to future data. Generally, it has been suggested that epsilon should increase with noisier data, and decrease with the number of samples. See [5]. </p>
+<p class="enddd"></p>
+</dd>
+<dt>eps_table </dt>
+<dd><p class="startdd">Default: NULL. Name of the input table that contains values of epsilon for different groups. Ignored when <em>grouping_col</em> is NULL. Define this input table if you want different epsilon values for different groups. The table consists of a column named <em>epsilon</em> which specifies the epsilon values, and one or more columns for <em>grouping_col</em>. Extra groups are ignored, and groups not present in this table will use the epsilon value specified in parameter <em>epsilon</em>. </p>
+<p class="enddd"></p>
+</dd>
+<dt>validation_result </dt>
+<dd><p class="startdd">Default: NULL. Name of the table to store the cross validation scores. This table is only created if the name is not NULL. The cross validation scores are the mean and standard deviation of the accuracy when predicted on the validation fold, averaged over all folds and all rows. For classification, the accuracy metric used is the ratio of correct classifications. For regression, the accuracy metric used is the negative of mean squared error (negative to make it a concave problem, thus selecting <em>max</em> means the highest accuracy). </p>
+<p class="enddd"></p>
+</dd>
+<dt>n_folds </dt>
+<dd><p class="startdd">Default: 0. Number of folds (k). Must be at least 2 to activate cross validation. If a value of k &gt; 2 is specified, each fold is then used as a validation set once, while the other k - 1 folds form the training set. </p>
+<p class="enddd"></p>
+</dd>
+<dt>class_weight </dt>
+<dd><p class="startdd">Default: NULL for classification, 'balanced' for one-class novelty detection, this param is not applicable for regression.</p>
+<p>Set the weight for the classes. If not given (empty/NULL), all classes are set to have equal weight. If 'class_weight = balanced', values of y are automatically adjusted as inversely proportional to class frequencies in the input data i.e. the weights are set as n_samples / (2 * bincount(y)).</p>
+<p>Alternatively, 'class_weight' can be a mapping, giving the weight for each class. E.g., for dependent variable values 'a' and 'b', the 'class_weight' might be {a: 1, b: 3}. This gives three times the weight to observations with class value 'b' compared to 'a'. (In the SVM algorithm, this translates into observations with class value 'b' contributing 3x to learning in the stochastic gradient step compared to 'a'.)</p>
+<p class="enddd">For regression, the class weights are always one.  </p>
+</dd>
+</dl>
+<p><a class="anchor" id="predict"></a></p><dl class="section user"><dt>Prediction Function</dt><dd>The prediction function is used to estimate the conditional mean given a new predictor. The same syntax is used for classification, regression and novelty detection: <pre class="syntax">
+svm_predict(model_table,
+            new_data_table,
+            id_col_name,
+            output_table)
+</pre></dd></dl>
+<p><b>Arguments</b> </p><dl class="arglist">
+<dt>model_table </dt>
+<dd><p class="startdd">TEXT. Model table produced by the training function.</p>
+<p class="enddd"></p>
+</dd>
+<dt>new_data_table </dt>
+<dd><p class="startdd">TEXT. Name of the table containing the prediction data. This table is expected to contain the same features that were used during training. The table should also contain id_col_name used for identifying each row.</p>
+<p class="enddd"></p>
+</dd>
+<dt>id_col_name </dt>
+<dd><p class="startdd">TEXT. The name of the id column in the input table.</p>
+<p class="enddd"></p>
+</dd>
+<dt>output_table </dt>
+<dd>TEXT. Name of the table where output predictions are written. If this table name is already in use, then an error is returned. Table contains: <table class="output">
+<tr>
+<th>id </th><td>Gives the 'id' for each prediction, corresponding to each row from the new_data_table.  </td></tr>
+<tr>
+<th>prediction </th><td>Provides the prediction for each row in new_data_table. For regression this would be the same as decision_function. For classification, this will be one of the dependent variable values.  </td></tr>
+<tr>
+<th>decision_function </th><td>Provides the distance between each point and the separating hyperplane.  </td></tr>
+</table>
+</dd>
+</dl>
+<p><a class="anchor" id="example"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<h4>Classification</h4>
+<ol type="1">
+<li>Create an input data set. <pre class="example">
+DROP TABLE IF EXISTS houses;
+CREATE TABLE houses (id INT, tax INT, bedroom INT, bath FLOAT, price INT,
+            size INT, lot INT);
+INSERT INTO houses VALUES
+  (1 ,  590 ,       2 ,    1 ,  50000 ,  770 , 22100),
+  (2 , 1050 ,       3 ,    2 ,  85000 , 1410 , 12000),
+  (3 ,   20 ,       3 ,    1 ,  22500 , 1060 ,  3500),
+  (4 ,  870 ,       2 ,    2 ,  90000 , 1300 , 17500),
+  (5 , 1320 ,       3 ,    2 , 133000 , 1500 , 30000),
+  (6 , 1350 ,       2 ,    1 ,  90500 ,  820 , 25700),
+  (7 , 2790 ,       3 ,  2.5 , 260000 , 2130 , 25000),
+  (8 ,  680 ,       2 ,    1 , 142500 , 1170 , 22000),
+  (9 , 1840 ,       3 ,    2 , 160000 , 1500 , 19000),
+ (10 , 3680 ,       4 ,    2 , 240000 , 2790 , 20000),
+ (11 , 1660 ,       3 ,    1 ,  87000 , 1030 , 17500),
+ (12 , 1620 ,       3 ,    2 , 118600 , 1250 , 20000),
+ (13 , 3100 ,       3 ,    2 , 140000 , 1760 , 38000),
+ (14 , 2070 ,       2 ,    3 , 148000 , 1550 , 14000),
+ (15 ,  650 ,       3 ,  1.5 ,  65000 , 1450 , 12000);
+</pre></li>
+<li>Train linear classification model and view the model. Categorical variable is price &lt; $100,0000. <pre class="example">
+DROP TABLE IF EXISTS houses_svm, houses_svm_summary;
+SELECT madlib.svm_classification('houses',
+                                 'houses_svm',
+                                 'price &lt; 100000',
+                                 'ARRAY[1, tax, bath, size]'
+                           );
+-- Set extended display on for easier reading of output
+\x on
+SELECT * FROM houses_svm;
+</pre> <pre class="result">
+-[ RECORD 1 ]------+--------------------------------------------------------------------------------
+coef               | {0.103994021495116,-0.00288252192097756,0.0540748706580464,0.00131729978010033}
+loss               | 0.928463796644648
+norm_of_gradient   | 7849.34910604307
+num_iterations     | 100
+num_rows_processed | 15
+num_rows_skipped   | 0
+dep_var_mapping    | {f,t}
+</pre></li>
+<li>Predict using linear model. We want to predict if house price is less than $100,000. We use the training data set for prediction as well, which is not usual but serves to show the syntax. The predicted results are in the <em>prediction</em> column and the actual data is in the <em>actual</em> column. <pre class="example">
+DROP TABLE IF EXISTS houses_pred;
+SELECT madlib.svm_predict('houses_svm',
+                          'houses',
+                          'id',
+                          'houses_pred');
+\x off
+SELECT *, price &lt; 100000 AS actual FROM houses JOIN houses_pred USING (id) ORDER BY id;
+</pre> <pre class="result">
+  id | tax  | bedroom | bath | price  | size |  lot  | prediction | decision_function  | actual
+----+------+---------+------+--------+------+-------+------------+--------------------+--------
+  1 |  590 |       2 |    1 |  50000 |  770 | 22100 | t          |  0.211310440574799 | t
+  2 | 1050 |       3 |    2 |  85000 | 1410 | 12000 | t          |   0.37546191651855 | t
+  3 |   20 |       3 |    1 |  22500 | 1060 |  3500 | t          |    2.4021783278516 | t
+  4 |  870 |       2 |    2 |  90000 | 1300 | 17500 | t          |   0.63967342411632 | t
+  5 | 1320 |       3 |    2 | 133000 | 1500 | 30000 | f          | -0.179964783767855 | f
+  6 | 1350 |       2 |    1 |  90500 |  820 | 25700 | f          |  -1.78347623159173 | t
+  7 | 2790 |       3 |  2.5 | 260000 | 2130 | 25000 | f          |  -2.86795504439645 | f
+  8 |  680 |       2 |    1 | 142500 | 1170 | 22000 | t          |  0.811108105668757 | f
+  9 | 1840 |       3 |    2 | 160000 | 1500 | 19000 | f          |  -1.61739505790168 | f
+ 10 | 3680 |       4 |    2 | 240000 | 2790 | 20000 | f          |  -3.96700444824078 | f
+ 11 | 1660 |       3 |    1 |  87000 | 1030 | 17500 | f          |  -2.19489938920329 | t
+ 12 | 1620 |       3 |    2 | 118600 | 1250 | 20000 | f          |  -1.53961627668269 | f
+ 13 | 3100 |       3 |    2 | 140000 | 1760 | 38000 | f          |  -4.54881979553637 | f
+ 14 | 2070 |       2 |    3 | 148000 | 1550 | 14000 | f          |  -2.06911803381861 | f
+ 15 |  650 |       3 |  1.5 |  65000 | 1450 | 12000 | t          |   1.52704061329968 | t
+(15 rows)
+</pre> Count the miss-classifications: <pre class="example">
+SELECT COUNT(*) FROM houses_pred JOIN houses USING (id)
+WHERE houses_pred.prediction != (houses.price &lt; 100000);
+</pre> <pre class="result">
+ count
+-------+
+     3
+</pre></li>
+<li>Train using Gaussian kernel. This time we specify the initial step size and maximum number of iterations to run. As part of the kernel parameter, we choose 10 as the dimension of the space where we train SVM. As a result, the model will be a 10 dimensional vector, instead of 4 as in the case of linear model. <pre class="example">
+DROP TABLE IF EXISTS houses_svm_gaussian, houses_svm_gaussian_summary, houses_svm_gaussian_random;
+SELECT madlib.svm_classification( 'houses',
+                                  'houses_svm_gaussian',
+                                  'price &lt; 100000',
+                                  'ARRAY[1, tax, bath, size]',
+                                  'gaussian',
+                                  'n_components=10',
+                                  '',
+                                  'init_stepsize=1, max_iter=200'
+                           );
+\x on
+SELECT * FROM houses_svm_gaussian;
+</pre> <pre class="result">
+-[ RECORD 1 ]------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+coef               | {-1.67275666209207,1.5191640881642,-0.503066422926727,1.33250956564454,2.23009854231314,-0.0602475029497936,1.97466397155921,2.3668779833279,0.577739846910355,2.81255996089824}
+loss               | 0.0571869097340991
+norm_of_gradient   | 1.18281830047046
+num_iterations     | 177
+num_rows_processed | 15
+num_rows_skipped   | 0
+dep_var_mapping    | {f,t}
+</pre></li>
+<li>Prediction using the Gaussian model. The predicted results are in the <em>prediction</em> column and the actual data is in the <em>actual</em> column. <pre class="example">
+DROP TABLE IF EXISTS houses_pred_gaussian;
+SELECT madlib.svm_predict('houses_svm_gaussian',
+                          'houses',
+                          'id',
+                          'houses_pred_gaussian');
+\x off
+SELECT *, price &lt; 100000 AS actual FROM houses JOIN houses_pred_gaussian USING (id) ORDER BY id;
+</pre> <pre class="result">
+ id | tax  | bedroom | bath | price  | size |  lot  | prediction | decision_function  | actual
+----+------+---------+------+--------+------+-------+------------+--------------------+--------
+  1 |  590 |       2 |    1 |  50000 |  770 | 22100 | t          |   1.89855833083557 | t
+  2 | 1050 |       3 |    2 |  85000 | 1410 | 12000 | t          |   1.47736856649617 | t
+  3 |   20 |       3 |    1 |  22500 | 1060 |  3500 | t          |  0.999999992995691 | t
+  4 |  870 |       2 |    2 |  90000 | 1300 | 17500 | t          |  0.999999989634351 | t
+  5 | 1320 |       3 |    2 | 133000 | 1500 | 30000 | f          |  -1.03645694166465 | f
+  6 | 1350 |       2 |    1 |  90500 |  820 | 25700 | t          |   1.16430515664766 | t
+  7 | 2790 |       3 |  2.5 | 260000 | 2130 | 25000 | f          | -0.545622670134529 | f
+  8 |  680 |       2 |    1 | 142500 | 1170 | 22000 | f          |  -1.00000000207512 | f
+  9 | 1840 |       3 |    2 | 160000 | 1500 | 19000 | f          |   -1.4748622470053 | f
+ 10 | 3680 |       4 |    2 | 240000 | 2790 | 20000 | f          |  -1.00085274698056 | f
+ 11 | 1660 |       3 |    1 |  87000 | 1030 | 17500 | t          |    1.8614251155696 | t
+ 12 | 1620 |       3 |    2 | 118600 | 1250 | 20000 | f          |  -1.77616417509695 | f
+ 13 | 3100 |       3 |    2 | 140000 | 1760 | 38000 | f          |  -1.07759348149549 | f
+ 14 | 2070 |       2 |    3 | 148000 | 1550 | 14000 | f          |  -3.42475835116536 | f
+ 15 |  650 |       3 |  1.5 |  65000 | 1450 | 12000 | t          |   1.00000008401961 | t
+(15 rows)
+</pre> Count the miss-classifications. Note this produces a more accurate result than the linear case for this data set: <pre class="example">
+SELECT COUNT(*) FROM houses_pred_gaussian JOIN houses USING (id)
+WHERE houses_pred_gaussian.prediction != (houses.price &lt; 100000);
+</pre> <pre class="result">
+ count
+-------+
+     0
+(1 row)
+</pre></li>
+<li>In the case of an unbalanced class-size dataset, use the 'balanced' parameter to classify when building the model: <pre class="example">
+DROP TABLE IF EXISTS houses_svm_gaussian, houses_svm_gaussian_summary, houses_svm_gaussian_random;
+SELECT madlib.svm_classification( 'houses',
+                                  'houses_svm_gaussian',
+                                  'price &lt; 150000',
+                                  'ARRAY[1, tax, bath, size]',
+                                  'gaussian',
+                                  'n_components=10',
+                                  '',
+                                  'init_stepsize=1, max_iter=200, class_weight=balanced'
+                           );
+\x on
+SELECT * FROM houses_svm_gaussian;
+</pre> <pre class="result">
+-[ RECORD 1 ]------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+coef               | {0.891926151039837,0.169282494673541,-2.26539133689874,0.526518499596676,-0.900664505989526,0.508112011288015,-0.355474591147659,1.23127975981665,1.53694964239487,1.46496058633682}
+loss               | 0.56900274445785
+norm_of_gradient   | 0.989597662458527
+num_iterations     | 183
+num_rows_processed | 15
+num_rows_skipped   | 0
+dep_var_mapping    | {f,t}
+</pre></li>
+</ol>
+<h4>Regression</h4>
+<ol type="1">
+<li>Create input data set. For regression we use part of the well known abalone data set <a href="https://archive.ics.uci.edu/ml/datasets/abalone">https://archive.ics.uci.edu/ml/datasets/abalone</a> : <pre class="example">
+DROP TABLE IF EXISTS abalone;
+CREATE TABLE abalone (id INT, sex TEXT, length FLOAT, diameter FLOAT, height FLOAT, rings INT);
+INSERT INTO abalone VALUES
+(1,'M',0.455,0.365,0.095,15),
+(2,'M',0.35,0.265,0.09,7),
+(3,'F',0.53,0.42,0.135,9),
+(4,'M',0.44,0.365,0.125,10),
+(5,'I',0.33,0.255,0.08,7),
+(6,'I',0.425,0.3,0.095,8),
+(7,'F',0.53,0.415,0.15,20),
+(8,'F',0.545,0.425,0.125,16),
+(9,'M',0.475,0.37,0.125,9),
+(10,'F',0.55,0.44,0.15,19),
+(11,'F',0.525,0.38,0.14,14),
+(12,'M',0.43,0.35,0.11,10),
+(13,'M',0.49,0.38,0.135,11),
+(14,'F',0.535,0.405,0.145,10),
+(15,'F',0.47,0.355,0.1,10),
+(16,'M',0.5,0.4,0.13,12),
+(17,'I',0.355,0.28,0.085,7),
+(18,'F',0.44,0.34,0.1,10),
+(19,'M',0.365,0.295,0.08,7),
+(20,'M',0.45,0.32,0.1,9);
+</pre></li>
+<li>Train a linear regression model: <pre class="example">
+DROP TABLE IF EXISTS abalone_svm_regression, abalone_svm_regression_summary;
+SELECT madlib.svm_regression('abalone',
+                             'abalone_svm_regression',
+                             'rings',
+                             'ARRAY[1, length, diameter, height]'
+                           );
+\x on
+SELECT * FROM abalone_svm_regression;
+</pre> <pre class="result">
+-[ RECORD 1 ]------+-----------------------------------------------------------------------
+coef               | {1.998949892503,0.918517478913099,0.712125856084095,0.229379472956877}
+loss               | 8.29033295818392
+norm_of_gradient   | 23.225177785827
+num_iterations     | 100
+num_rows_processed | 20
+num_rows_skipped   | 0
+dep_var_mapping    | {NULL}
+</pre></li>
+<li>Predict using the linear regression model: <pre class="example">
+DROP TABLE IF EXISTS abalone_regr;
+SELECT madlib.svm_predict('abalone_svm_regression',
+                          'abalone',
+                          'id',
+                          'abalone_regr');
+\x off
+SELECT * FROM abalone JOIN abalone_regr USING (id) ORDER BY id;
+</pre> <pre class="result">
+ id | sex | length | diameter | height | rings |    prediction    | decision_function
+----+-----+--------+----------+--------+-------+------------------+-------------------
+  1 | M   |  0.455 |    0.365 |  0.095 |    15 | 2.69859240928376 |  2.69859240928376
+  2 | M   |   0.35 |    0.265 |   0.09 |     7 | 2.52978857282818 |  2.52978857282818
+  3 | F   |   0.53 |     0.42 |  0.135 |     9 | 2.81582333426116 |  2.81582333426116
+  4 | M   |   0.44 |    0.365 |  0.125 |    10 | 2.69169603073001 |  2.69169603073001
+  5 | I   |   0.33 |    0.255 |   0.08 |     7 | 2.50200316683054 |  2.50200316683054
+  6 | I   |  0.425 |      0.3 |  0.095 |     8 | 2.62474869654157 |  2.62474869654157
+  7 | F   |   0.53 |    0.415 |   0.15 |    20 | 2.81570339722408 |  2.81570339722408
+  8 | F   |  0.545 |    0.425 |  0.125 |    16 | 2.83086793257882 |  2.83086793257882
+  9 | M   |  0.475 |     0.37 |  0.125 |     9 | 2.72740477577673 |  2.72740477577673
+ 10 | F   |   0.55 |     0.44 |   0.15 |    19 |  2.8518768970598 |   2.8518768970598
+ 11 | F   |  0.525 |     0.38 |   0.14 |    14 | 2.78389260680315 |  2.78389260680315
+ 12 | M   |   0.43 |     0.35 |   0.11 |    10 | 2.66838827339779 |  2.66838827339779
+ 13 | M   |   0.49 |     0.38 |  0.135 |    11 | 2.75059759385832 |  2.75059759385832
+ 14 | F   |  0.535 |    0.405 |  0.145 |    10 | 2.81202782833915 |  2.81202782833915
+ 15 | F   |   0.47 |    0.355 |    0.1 |    10 | 2.70639581129576 |  2.70639581129576
+ 16 | M   |    0.5 |      0.4 |   0.13 |    12 | 2.77287839069521 |  2.77287839069521
+ 17 | I   |  0.355 |     0.28 |  0.085 |     7 | 2.54391615211472 |  2.54391615211472
+ 18 | F   |   0.44 |     0.34 |    0.1 |    10 | 2.66815839489651 |  2.66815839489651
+ 19 | M   |  0.365 |    0.295 |   0.08 |     7 | 2.56263631931732 |  2.56263631931732
+ 20 | M   |   0.45 |     0.32 |    0.1 |     9 | 2.66310105219146 |  2.66310105219146
+(20 rows)
+</pre> RMS error: <pre class="example">
+SELECT SQRT(AVG((rings-prediction)*(rings-prediction))) as rms_error FROM abalone
+JOIN abalone_regr USING (id);
+</pre> <pre class="result">
+    rms_error
+-----------------+
+ 9.0884271818321
+(1 row)
+</pre></li>
+<li>Train a non-linear regression model using a Gaussian kernel: <pre class="example">DROP TABLE IF EXISTS abalone_svm_gaussian_regression, abalone_svm_gaussian_regression_summary, abalone_svm_gaussian_regression_random;
+SELECT madlib.svm_regression( 'abalone',
+                              'abalone_svm_gaussian_regression',
+                              'rings',
+                              'ARRAY[1, length, diameter, height]',
+                              'gaussian',
+                              'n_components=10',
+                              '',
+                              'init_stepsize=1, max_iter=200'
+                           );
+\x on
+SELECT * FROM abalone_svm_gaussian_regression;
+</pre> <pre class="result">
+-[ RECORD 1 ]------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+coef               | {4.49016341280977,2.19062972461334,-2.04673653356154,1.11216153651262,2.83478599238881,-4.23122821845785,4.17684533744501,-5.36892552740644,0.775782561685621,-3.62606941016707}
+loss               | 2.66850539541894
+norm_of_gradient   | 0.97440079536379
+num_iterations     | 163
+num_rows_processed | 20
+num_rows_skipped   | 0
+dep_var_mapping    | {NULL}
+</pre></li>
+<li>Predict using Gaussian regression model: <pre class="example">
+DROP TABLE IF EXISTS abalone_gaussian_regr;
+SELECT madlib.svm_predict('abalone_svm_gaussian_regression',
+                          'abalone',
+                          'id',
+                          'abalone_gaussian_regr');
+\x off
+SELECT * FROM abalone JOIN abalone_gaussian_regr USING (id) ORDER BY id;
+</pre> <pre class="result">
+ id | sex | length | diameter | height | rings |    prediction    | decision_function
+----+-----+--------+----------+--------+-------+------------------+-------------------
+  1 | M   |  0.455 |    0.365 |  0.095 |    15 | 9.92189555675422 |  9.92189555675422
+  2 | M   |   0.35 |    0.265 |   0.09 |     7 | 9.81553107620013 |  9.81553107620013
+  3 | F   |   0.53 |     0.42 |  0.135 |     9 | 10.0847384862759 |  10.0847384862759
+  4 | M   |   0.44 |    0.365 |  0.125 |    10 | 10.0100000075406 |  10.0100000075406
+  5 | I   |   0.33 |    0.255 |   0.08 |     7 | 9.74093262454458 |  9.74093262454458
+  6 | I   |  0.425 |      0.3 |  0.095 |     8 | 9.94807651709641 |  9.94807651709641
+  7 | F   |   0.53 |    0.415 |   0.15 |    20 | 10.1448936105369 |  10.1448936105369
+  8 | F   |  0.545 |    0.425 |  0.125 |    16 | 10.0579420659954 |  10.0579420659954
+  9 | M   |  0.475 |     0.37 |  0.125 |     9 |  10.055724626407 |   10.055724626407
+ 10 | F   |   0.55 |     0.44 |   0.15 |    19 | 10.1225030222559 |  10.1225030222559
+ 11 | F   |  0.525 |     0.38 |   0.14 |    14 |  10.160706707435 |   10.160706707435
+ 12 | M   |   0.43 |     0.35 |   0.11 |    10 | 9.95760174386841 |  9.95760174386841
+ 13 | M   |   0.49 |     0.38 |  0.135 |    11 | 10.0981242315617 |  10.0981242315617
+ 14 | F   |  0.535 |    0.405 |  0.145 |    10 | 10.1501121415596 |  10.1501121415596
+ 15 | F   |   0.47 |    0.355 |    0.1 |    10 | 9.97689437628973 |  9.97689437628973
+ 16 | M   |    0.5 |      0.4 |   0.13 |    12 | 10.0633271219326 |  10.0633271219326
+ 17 | I   |  0.355 |     0.28 |  0.085 |     7 | 9.79492924255328 |  9.79492924255328
+ 18 | F   |   0.44 |     0.34 |    0.1 |    10 | 9.94856833428783 |  9.94856833428783
+ 19 | M   |  0.365 |    0.295 |   0.08 |     7 | 9.78278863173308 |  9.78278863173308
+ 20 | M   |   0.45 |     0.32 |    0.1 |     9 | 9.98822477687532 |  9.98822477687532
+(20 rows)
+</pre> Compute the RMS error. Note this produces a more accurate result than the linear case for this data set: <pre class="example">
+SELECT SQRT(AVG((rings-prediction)*(rings-prediction))) as rms_error FROM abalone
+JOIN abalone_gaussian_regr USING (id);
+</pre> <pre class="result">
+    rms_error
+------------------+
+ 3.83678516581768
+(1 row)
+</pre></li>
+<li>Cross validation. Let's run cross validation for different initial step sizes and lambda values: <pre class="example">
+DROP TABLE IF EXISTS abalone_svm_gaussian_regression, abalone_svm_gaussian_regression_summary,
+abalone_svm_gaussian_regression_random, abalone_svm_gaussian_regression_cv;
+SELECT madlib.svm_regression( 'abalone',
+                              'abalone_svm_gaussian_regression',
+                              'rings',
+                              'ARRAY[1, length, diameter, height]',
+                              'gaussian',
+                              'n_components=10',
+                              '',
+                              'init_stepsize=[0.01,1], n_folds=3, max_iter=200, lambda=[0.01, 0.1, 0.5],
+                              validation_result=abalone_svm_gaussian_regression_cv'
+                           );
+\x on
+SELECT * FROM abalone_svm_gaussian_regression;
+</pre> <pre class="result">
+-[ RECORD 1 ]------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+coef               | {4.46074154389204,2.19335800415975,-2.14775901092668,1.06805891149535,2.91168496475457,-3.95521278459095,4.20496790233169,-5.28144330907061,0.427743633754918,-3.58999505728692}
+loss               | 2.68317592175908
+norm_of_gradient   | 0.69852112502746
+num_iterations     | 169
+num_rows_processed | 20
+num_rows_skipped   | 0
+dep_var_mapping    | {NULL}
+</pre> View the summary table showing the final model parameters are those that produced the lowest error in the cross validation runs: <pre class="example">
+SELECT * FROM abalone_svm_gaussian_regression_summary;
+</pre> <pre class="result">
+-[ RECORD 1 ]--------+------------------------------------------------------------------------------------
+method               | SVR
+version_number       | 1.15-dev
+source_table         | abalone
+model_table          | abalone_svm_gaussian_regression
+dependent_varname    | rings
+independent_varname  | ARRAY[1, length, diameter, height]
+kernel_func          | gaussian
+kernel_params        | gamma=0.25, n_components=10,random_state=1, fit_intercept=False, fit_in_memory=True
+grouping_col         | NULL
+optim_params         | init_stepsize=1.0,
+                     | decay_factor=0.9,
+                     | max_iter=200,
+                     | tolerance=1e-10,
+                     | epsilon=0.01,
+                     | eps_table=,
+                     | class_weight=
+reg_params           | lambda=0.01, norm=l2, n_folds=3
+num_all_groups       | 1
+num_failed_groups    | 0
+total_rows_processed | 20
+total_rows_skipped   | 0
+(6 rows)
+</pre> View the statistics for the various cross validation values: <pre class="example">
+\x off
+SELECT * FROM abalone_svm_gaussian_regression_cv;
+</pre> <pre class="result">
+ init_stepsize | lambda |   mean_score   | std_dev_score
+---------------+--------+----------------+----------------
+           1.0 |   0.01 | -4.06711568585 | 0.435966381366
+           1.0 |    0.1 | -4.08068428345 |  0.44660797513
+           1.0 |    0.5 | -4.52576046087 |  0.20597876382
+          0.01 |   0.01 | -11.0231044189 | 0.739956548721
+          0.01 |    0.1 | -11.0244799274 | 0.740029346709
+          0.01 |    0.5 | -11.0305445077 | 0.740350338532
+(6 rows)
+</pre></li>
+<li>Predict using the cross-validated Gaussian regression model: <pre class="example">
+DROP TABLE IF EXISTS abalone_gaussian_regr;
+SELECT madlib.svm_predict('abalone_svm_gaussian_regression',
+                          'abalone',
+                          'id',
+                          'abalone_gaussian_regr');
+</pre> Compute the RMS error. Note this produces a more accurate result than the previous run with the Gaussian kernel: <pre class="example">
+SELECT SQRT(AVG((rings-prediction)*(rings-prediction))) as rms_error FROM abalone
+JOIN abalone_gaussian_regr USING (id);
+</pre> <pre class="result">
+    rms_error
+------------------+
+ 3.84208909699442
+(1 row)
+</pre></li>
+</ol>
+<h4>Novelty Detection</h4>
+<ol type="1">
+<li>Now train a non-linear one-class SVM for novelty detection, using a Gaussian kernel. Note that the dependent variable is not a parameter for one-class: <pre class="example">
+DROP TABLE IF EXISTS houses_one_class_gaussian, houses_one_class_gaussian_summary, houses_one_class_gaussian_random;
+select madlib.svm_one_class('houses',
+                            'houses_one_class_gaussian',
+                            'ARRAY[1,tax,bedroom,bath,size,lot,price]',
+                            'gaussian',
+                            'gamma=0.5,n_components=55, random_state=3',
+                            NULL,
+                            'max_iter=100, init_stepsize=10,lambda=10, tolerance=0'
+                            );
+\x on
+SELECT * FROM houses_one_class_gaussian;
+</pre> Result: <pre class="result">
+-[ RECORD 1 ]------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+coef               | {redacted for brevity}
+loss               | 0.944016313708205
+norm_of_gradient   | 14.5271059047443
+num_iterations     | 100
+num_rows_processed | 16
+num_rows_skipped   | -1
+dep_var_mapping    | {-1,1}
+</pre></li>
+<li>For the novelty detection using one-class, let's create a test data set using the last 3 values from the training set plus an outlier at the end (10x price): <pre class="example">
+DROP TABLE IF EXISTS houses_one_class_test;
+CREATE TABLE houses_one_class_test (id INT, tax INT, bedroom INT, bath FLOAT, price INT,
+            size INT, lot INT);
+INSERT INTO houses_one_class_test VALUES
+ (1 , 3100 ,       3 ,    2 , 140000 , 1760 , 38000),
+ (2 , 2070 ,       2 ,    3 , 148000 , 1550 , 14000),
+ (3 ,  650 ,       3 ,  1.5 ,  65000 , 1450 , 12000),
+ (4 ,  650 ,       3 ,  1.5 ,  650000 , 1450 , 12000);
+</pre> Now run prediction on the Gaussian one-class novelty detection model. Result shows the last row predicted to be novel: <pre class="example">
+DROP TABLE IF EXISTS houses_pred;
+SELECT madlib.svm_predict('houses_one_class_gaussian',
+                          'houses_one_class_test',
+                          'id',
+                          'houses_pred');
+\x off
+SELECT * FROM houses_one_class_test JOIN houses_pred USING (id) ORDER BY id;
+</pre> Result showing the last row predicted to be novel: <pre class="result">
+ id | tax  | bedroom | bath | price  | size |  lot  | prediction |  decision_function
+----+------+---------+------+--------+------+-------+------------+---------------------
+  1 | 3100 |       3 |    2 | 140000 | 1760 | 38000 |          1 |   0.111497008121437
+  2 | 2070 |       2 |    3 | 148000 | 1550 | 14000 |          1 |  0.0996021345169148
+  3 |  650 |       3 |  1.5 |  65000 | 1450 | 12000 |          1 |  0.0435064008756942
+  4 |  650 |       3 |  1.5 | 650000 | 1450 | 12000 |         -1 | -0.0168967845338403
+</pre></li>
+</ol>
+<p><a class="anchor" id="background"></a></p><dl class="section user"><dt>Technical Background</dt><dd></dd></dl>
+<p>To solve linear SVM, the following objective function is minimized: </p><p class="formulaDsp">
+\[ \underset{w,b}{\text{Minimize }} \lambda||w||^2 + \frac{1}{n}\sum_{i=1}^n \ell(y_i,f_{w,b}(x_i)) \]
+</p>
+<p>where \((x_1,y_1),\ldots,(x_n,y_n)\) are labeled training data and \(\ell(y,f(x))\) is a loss function. When performing classification, \(\ell(y,f(x)) = \max(0,1-yf(x))\) is the <em>hinge loss</em>. For regression, the loss function \(\ell(y,f(x)) = \max(0,|y-f(x)|-\epsilon)\) is used.</p>
+<p>If \( f_{w,b}(x) = \langle w, x\rangle + b\) is linear, then the objective function is convex and incremental gradient descent (IGD, or SGD) can be applied to find a global minimum. See Feng, et al. [1] for more details.</p>
+<p>To learn with Gaussian or polynomial kernels, the training data is first mapped via a <em>random feature map</em> in such a way that the usual inner product in the feature space approximates the kernel function in the input space. The linear SVM training function is then run on the resulting data. See the papers [2,3] for more information on random feature maps.</p>
+<p>Also, see the book [4] by Scholkopf and Smola for more details on SVMs in general.</p>
+<p><a class="anchor" id="literature"></a></p><dl class="section user"><dt>Literature</dt><dd></dd></dl>
+<p><a class="anchor" id="svm-lit-1"></a>[1] Xixuan Feng, Arun Kumar, Ben Recht, and Christopher Re: Towards a Unified Architecture for in-RDBMS analytics, in SIGMOD Conference, 2012 <a href="http://www.eecs.berkeley.edu/~brecht/papers/12.FengEtAl.SIGMOD.pdf">http://www.eecs.berkeley.edu/~brecht/papers/12.FengEtAl.SIGMOD.pdf</a></p>
+<p><a class="anchor" id="svm-lit-2"></a>[2] Purushottam Kar and Harish Karnick: Random Feature Maps for Dot Product Kernels, Proceedings of the 15th International Conference on Artificial Intelligence and Statistics, 2012, <a href="http://machinelearning.wustl.edu/mlpapers/paper_files/AISTATS2012_KarK12.pdf">http://machinelearning.wustl.edu/mlpapers/paper_files/AISTATS2012_KarK12.pdf</a></p>
+<p><a class="anchor" id="svm-lit-3"></a>[3] Ali Rahmini and Ben Recht: Random Features for Large-Scale Kernel Machines, Neural Information Processing Systems 2007, <a href="http://www.eecs.berkeley.edu/~brecht/papers/07.rah.rec.nips.pdf">http://www.eecs.berkeley.edu/~brecht/papers/07.rah.rec.nips.pdf</a></p>
+<p><a class="anchor" id="svm-lit-4"></a>[4] Bernhard Scholkopf and Alexander Smola: Learning with Kernels, The MIT Press, Cambridge, MA, 2002.</p>
+<p><a class="anchor" id="svm-lit-5"></a>[5] Vladimir Cherkassky and Yunqian Ma: Practical Selection of SVM Parameters and Noise Estimation for SVM Regression, Neural Networks, 2004 <a href="http://www.ece.umn.edu/users/cherkass/N2002-SI-SVM-13-whole.pdf">http://www.ece.umn.edu/users/cherkass/N2002-SI-SVM-13-whole.pdf</a></p>
+<p><a class="anchor" id="related"></a></p><dl class="section user"><dt>Related Topics</dt><dd></dd></dl>
+<p>File <a class="el" href="svm_8sql__in.html" title="SQL functions for SVM (Poisson) ">svm.sql_in</a> documenting the training function</p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:59 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__text__utilities.html b/docs/rc/group__grp__text__utilities.html
new file mode 100644
index 0000000..3401cc9
--- /dev/null
+++ b/docs/rc/group__grp__text__utilities.html
@@ -0,0 +1,358 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Term Frequency</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__text__utilities.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Term Frequency<div class="ingroups"><a class="el" href="group__grp__other__functions.html">Utilities</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li>
+<a href="#function_syntax">Function Syntax</a> </li>
+<li>
+<a href="#examples">Examples</a> </li>
+<li>
+<a href="#related">Related Topics</a> </li>
+</ul>
+</div><p>Term frequency computes the number of times that a word or term occurs in a document. Term frequency is often used as part of a larger text processing pipeline, which may include operations such as stemming, stop word removal and topic modelling.</p>
+<p><a class="anchor" id="function_syntax"></a></p><dl class="section user"><dt>Function Syntax</dt><dd></dd></dl>
+<pre class="syntax">
+    term_frequency(input_table,
+                   doc_id_col,
+                   word_col,
+                   output_table,
+                   compute_vocab)
+</pre><p><b>Arguments:</b> </p><dl class="arglist">
+<dt>input_table </dt>
+<dd><p class="startdd">TEXT. The name of the table containing the documents, with one document per row. Each row is in the form &lt;doc_id, word_vector&gt; where <code>doc_id</code> is an id unique to each document, and <code>word_vector</code> is a text array containing the words in the document. The <code>word_vector</code> should contain multiple entries of a word if the document contains multiple occurrence of that word. </p>
+<p class="enddd"></p>
+</dd>
+<dt>doc_id_col </dt>
+<dd><p class="startdd">TEXT. The name of the column containing the document id. </p>
+<p class="enddd"></p>
+</dd>
+<dt>word_col </dt>
+<dd><p class="startdd">TEXT. The name of the column containing the vector of words/terms in the document. This column should be of type that can be cast to TEXT[].</p>
+<p class="enddd"></p>
+</dd>
+<dt>output_table </dt>
+<dd><p class="startdd">TEXT. The name of the table to store the term frequency output. The output table contains the following columns:</p><ul>
+<li><code>doc_id_col:</code> This the document id column (name will be same as the one provided as input).</li>
+<li><code>word:</code> Word/term present in a document. Depending on the value of <code>compute_vocab</code> below, this is either the original word as it appears in <code>word_col</code>, or an id representing the word. Note that word id's start from 0 not 1.</li>
+<li><code>count:</code> The number of times this word is found in the document. </li>
+</ul>
+<p class="enddd"></p>
+</dd>
+<dt>compute_vocab </dt>
+<dd>BOOLEAN. (Optional, Default=FALSE) Flag to indicate if a vocabulary table is to be created. If TRUE, an additional output table is created containing the vocabulary of all words, with an id assigned to each word in alphabetical order. The table is called <em>output_table</em>_vocabulary (i.e., suffix added to the <em>output_table</em> name) and contains the following columns:<ul>
+<li><code>wordid:</code> An id for each word in alphabetical order.</li>
+<li><code>word:</code> The word/term corresponding to the id.  </li>
+</ul>
+</dd>
+</dl>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<ol type="1">
+<li>First we create a document table with one document per row: <pre class="example">
+DROP TABLE IF EXISTS documents;
+CREATE TABLE documents(docid INT4, contents TEXT);
+INSERT INTO documents VALUES
+(0, 'I like to eat broccoli and bananas. I ate a banana and spinach smoothie for breakfast.'),
+(1, 'Chinchillas and kittens are cute.'),
+(2, 'My sister adopted two kittens yesterday.'),
+(3, 'Look at this cute hamster munching on a piece of broccoli.');
+</pre> You can apply stemming, stop word removal and tokenization at this point in order to prepare the documents for text processing. Depending upon your database version, various tools are available. Databases based on more recent versions of PostgreSQL may do something like: <pre class="example">
+SELECT tsvector_to_array(to_tsvector('english',contents)) from documents;
+</pre> <pre class="result">
+                    tsvector_to_array
++----------------------------------------------------------
+ {ate,banana,breakfast,broccoli,eat,like,smoothi,spinach}
+ {chinchilla,cute,kitten}
+ {adopt,kitten,sister,two,yesterday}
+ {broccoli,cute,hamster,look,munch,piec}
+(4 rows)
+</pre> In this example, we assume a database based on an older version of PostgreSQL and just perform basic punctuation removal and tokenization. The array of words is added as a new column to the documents table: <pre class="example">
+ALTER TABLE documents ADD COLUMN words TEXT[];
+UPDATE documents SET words =
+    regexp_split_to_array(lower(
+    regexp_replace(contents, E'[,.;\']','', 'g')
+    ), E'[\\s+]');
+\x on
+SELECT * FROM documents ORDER BY docid;
+</pre> <pre class="result">
+-[ RECORD 1 ]------------------------------------------------------------------------------------
+docid    | 0
+contents | I like to eat broccoli and bananas. I ate a banana and spinach smoothie for breakfast.
+words    | {i,like,to,eat,broccoli,and,bananas,i,ate,a,banana,and,spinach,smoothie,for,breakfast}
+-[ RECORD 2 ]------------------------------------------------------------------------------------
+docid    | 1
+contents | Chinchillas and kittens are cute.
+words    | {chinchillas,and,kittens,are,cute}
+-[ RECORD 3 ]------------------------------------------------------------------------------------
+docid    | 2
+contents | My sister adopted two kittens yesterday.
+words    | {my,sister,adopted,two,kittens,yesterday}
+-[ RECORD 4 ]------------------------------------------------------------------------------------
+docid    | 3
+contents | Look at this cute hamster munching on a piece of broccoli.
+words    | {look,at,this,cute,hamster,munching,on,a,piece,of,broccoli}
+</pre></li>
+<li>Compute the frequency of each word in each document: <pre class="example">
+DROP TABLE IF EXISTS documents_tf, documents_tf_vocabulary;
+SELECT madlib.term_frequency('documents',    -- input table
+                             'docid',        -- document id column
+                             'words',        -- vector of words in document
+                             'documents_tf'  -- output table
+                            );
+\x off
+SELECT * FROM documents_tf ORDER BY docid;
+</pre> <pre class="result">
+ docid |    word     | count
+-------+-------------+-------
+     0 | a           |     1
+     0 | breakfast   |     1
+     0 | banana      |     1
+     0 | and         |     2
+     0 | eat         |     1
+     0 | smoothie    |     1
+     0 | to          |     1
+     0 | like        |     1
+     0 | broccoli    |     1
+     0 | bananas     |     1
+     0 | spinach     |     1
+     0 | i           |     2
+     0 | ate         |     1
+     0 | for         |     1
+     1 | are         |     1
+     1 | cute        |     1
+     1 | kittens     |     1
+     1 | chinchillas |     1
+     1 | and         |     1
+     2 | two         |     1
+     2 | yesterday   |     1
+     2 | kittens     |     1
+     2 | sister      |     1
+     2 | my          |     1
+     2 | adopted     |     1
+     3 | this        |     1
+     3 | at          |     1
+     3 | a           |     1
+     3 | broccoli    |     1
+     3 | of          |     1
+     3 | look        |     1
+     3 | hamster     |     1
+     3 | on          |     1
+     3 | piece       |     1
+     3 | cute        |     1
+     3 | munching    |     1
+(36 rows)
+</pre></li>
+<li>Next we create a vocabulary of the words and store a wordid in the output table instead of the actual word: <pre class="example">
+DROP TABLE IF EXISTS documents_tf, documents_tf_vocabulary;
+SELECT madlib.term_frequency('documents',    -- input table
+                             'docid',        -- document id column
+                             'words',        -- vector of words in document
+                             'documents_tf',-- output table
+                             TRUE
+                            );
+SELECT * FROM documents_tf ORDER BY docid;
+</pre>  <pre class="result">
+ docid | wordid | count
+-------+--------+-------
+     0 |     17 |     1
+     0 |      9 |     1
+     0 |     25 |     1
+     0 |     12 |     1
+     0 |     13 |     1
+     0 |     15 |     2
+     0 |      0 |     1
+     0 |      2 |     2
+     0 |     28 |     1
+     0 |      5 |     1
+     0 |      6 |     1
+     0 |      7 |     1
+     0 |      8 |     1
+     0 |     26 |     1
+     1 |     16 |     1
+     1 |     11 |     1
+     1 |     10 |     1
+     1 |      2 |     1
+     1 |      3 |     1
+     2 |     30 |     1
+     2 |      1 |     1
+     2 |     16 |     1
+     2 |     20 |     1
+     2 |     24 |     1
+     2 |     29 |     1
+     3 |      4 |     1
+     3 |     21 |     1
+     3 |     22 |     1
+     3 |     23 |     1
+     3 |      0 |     1
+     3 |     11 |     1
+     3 |      9 |     1
+     3 |     27 |     1
+     3 |     14 |     1
+     3 |     18 |     1
+     3 |     19 |     1
+(36 rows)
+</pre>  Note above that wordid's start at 0 not 1. The vocabulary table maps wordid to the actual word: <pre class="example">
+SELECT * FROM documents_tf_vocabulary ORDER BY wordid;
+</pre> <pre class="result">
+ wordid |    word
+--------+-------------
+      0 | a
+      1 | adopted
+      2 | and
+      3 | are
+      4 | at
+      5 | ate
+      6 | banana
+      7 | bananas
+      8 | breakfast
+      9 | broccoli
+     10 | chinchillas
+     11 | cute
+     12 | eat
+     13 | for
+     14 | hamster
+     15 | i
+     16 | kittens
+     17 | like
+     18 | look
+     19 | munching
+     20 | my
+     21 | of
+     22 | on
+     23 | piece
+     24 | sister
+     25 | smoothie
+     26 | spinach
+     27 | this
+     28 | to
+     29 | two
+     30 | yesterday
+(31 rows)
+</pre></li>
+</ol>
+<p><a class="anchor" id="related"></a></p><dl class="section user"><dt>Related Topics</dt><dd></dd></dl>
+<p>See <a class="el" href="text__utilities_8sql__in.html" title="SQL functions for carrying out routine text operations. ">text_utilities.sql_in</a> for the term frequency SQL function definition and <a class="el" href="porter__stemmer_8sql__in.html" title="implementation of porter stemmer operations in SQL ">porter_stemmer.sql_in</a> for the stemmer function. </p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:59 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__topic__modelling.html b/docs/rc/group__grp__topic__modelling.html
new file mode 100644
index 0000000..f6626ee
--- /dev/null
+++ b/docs/rc/group__grp__topic__modelling.html
@@ -0,0 +1,139 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Topic Modelling</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__topic__modelling.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#groups">Modules</a>  </div>
+  <div class="headertitle">
+<div class="title">Topic Modelling<div class="ingroups"><a class="el" href="group__grp__unsupervised.html">Unsupervised Learning</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>A collection of methods to uncover abstract topics in a document corpus. </p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group__grp__lda"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__lda.html">Latent Dirichlet Allocation</a></td></tr>
+<tr class="memdesc:group__grp__lda"><td class="mdescLeft">&#160;</td><td class="mdescRight">Generates a Latent Dirichlet Allocation predictive model for a collection of documents. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:59 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__topic__modelling.js b/docs/rc/group__grp__topic__modelling.js
new file mode 100644
index 0000000..249097b
--- /dev/null
+++ b/docs/rc/group__grp__topic__modelling.js
@@ -0,0 +1,4 @@
+var group__grp__topic__modelling =
+[
+    [ "Latent Dirichlet Allocation", "group__grp__lda.html", null ]
+];
\ No newline at end of file
diff --git a/docs/rc/group__grp__train__test__split.html b/docs/rc/group__grp__train__test__split.html
new file mode 100644
index 0000000..1c2e39f
--- /dev/null
+++ b/docs/rc/group__grp__train__test__split.html
@@ -0,0 +1,307 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Train-Test Split</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__train__test__split.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Train-Test Split<div class="ingroups"><a class="el" href="group__grp__mdl.html">Model Selection</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li>
+<a href="#strs">Train-Test Split</a> </li>
+<li>
+<a href="#examples">Examples</a> </li>
+</ul>
+</div><p>Train-test split is a utility to create training and testing sets from a single data set.</p>
+<p><a class="anchor" id="strs"></a></p><dl class="section user"><dt>Train-Test Split</dt><dd></dd></dl>
+<pre class="syntax">
+train_test_split(   source_table,
+                    output_table,
+                    train_proportion,
+                    test_proportion,
+                    grouping_cols,
+                    target_cols,
+                    with_replacement,
+                    separate_output_tables
+                )
+</pre><p><b>Arguments</b> </p><dl class="arglist">
+<dt>source_table </dt>
+<dd><p class="startdd">TEXT. Name of the table containing the input data.</p>
+<p class="enddd"></p>
+</dd>
+<dt>output_table </dt>
+<dd><p class="startdd">Name of output table. A new INTEGER column on the right called 'split' will identify 1 for train set and 0 for test set, unless the 'separate_output_tables' parameter below is TRUE, in which case two output tables will be created using the 'output_table' name with the suffixes '_train' and '_test'. The output table contains all the columns present in the source table unless otherwise specified in the 'target_cols' parameter below. </p>
+<p class="enddd"></p>
+</dd>
+<dt>train_proportion </dt>
+<dd><p class="startdd">FLOAT8 in the range (0,1). Proportion of the dataset to include in the train split. If the 'grouping_col' parameter is specified below, each group will be sampled independently using the train proportion, i.e., in a stratified fashion.</p>
+<p class="enddd"></p>
+</dd>
+<dt>test_proportion (optional) </dt>
+<dd><p class="startdd">FLOAT8 in the range (0,1). Proportion of the dataset to include in the test split. Default is the complement to the train proportion (1-'train_proportion'). If the 'grouping_col' parameter is specified below, each group will be sampled independently using the train proportion, i.e., in a stratified fashion.</p>
+<p class="enddd"></p>
+</dd>
+<dt>grouping_cols (optional) </dt>
+<dd><p class="startdd">TEXT, default: NULL. A single column or a list of comma-separated columns that defines how to stratify. When this parameter is NULL, the train-test split is not stratified.</p>
+<p class="enddd"></p>
+</dd>
+<dt>target_cols (optional) </dt>
+<dd><p class="startdd">TEXT, default NULL. A comma-separated list of columns to appear in the 'output_table'. If NULL or '*', all columns from the 'source_table' will appear in the 'output_table'.</p>
+<p class="enddd"><a class="anchor" id="note"></a></p><dl class="section note"><dt>Note</dt><dd>Do not include 'grouping_cols' in the parameter 'target_cols', because they are always included in the 'output_table'.</dd></dl>
+</dd>
+<dt>with_replacement (optional) </dt>
+<dd><p class="startdd">BOOLEAN, default FALSE. Determines whether to sample with replacement or without replacement (default). With replacement means that it is possible that the same row may appear in the sample set more than once. Without replacement means a given row can be selected only once.</p>
+<p class="enddd"></p>
+</dd>
+<dt>separate_output_tables (optional) </dt>
+<dd>BOOLEAN, default FALSE. If TRUE, two output tables will be created using the 'output_table' name with the suffixes '_train' and '_test'. </dd>
+</dl>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<p>Please note that due to the random nature of sampling, your results may look different from those below.</p>
+<ol type="1">
+<li>Create an input table: <pre class="syntax">
+DROP TABLE IF EXISTS test;
+CREATE TABLE test(
+    id1 INTEGER,
+    id2 INTEGER,
+    gr1 INTEGER,
+    gr2 INTEGER
+);
+INSERT INTO test VALUES
+(1,0,1,1),
+(2,0,1,1),
+(3,0,1,1),
+(4,0,1,1),
+(5,0,1,1),
+(6,0,1,1),
+(7,0,1,1),
+(8,0,1,1),
+(9,0,1,1),
+(9,0,1,1),
+(9,0,1,1),
+(9,0,1,1),
+(0,1,1,2),
+(0,2,1,2),
+(0,3,1,2),
+(0,4,1,2),
+(0,5,1,2),
+(0,6,1,2),
+(10,10,2,2),
+(20,20,2,2),
+(30,30,2,2),
+(40,40,2,2),
+(50,50,2,2),
+(60,60,2,2),
+(70,70,2,2);
+</pre></li>
+<li>Sample without replacement: <pre class="syntax">
+DROP TABLE IF EXISTS out;
+SELECT madlib.train_test_split(
+                                'test',    -- Source table
+                                'out',     -- Output table
+                                0.5,       -- Sample proportion
+                                0.5,       -- Sample proportion
+                                'gr1,gr2', -- Strata definition
+                                'id1,id2', -- Columns to output
+                                FALSE,     -- Sample without replacement
+                                FALSE);    -- Do not separate output tables
+SELECT * FROM out ORDER BY split,gr1,gr2,id1,id2;
+</pre> <pre class="result">
+ gr1 | gr2 | id1 | id2 | split
+-----+-----+-----+-----+-------
+   1 |   1 |   1 |   0 |     0
+   1 |   1 |   4 |   0 |     0
+   1 |   1 |   6 |   0 |     0
+   1 |   1 |   9 |   0 |     0
+   1 |   1 |   9 |   0 |     0
+   1 |   1 |   9 |   0 |     0
+   1 |   2 |   0 |   3 |     0
+   1 |   2 |   0 |   4 |     0
+   1 |   2 |   0 |   5 |     0
+   2 |   2 |  10 |  10 |     0
+   2 |   2 |  30 |  30 |     0
+   2 |   2 |  40 |  40 |     0
+   2 |   2 |  60 |  60 |     0
+   1 |   1 |   2 |   0 |     1
+   1 |   1 |   3 |   0 |     1
+   1 |   1 |   5 |   0 |     1
+   1 |   1 |   7 |   0 |     1
+   1 |   1 |   8 |   0 |     1
+   1 |   1 |   9 |   0 |     1
+   1 |   2 |   0 |   1 |     1
+   1 |   2 |   0 |   2 |     1
+   1 |   2 |   0 |   6 |     1
+   2 |   2 |  20 |  20 |     1
+   2 |   2 |  50 |  50 |     1
+   2 |   2 |  70 |  70 |     1
+(25 rows)
+</pre></li>
+<li>Sample with replacement and create separate train and test tables: <pre class="syntax">
+DROP TABLE IF EXISTS out_train, out_test;
+SELECT madlib.train_test_split(
+                                'test',    -- Source table
+                                'out',     -- Output table
+                                0.5,       -- train_proportion
+                                NULL,      -- Default = 1 - train_proportion = 0.5
+                                'gr1,gr2', -- Strata definition
+                                'id1,id2', -- Columns to output
+                                TRUE,      -- Sample with replacement
+                                TRUE);     -- Separate output tables
+SELECT * FROM out_train ORDER BY gr1,gr2,id1,id2;
+</pre> <pre class="result">
+ gr1 | gr2 | id1 | id2
+-----+-----+-----+-----
+   1 |   1 |   1 |   0
+   1 |   1 |   2 |   0
+   1 |   1 |   4 |   0
+   1 |   1 |   7 |   0
+   1 |   1 |   8 |   0
+   1 |   1 |   9 |   0
+   1 |   2 |   0 |   4
+   1 |   2 |   0 |   5
+   1 |   2 |   0 |   6
+   2 |   2 |  40 |  40
+   2 |   2 |  50 |  50
+   2 |   2 |  50 |  50
+(12 rows)
+</pre> <pre class="syntax">
+SELECT * FROM out_test ORDER BY gr1,gr2,id1,id2;
+</pre> <pre class="result">
+ gr1 | gr2 | id1 | id2
+--&mdash;+--&mdash;+--&mdash;+--&mdash;
+   1 |   1 |   1 |   0
+   1 |   1 |   1 |   0
+   1 |   1 |   3 |   0
+   1 |   1 |   4 |   0
+   1 |   1 |   5 |   0
+   1 |   1 |   9 |   0
+   1 |   2 |   0 |   1
+   1 |   2 |   0 |   5
+   1 |   2 |   0 |   6
+   2 |   2 |  20 |  20
+   2 |   2 |  20 |  20
+   2 |   2 |  20 |  20
+   2 |   2 |  70 |  70
+(13 rows)
+</pre> </li>
+</ol>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__tree.html b/docs/rc/group__grp__tree.html
new file mode 100644
index 0000000..92d916b
--- /dev/null
+++ b/docs/rc/group__grp__tree.html
@@ -0,0 +1,142 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Tree Methods</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__tree.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#groups">Modules</a>  </div>
+  <div class="headertitle">
+<div class="title">Tree Methods<div class="ingroups"><a class="el" href="group__grp__super.html">Supervised Learning</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>A collection of recursive partitioning (tree) methods. </p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group__grp__decision__tree"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__decision__tree.html">Decision Tree</a></td></tr>
+<tr class="memdesc:group__grp__decision__tree"><td class="mdescLeft">&#160;</td><td class="mdescRight">Decision trees are tree-based supervised learning methods that can be used for classification and regression. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__random__forest"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__random__forest.html">Random Forest</a></td></tr>
+<tr class="memdesc:group__grp__random__forest"><td class="mdescLeft">&#160;</td><td class="mdescRight">Random forest is an ensemble learning method for classification and regression that construct a multitude of decision trees at training time, then produces the class that is the mean (regression) or mode (classification) of the prediction produced by the individual trees. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:59 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__tree.js b/docs/rc/group__grp__tree.js
new file mode 100644
index 0000000..7e73e8c
--- /dev/null
+++ b/docs/rc/group__grp__tree.js
@@ -0,0 +1,5 @@
+var group__grp__tree =
+[
+    [ "Decision Tree", "group__grp__decision__tree.html", null ],
+    [ "Random Forest", "group__grp__random__forest.html", null ]
+];
\ No newline at end of file
diff --git a/docs/rc/group__grp__tsa.html b/docs/rc/group__grp__tsa.html
new file mode 100644
index 0000000..3e8244e
--- /dev/null
+++ b/docs/rc/group__grp__tsa.html
@@ -0,0 +1,139 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Time Series Analysis</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__tsa.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#groups">Modules</a>  </div>
+  <div class="headertitle">
+<div class="title">Time Series Analysis</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>A collection of methods to analyze time series data. </p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group__grp__arima"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__arima.html">ARIMA</a></td></tr>
+<tr class="memdesc:group__grp__arima"><td class="mdescLeft">&#160;</td><td class="mdescRight">Generates a model with autoregressive, moving average, and integrated components for a time series dataset. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:59 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__tsa.js b/docs/rc/group__grp__tsa.js
new file mode 100644
index 0000000..4895672
--- /dev/null
+++ b/docs/rc/group__grp__tsa.js
@@ -0,0 +1,4 @@
+var group__grp__tsa =
+[
+    [ "ARIMA", "group__grp__arima.html", null ]
+];
\ No newline at end of file
diff --git a/docs/rc/group__grp__unsupervised.html b/docs/rc/group__grp__unsupervised.html
new file mode 100644
index 0000000..2c0e08e
--- /dev/null
+++ b/docs/rc/group__grp__unsupervised.html
@@ -0,0 +1,148 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Unsupervised Learning</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__unsupervised.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#groups">Modules</a>  </div>
+  <div class="headertitle">
+<div class="title">Unsupervised Learning</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>A collection of methods for unsupervised learning tasks. </p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group__grp__association__rules"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__association__rules.html">Association Rules</a></td></tr>
+<tr class="memdesc:group__grp__association__rules"><td class="mdescLeft">&#160;</td><td class="mdescRight">Methods used to discover patterns in transactional datasets. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__clustering"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__clustering.html">Clustering</a></td></tr>
+<tr class="memdesc:group__grp__clustering"><td class="mdescLeft">&#160;</td><td class="mdescRight">Methods for clustering data. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__pca"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__pca.html">Dimensionality Reduction</a></td></tr>
+<tr class="memdesc:group__grp__pca"><td class="mdescLeft">&#160;</td><td class="mdescRight">Methods for reducing the number of variables in a dataset to obtain a set of principle variables. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:group__grp__topic__modelling"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__grp__topic__modelling.html">Topic Modelling</a></td></tr>
+<tr class="memdesc:group__grp__topic__modelling"><td class="mdescLeft">&#160;</td><td class="mdescRight">A collection of methods to uncover abstract topics in a document corpus. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:59 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__unsupervised.js b/docs/rc/group__grp__unsupervised.js
new file mode 100644
index 0000000..26d2229
--- /dev/null
+++ b/docs/rc/group__grp__unsupervised.js
@@ -0,0 +1,7 @@
+var group__grp__unsupervised =
+[
+    [ "Association Rules", "group__grp__association__rules.html", "group__grp__association__rules" ],
+    [ "Clustering", "group__grp__clustering.html", "group__grp__clustering" ],
+    [ "Dimensionality Reduction", "group__grp__pca.html", "group__grp__pca" ],
+    [ "Topic Modelling", "group__grp__topic__modelling.html", "group__grp__topic__modelling" ]
+];
\ No newline at end of file
diff --git a/docs/rc/group__grp__utilities.html b/docs/rc/group__grp__utilities.html
new file mode 100644
index 0000000..c10e1b9
--- /dev/null
+++ b/docs/rc/group__grp__utilities.html
@@ -0,0 +1,177 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Database Functions</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__utilities.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Database Functions<div class="ingroups"><a class="el" href="group__grp__other__functions.html">Utilities</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li>
+<a href="#utilities">Utility Functions</a> </li>
+<li>
+<a href="#rel;ated">Related Topics</a> </li>
+</ul>
+</div><p>Database functions are a collection of lower level utilities to assist data scientists and others in using MADlib.</p>
+<p><a class="anchor" id="utilities"></a></p><dl class="section user"><dt>Utility Functions</dt><dd></dd></dl>
+<table class="output">
+<tr>
+<th><a class="el" href="utilities_8sql__in.html#a9ce7ffa76acc8a0638e9bc48be99f36a" title="Return MADlib build information. ">version()</a> </th><td><p class="starttd">Return MADlib build information.  </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th><a class="el" href="utilities_8sql__in.html#a76cfdbed8a6782f37f50710d855434bd" title="Raise an exception if the given condition is not satisfied. ">assert()</a> </th><td><p class="starttd">Raise an exception if the given condition is not satisfied. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th><a class="el" href="utilities_8sql__in.html#aa90ffaebb43a5cbcb5c48281cbadd3b0" title="Check if a SQL statement raises an error. ">check_if_raises_error()</a> </th><td><p class="starttd">Check if a SQL statement raises an error. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th><a class="el" href="utilities_8sql__in.html#ac1f509bd94c6309b59eb4d479fb2a470" title="Check if a column exists in a table. ">check_if_col_exists()</a> </th><td><p class="starttd">Check if a column exists in a table. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th><a class="el" href="utilities_8sql__in.html#a48bed63cab78a5446fa4c122eaae3a40" title="Check if a floating-point number is NaN (not a number) ">isnan()</a> </th><td><p class="starttd">Check if a floating-point number is NaN (not a number) </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th><a class="el" href="utilities_8sql__in.html#a56501b6f9fabe65d7a6a6beb70a0e000" title="Create the temporary schema if it does not exist yet. ">create_schema_pg_temp()</a> </th><td><p class="starttd">Create the temporary schema if it does not exist yet. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th><a class="el" href="utilities_8sql__in.html#ab194d6a1222672c314ea39b78aad8fd0" title="Create volatile noop function. ">noop()</a> </th><td><p class="starttd">Create volatile noop function. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th><a class="el" href="utilities_8sql__in.html#aab5ea2cd6201e38e24ca62b0fb91fb7a" title="Drop all tables matching pattern &#39;madlib_temp&#39; in a given schema. ">cleanup_madlib_temp_tables()</a> </th><td><p class="starttd">Drop all tables matching pattern 'madlib_temp' in a given schema. </p>
+<p class="endtd"></p>
+</td></tr>
+<tr>
+<th><a class="el" href="utilities_8sql__in.html#a244f77f87f2612800b1683033a21dcca" title="Creates a new table with a subset of columns dropped from another source table. ">dropcols()</a> </th><td><p class="starttd">Create a new table with a subset of the columns dropped from a source table.  </p>
+<p class="endtd"></p>
+</td></tr>
+</table>
+<p>Note: If the function <a class="el" href="utilities_8sql__in.html#aab5ea2cd6201e38e24ca62b0fb91fb7a" title="Drop all tables matching pattern &#39;madlib_temp&#39; in a given schema. ">cleanup_madlib_temp_tables()</a> gives an Out-of-memory error, then the number of tables to be dropped is too high to execute in one transaction. In such a case, please follow the instructions provided with the error to execute the command in multiple transactions.</p>
+<p><a class="anchor" id="related"></a></p><dl class="section user"><dt>Related Topics</dt><dd></dd></dl>
+<p>File <a class="el" href="utilities_8sql__in.html" title="SQL functions for carrying out routine tasks. ">utilities.sql_in</a> documenting the SQL functions. </p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:59 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__validation.html b/docs/rc/group__grp__validation.html
new file mode 100644
index 0000000..fb5c0ca
--- /dev/null
+++ b/docs/rc/group__grp__validation.html
@@ -0,0 +1,414 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Cross Validation</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__validation.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Cross Validation<div class="ingroups"><a class="el" href="group__grp__mdl.html">Model Selection</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li>
+<a href="#cvfunction">Cross-Validation Function</a> </li>
+<li>
+<a href="#examples">Examples</a> </li>
+<li>
+<a href="#notes">Notes</a> </li>
+<li>
+<a href="#background">Technical Background</a> </li>
+<li>
+<a href="#related">Related Topics</a> </li>
+</ul>
+</div><p>Estimates the fit of a predictive model given a data set and specifications for the training, prediction, and error estimation functions.</p>
+<p>Cross validation, sometimes called rotation estimation, is a technique for assessing how the results of a statistical analysis will generalize to an independent data set. It is mainly used in settings where the goal is prediction, and you want to estimate how accurately a predictive model will perform in practice.</p>
+<p>The cross-validation function provided by this module is very flexible and can work with algorithms you want to cross validate, including algorithms you write yourself. Among the inputs to the cross-validation function are specifications of the modelling, prediction, and error metric functions. These three-part specifications include the name of the function, an array of arguments to pass to the function, and an array of the data types of the arguments. This makes it possible to use functions from other MADlib modules or user-defined functions that you supply.</p>
+<ul>
+<li>The modelling (training) function takes in a given data set with independent and dependent variables and produces a model, which is stored in an output table.</li>
+<li>The prediction function takes in the model generated by the modelling function and a different data set with independent variables, and produces a prediction of the dependent variables based on the model, which is stored in an output table. The prediction function should take a unique ID column name in the data table as one of the inputs, so that the prediction result can be compared with the validation values. Note: Prediction function in some MADlib modules do not save results into an output table. These prediction functions are not suitable for this cross-validation module.</li>
+<li>The error metric function compares the prediction results with the known values of the dependent variables in the data set that was fed into the prediction function. It computes the error metric using the specified error metric function, and stores the results in a table.</li>
+</ul>
+<p>Other inputs include the output table name, k value for the k-fold cross validation, and how many folds to try. For example, you can choose to run a simple validation instead of a full cross validation.</p>
+<p><a class="anchor" id="cvfunction"></a></p><dl class="section user"><dt>Cross-Validation Function</dt><dd></dd></dl>
+<pre class="syntax">
+cross_validation_general( modelling_func,
+                          modelling_params,
+                          modelling_params_type,
+                          param_explored,
+                          explore_values,
+                          predict_func,
+                          predict_params,
+                          predict_params_type,
+                          metric_func,
+                          metric_params,
+                          metric_params_type,
+                          data_tbl,
+                          data_id,
+                          id_is_random,
+                          validation_result,
+                          data_cols,
+                          fold_num
+                        )</pre><p> <b>Arguments</b> </p><dl class="arglist">
+<dt>modelling_func </dt>
+<dd><p class="startdd">VARCHAR. The name of the function that trains the model.</p>
+<p class="enddd"></p>
+</dd>
+<dt>modelling_params </dt>
+<dd><p class="startdd">VARCHAR[]. An array of parameters to supply to the modelling function.</p>
+<p class="enddd"></p>
+</dd>
+<dt>modelling_params_type </dt>
+<dd><p class="startdd">VARCHAR[]. An array of data type names for each of the parameters supplied to the modelling function.</p>
+<p class="enddd"></p>
+</dd>
+<dt>param_explored </dt>
+<dd><p class="startdd">VARCHAR. The name of the parameter that will be checked to find the optimum value. The name must appear in the <em>modelling_params</em> array.</p>
+<p class="enddd"></p>
+</dd>
+<dt>explore_values </dt>
+<dd><p class="startdd">VARCHAR. The name of the parameter whose values are to be studied.</p>
+<p class="enddd"></p>
+</dd>
+<dt>predict_func </dt>
+<dd><p class="startdd">VARCHAR. The name of the prediction function.</p>
+<p class="enddd"></p>
+</dd>
+<dt>predict_params </dt>
+<dd><p class="startdd">VARCHAR[]. An array of parameters to supply to the prediction function.</p>
+<p class="enddd"></p>
+</dd>
+<dt>predict_params_type </dt>
+<dd><p class="startdd">VARCHAR[]. An array of data type names for each of the parameters supplied to the prediction function.</p>
+<p class="enddd"></p>
+</dd>
+<dt>metric_func </dt>
+<dd><p class="startdd">VARCHAR. The name of the function for measuring errors.</p>
+<p class="enddd"></p>
+</dd>
+<dt>metric_params </dt>
+<dd><p class="startdd">VARCHAR[]. An array of parameters to supply to the error metric function.</p>
+<p class="enddd"></p>
+</dd>
+<dt>metric_params_type </dt>
+<dd><p class="startdd">VARCHAR[]. An array of data type names for each of the parameters supplied to the metric function.</p>
+<p class="enddd"></p>
+</dd>
+<dt>data_tbl </dt>
+<dd><p class="startdd">VARCHAR. The name of the data table that will be split into training and validation parts.</p>
+<p class="enddd"></p>
+</dd>
+<dt>data_id </dt>
+<dd><p class="startdd">VARCHAR. The name of the column containing a unique ID associated with each row, or NULL if the table has no such column.</p>
+<p>Ideally, the data set has a unique ID for each row so that it is easier to partition the data set into the training part and the validation part. Set the <em>id_is_random</em> argument to inform the cross-validation function whether the ID value is randomly assigned to each row. If it is not randomly assigned, the cross-validation function generates a random ID for each row. </p>
+<p class="enddd"></p>
+</dd>
+<dt>id_is_random </dt>
+<dd><p class="startdd">BOOLEAN. TRUE if the provided ID is randomly assigned to each row.</p>
+<p class="enddd"></p>
+</dd>
+<dt>validation_result </dt>
+<dd><p class="startdd">VARCHAR. The name of the table to store the output of the cross-validation function. The output table has the following columns: </p><table class="output">
+<tr>
+<th>param_explored </th><td>The name of the parameter checked to find the optimum value. This is the same name specified in the <em>param_explored</em> argument of the <em><a class="el" href="cross__validation_8sql__in.html#a2a7791b05f51e8748ab7b6ccf328a7e2">cross_validation_general()</a></em> function.  </td></tr>
+<tr>
+<th>average error </th><td>The average of the errors computed by the error metric function.  </td></tr>
+<tr>
+<th>standard deviation of error </th><td>The standard deviation of the errors.  </td></tr>
+</table>
+<p class="enddd"></p>
+</dd>
+<dt>data_cols </dt>
+<dd><p class="startdd">A comma-separated list of names of data columns to use in the calculation. When its value is NULL, the function will automatically figure out all the column names of the data table. This is only used if the <em>data_id</em> argument is NULL, otherwise it is ignored.</p>
+<p>If the data set has no unique ID for each row, the cross-validation function copies the data set to a temporary table with a randomly assigned ID column. Setting this argument to the list of independent and dependent variables that are to be used in the calculation minimizes the copying workload by only copying the required data.</p>
+<p class="enddd">The new temporary table is dropped after the computation has finished.  </p>
+</dd>
+<dt><em>fold_num</em> </dt>
+<dd>INTEGER, default: 10. Value of k. How many folds validation? Each validation uses 1/fold_num fraction of the data for validation. </dd>
+</dl>
+<p>The parameter arrays for the modelling, prediction and metric functions can include the following special keywords:</p>
+<ul>
+<li><em>%data%</em> &ndash; The argument position for training/validation data</li>
+<li><em>%model%</em> &ndash; The argument position for the output/input of modelling/prediction function</li>
+<li><em>%id%</em> &ndash; The argument position of the unique ID column (user-provided or generated by the cross-validation function, as described above)</li>
+<li><em>%prediction%</em> &ndash; The argument position for the output/input of prediction/metric function</li>
+<li><em>%error%</em> &ndash; The argument position for the output of the metric function</li>
+</ul>
+<p><b>Note</b>: If the argument <em>explore_values</em> is NULL or has zero length, then the cross-validation function will only run a data folding.</p>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<ol type="1">
+<li>Load some sample data: <pre class="example">
+DROP TABLE IF EXISTS houses;
+CREATE TABLE houses ( id INT,
+                      tax INT,
+                      bedroom INT,
+                      bath FLOAT,
+                      size INT,
+                      lot INT,
+                      zipcode INT,
+                      price INT,
+                      high_priced BOOLEAN
+                      );
+INSERT INTO houses (id, tax, bedroom, bath, price, size, lot, zipcode, high_priced) VALUES
+(1  ,  590 ,       2 ,    1 ,  50000 ,  770 , 22100  , 94301, 'f'::boolean),
+(2  , 1050 ,       3 ,    2 ,  85000 , 1410 , 12000  , 94301, 'f'::boolean),
+(3  ,   20 ,       3 ,    1 ,  22500 , 1060 ,  3500  , 94301, 'f'::boolean),
+(4  ,  870 ,       2 ,    2 ,  90000 , 1300 , 17500  , 94301, 'f'::boolean),
+(5  , 1320 ,       3 ,    2 , 133000 , 1500 , 30000  , 94301, 't'::boolean),
+(6  , 1350 ,       2 ,    1 ,  90500 ,  820 , 25700  , 94301, 'f'::boolean),
+(7  , 2790 ,       3 ,  2.5 , 260000 , 2130 , 25000  , 94301, 't'::boolean),
+(8  ,  680 ,       2 ,    1 , 142500 , 1170 , 22000  , 94301, 't'::boolean),
+(9  , 1840 ,       3 ,    2 , 160000 , 1500 , 19000  , 94301, 't'::boolean),
+(10 , 3680 ,       4 ,    2 , 240000 , 2790 , 20000  , 94301, 't'::boolean),
+(11 , 1660 ,       3 ,    1 ,  87000 , 1030 , 17500  , 94301, 'f'::boolean),
+(12 , 1620 ,       3 ,    2 , 118600 , 1250 , 20000  , 94301, 't'::boolean),
+(13 , 3100 ,       3 ,    2 , 140000 , 1760 , 38000  , 94301, 't'::boolean),
+(14 , 2070 ,       2 ,    3 , 148000 , 1550 , 14000  , 94301, 't'::boolean),
+(15 ,  650 ,       3 ,  1.5 ,  65000 , 1450 , 12000  , 94301, 'f'::boolean),
+(16 ,  770 ,       2 ,    2 ,  91000 , 1300 , 17500  , 76010, 'f'::boolean),
+(17 , 1220 ,       3 ,    2 , 132300 , 1500 , 30000  , 76010, 't'::boolean),
+(18 , 1150 ,       2 ,    1 ,  91100 ,  820 , 25700  , 76010, 'f'::boolean),
+(19 , 2690 ,       3 ,  2.5 , 260011 , 2130 , 25000  , 76010, 't'::boolean),
+(20 ,  780 ,       2 ,    1 , 141800 , 1170 , 22000  , 76010, 't'::boolean),
+(21 , 1910 ,       3 ,    2 , 160900 , 1500 , 19000  , 76010, 't'::boolean),
+(22 , 3600 ,       4 ,    2 , 239000 , 2790 , 20000  , 76010, 't'::boolean),
+(23 , 1600 ,       3 ,    1 ,  81010 , 1030 , 17500  , 76010, 'f'::boolean),
+(24 , 1590 ,       3 ,    2 , 117910 , 1250 , 20000  , 76010, 'f'::boolean),
+(25 , 3200 ,       3 ,    2 , 141100 , 1760 , 38000  , 76010, 't'::boolean),
+(26 , 2270 ,       2 ,    3 , 148011 , 1550 , 14000  , 76010, 't'::boolean),
+(27 ,  750 ,       3 ,  1.5 ,  66000 , 1450 , 12000  , 76010, 'f'::boolean),
+(28 , 2690 ,       3 ,  2.5 , 260011 , 2130 , 25000  , 76010, 't'::boolean),
+(29 ,  780 ,       2 ,    1 , 141800 , 1170 , 22000  , 76010, 't'::boolean),
+(30 , 1910 ,       3 ,    2 , 160900 , 1500 , 19000  , 76010, 't'::boolean),
+(31 , 3600 ,       4 ,    2 , 239000 , 2790 , 20000  , 76010, 't'::boolean),
+(32 , 1600 ,       3 ,    1 ,  81010 , 1030 , 17500  , 76010, 'f'::boolean),
+(33 , 1590 ,       3 ,    2 , 117910 , 1250 , 20000  , 76010, 'f'::boolean),
+(34 , 3200 ,       3 ,    2 , 141100 , 1760 , 38000  , 76010, 't'::boolean),
+(35 , 2270 ,       2 ,    3 , 148011 , 1550 , 14000  , 76010, 't'::boolean),
+(36 ,  750 ,       3 ,  1.5 ,  66000 , 1450 , 12000  , 76010, 'f'::boolean);
+</pre></li>
+<li>Use the general function to explore lambda values for elastic net. (Note that elastic net also has a built in cross validation function for selecting elastic net control parameter alpha and regularization value lambda.) <pre class="example">
+DROP TABLE IF EXISTS houses_cv_results;
+SELECT madlib.cross_validation_general(
+    -- modelling_func
+      'madlib.elastic_net_train',
+    -- modelling_params
+        '{%data%, %model%, price, "array[tax, bath, size]", gaussian, 0.5, lambda, TRUE, NULL, fista,
+          "{eta = 2, max_stepsize = 2, use_active_set = t}",
+          NULL, 10000, 1e-6}'::varchar[],
+    -- modelling_params_type
+        '{varchar, varchar, varchar, varchar, varchar, double precision,
+          double precision, boolean, varchar, varchar, varchar, varchar,
+          integer, double precision}'::varchar[],
+    -- param_explored
+      'lambda',
+    -- explore_values
+      '{0.1, 0.2}'::varchar[],
+    -- predict_func
+      'madlib.elastic_net_predict',
+    -- predict_params
+        '{%model%, %data%, %id%, %prediction%}'::varchar[],
+    -- predict_params_type
+        '{text, text, text, text}'::varchar[],
+    -- metric_func
+      'madlib.mse_error',
+    -- metric_params
+        '{%prediction%, %data%, %id%, price, %error%}'::varchar[],
+    -- metric_params_type
+        '{varchar, varchar, varchar, varchar, varchar}'::varchar[],
+    -- data_tbl
+      'houses',
+    -- data_id
+      'id',
+    -- id_is_random
+      FALSE,
+    -- validation_result
+      'houses_cv_results',
+    -- data_cols
+      NULL,
+    -- fold_num
+      3
+);
+SELECT * FROM houses_cv_results;
+</pre> Results from the lambda values explored: <pre class="result">
+ lambda | mean_squared_error_avg | mean_squared_error_stddev
+--------+------------------------+---------------------------
+    0.1 |        1194685622.1604 |          366687470.779826
+    0.2 |       1181768409.98238 |          352203200.758414
+(2 rows)
+</pre></li>
+<li>Here we use the general function to explore maximum number of iterations for logistic regression: <pre class="example">
+DROP TABLE IF EXISTS houses_logregr_cv;
+SELECT madlib.cross_validation_general(
+    -- modelling_func
+        'madlib.logregr_train',
+    -- modelling_params
+        '{%data%, %model%, high_priced, "ARRAY[1, bedroom, bath, size]", NULL, max_iter}'::varchar[],
+    -- modelling_params_type
+        '{varchar, varchar, varchar, varchar, varchar, integer}'::varchar[],
+    -- param_explored
+        'max_iter',
+    -- explore_values
+        '{2, 10, 40, 100}'::varchar[],
+    -- predict_func
+        'madlib.cv_logregr_predict',
+    -- predict_params
+        '{%model%, %data%, "ARRAY[1, bedroom, bath, size]", id, %prediction%}'::varchar[],
+    -- predict_params_type
+        '{varchar, varchar,varchar,varchar,varchar}'::varchar[],
+    -- metric_func
+        'madlib.misclassification_avg',
+    -- metric_params
+        '{%prediction%, %data%,  id, high_priced, %error%}'::varchar[],
+    -- metric_params_type
+        '{varchar, varchar, varchar, varchar, varchar}'::varchar[],
+    -- data_tbl
+        'houses',
+    -- data_id
+        'id',
+    -- id_is_random
+        FALSE,
+    -- validation_result
+        'houses_logregr_cv',
+    -- data_cols
+        NULL,
+    -- fold_num
+       5
+);
+SELECT * FROM houses_logregr_cv;
+</pre> Results from the explored number of iterations: <pre class="result">
+ max_iter |     error_rate_avg     |             error_rate_stddev
+----------+------------------------+--------------------------------------------
+        2 | 0.28214285714285714286 | 0.2053183193114972855562362870460638951565
+       10 | 0.25357142857142857143 | 0.1239753925550698688724699258837060065614
+       40 | 0.25357142857142857143 | 0.1239753925550698688724699258837060065614
+      100 | 0.25357142857142857143 | 0.1239753925550698688724699258837060065614
+(4 rows)
+</pre></li>
+</ol>
+<p><a class="anchor" id="notes"></a></p><dl class="section user"><dt>Notes</dt><dd></dd></dl>
+<p>The lock management parameter <em>max_locks_per_transaction</em>, which usually is set to the default value of 64, limits the number of tables that can be dropped inside a single transaction (the cross-validation function). Thus, the number of different values of <em>param_explored</em> (or the length of the <em>explored_values</em> array) cannot be too large. For 10-fold cross validation, the limit of <code>length(<em>explored_values</em>)</code> is around 40. If the limit is exceeded, you may get an "out of shared memory" error because <em>max_locks_per_transaction</em> is exceeded.</p>
+<p>One way to overcome this limitation is to run the cross-validation function multiple times, with each run covering a different region of values of the parameter.</p>
+<p>Note that MADlib implements cross-validation functions within certain individual modules, where it is possible to optimize the calculation to avoid dropping tables and prevent exceeding the <em>max_locks_per_transaction</em> limitation. Since module-specific cross-validation functions depend upon the implementation details of the modules to perform the optimization, they will not be as flexible as the generalized cross-validation function provided here.</p>
+<p><a class="anchor" id="background"></a></p><dl class="section user"><dt>Technical Background</dt><dd></dd></dl>
+<p>One round of cross validation involves partitioning a sample of data into complementary subsets, performing the analysis on one subset (called the training set), and validating the analysis on the other subset (called the validation set or test set). To reduce variability, multiple rounds of cross validation are performed using different partitions, and the validation results are averaged over the rounds.</p>
+<p>In k-fold cross validation, the original sample is randomly partitioned into k equal sized subsamples. Of the k subsamples, a single subsample is retained as the validation data for testing the model, and the remaining k&minus;1 subsamples are used as training data. The cross-validation process is repeated k times (the folds), with each of the k subsamples used exactly once as the validation data. The k results from the folds can be averaged (or otherwise combined) to produce a single estimation. The advantage of this method over repeated random sub-sampling is that all observations are used for both training and validation, and each observation is used for validation exactly once. 10-fold cross validation is commonly used, but in general k remains an unfixed parameter.</p>
+<p><a class="anchor" id="related"></a></p><dl class="section user"><dt>Related Topics</dt><dd></dd></dl>
+<p>File <a class="el" href="cross__validation_8sql__in.html" title="SQL functions for cross validation. ">cross_validation.sql_in</a> documenting the SQL functions. </p>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__vec2cols.html b/docs/rc/group__grp__vec2cols.html
new file mode 100644
index 0000000..ecab2a2
--- /dev/null
+++ b/docs/rc/group__grp__vec2cols.html
@@ -0,0 +1,332 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Vector to Columns</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__vec2cols.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Vector to Columns<div class="ingroups"><a class="el" href="group__grp__other__functions.html">Utilities</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li class="level1">
+<a href="#vec2cols_syntax">Syntax</a> </li>
+<li class="level1">
+<a href="#vec2cols_usage">Usage</a> </li>
+<li class="level1">
+<a href="#vec2cols_example">Examples</a> </li>
+</ul>
+</div><dl class="section user"><dt>About</dt><dd>Converts a feature array in a single column into multiple columns. This process can be used to reverse the function cols2vec.</dd></dl>
+<p>Given a table with a column of type array, this function will create an output table that splits this array into multiple columns, one per array element. It includes the option to name the new feature columns, and to include columns from the original table in the output.</p>
+<p><a class="anchor" id="vec2cols_usage"></a></p><dl class="section user"><dt>Usage</dt><dd></dd></dl>
+<pre class="syntax">
+vec2cols(
+    source_table,
+    output_table,
+    vector_col,
+    feature_names,
+    cols_to_output
+)
+</pre><p><b>Arguments</b> </p><dl class="arglist">
+<dt>source_table </dt>
+<dd><p class="startdd">TEXT. Name of the table containing the source data..</p>
+<p class="enddd"></p>
+</dd>
+<dt>output_table </dt>
+<dd><p class="startdd">TEXT. Name of the generated table containing the output. If a table with the same name already exists, an error will be returned.</p>
+<p class="enddd"></p>
+</dd>
+<dt>vector_col </dt>
+<dd><p class="startdd">TEXT. Name of the column containing the feature array. Must be a one-dimensional array.</p>
+<p class="enddd"></p>
+</dd>
+<dt>feature_names (optional) </dt>
+<dd>TEXT[]. Array of names associated with the feature array. Note that this array exists in the summary table created by the function 'cols2vec'. If the 'feature_names' array is not specified, column names will be automatically generated of the form 'f1, f2, ...fn'. <dl class="section note"><dt>Note</dt><dd>If you specify the 'feature_names' parameter, you will get exactly that number of feature columns in the 'output_table'. It means feature arrays from the 'vector_col' may be padded or truncated, if a particular feature array size does not match the target number of feature columns. <br />
+<br />
+If you do not specify the 'feature names' parameter, the number of feature columns generated in the 'output_table' will be the maximum array size from 'vector_col'. Feature arrays that are less than this maximum will be padded.</dd></dl>
+</dd>
+<dt>cols_to_output (optional) </dt>
+<dd>TEXT, default NULL. Comma-separated string of column names from the source table to keep in the output table, in addition to the feature columns. To keep all columns from the source table, use '*'. The total number of columns in a table cannot exceed the PostgreSQL limits.  </dd>
+</dl>
+<p><b>Output table</b> <br />
+ The output table produced by the vec2cols function contains the following columns: </p><table class="output">
+<tr>
+<th>&lt;...&gt; </th><td>Columns from source table, depending on which ones are kept (if any).   </td></tr>
+<tr>
+<th>feature columns </th><td>Columns for each of the features in 'vector_col'. Column type will depend on the feature array type in the source table. Column naming will depend on whether the parameter 'feature_names' is used.  </td></tr>
+</table>
+<p><a class="anchor" id="vec2cols_example"></a></p><dl class="section user"><dt>Examples</dt><dd><ol type="1">
+<li>Load sample data: <pre class="example">
+DROP TABLE IF EXISTS golf CASCADE;
+CREATE TABLE golf (
+    id integer NOT NULL,
+    "OUTLOOK" text,
+    temperature double precision,
+    humidity double precision,
+    "Temp_Humidity" double precision[],
+    clouds_airquality text[],
+    windy boolean,
+    class text,
+    observation_weight double precision
+);
+INSERT INTO golf VALUES
+(1,'sunny', 85, 85, ARRAY[85, 85],ARRAY['none', 'unhealthy'], 'false','Don''t Play', 5.0),
+(2, 'sunny', 80, 90, ARRAY[80, 90], ARRAY['none', 'moderate'], 'true', 'Don''t Play', 5.0),
+(3, 'overcast', 83, 78, ARRAY[83, 78], ARRAY['low', 'moderate'], 'false', 'Play', 1.5),
+(4, 'rain', 70, 96, ARRAY[70, 96], ARRAY['low', 'moderate'], 'false', 'Play', 1.0),
+(5, 'rain', 68, 80, ARRAY[68, 80], ARRAY['medium', 'good'], 'false', 'Play', 1.0),
+(6, 'rain', 65, 70, ARRAY[65, 70], ARRAY['low', 'unhealthy'], 'true', 'Don''t Play', 1.0),
+(7, 'overcast', 64, 65, ARRAY[64, 65], ARRAY['medium', 'moderate'], 'true', 'Play', 1.5),
+(8, 'sunny', 72, 95, ARRAY[72, 95], ARRAY['high', 'unhealthy'], 'false', 'Don''t Play', 5.0),
+(9, 'sunny', 69, 70, ARRAY[69, 70], ARRAY['high', 'good'], 'false', 'Play', 5.0),
+(10, 'rain', 75, 80, ARRAY[75, 80], ARRAY['medium', 'good'], 'false', 'Play', 1.0),
+(11, 'sunny', 75, 70, ARRAY[75, 70], ARRAY['none', 'good'], 'true', 'Play', 5.0),
+(12, 'overcast', 72, 90, ARRAY[72, 90], ARRAY['medium', 'moderate'], 'true', 'Play', 1.5),
+(13, 'overcast', 81, 75, ARRAY[81, 75], ARRAY['medium', 'moderate'], 'false', 'Play', 1.5),
+(14, 'rain', 71, 80, ARRAY[71, 80], ARRAY['low', 'unhealthy'], 'true', 'Don''t Play', 1.0);
+</pre></li>
+<li>Split the column "clouds_airquality" into new columns called "clouds" and "air_quality". Also keep columns id and "OUTLOOK" from the source table <pre class="example">
+DROP TABLE IF EXISTS vec2cols_result;
+SELECT madlib.vec2cols(
+    'golf',                           -- source table
+    'vec2cols_result',                -- output table
+    'clouds_airquality',              -- column with array entries to split
+    ARRAY['clouds', 'air_quality'],   -- feature names
+    'id, "OUTLOOK"'                   -- columns to keep from source table
+);
+SELECT * FROM vec2cols_result ORDER BY id;
+</pre> <pre class="result">
+ id | OUTLOOK  | clouds | air_quality
+----+----------+--------+-------------
+  1 | sunny    | none   | unhealthy
+  2 | sunny    | none   | moderate
+  3 | overcast | low    | moderate
+  4 | rain     | low    | moderate
+  5 | rain     | medium | good
+  6 | rain     | low    | unhealthy
+  7 | overcast | medium | moderate
+  8 | sunny    | high   | unhealthy
+  9 | sunny    | high   | good
+ 10 | rain     | medium | good
+ 11 | sunny    | none   | good
+ 12 | overcast | medium | moderate
+ 13 | overcast | medium | moderate
+ 14 | rain     | low    | unhealthy
+(14 rows)
+</pre></li>
+<li>Similar to the previous example, except now we keep all columns from source table and do not specify the feature names, so that default names are created. <pre class="example">
+DROP TABLE IF EXISTS vec2cols_result;
+SELECT madlib.vec2cols(
+    'golf',                       -- source table
+    'vec2cols_result',            -- output table
+    'clouds_airquality',          -- column with array entries to split
+    NULL,                         -- feature names
+    '*'                           -- columns to keep from source table
+);
+SELECT * FROM vec2cols_result ORDER BY id;
+</pre> <pre class="result">
+ id | OUTLOOK  | temperature | humidity | Temp_Humidity | clouds_airquality | windy |   class    | observation_weight |   f1   |    f2
+----+----------+-------------+----------+---------------+-------------------+-------+------------+--------------------+--------+-----------
+  1 | sunny    |          85 |       85 | {85,85}       | {none,unhealthy}  | f     | Don't Play |                  5 | none   | unhealthy
+  2 | sunny    |          80 |       90 | {80,90}       | {none,moderate}   | t     | Don't Play |                  5 | none   | moderate
+  3 | overcast |          83 |       78 | {83,78}       | {low,moderate}    | f     | Play       |                1.5 | low    | moderate
+  4 | rain     |          70 |       96 | {70,96}       | {low,moderate}    | f     | Play       |                  1 | low    | moderate
+  5 | rain     |          68 |       80 | {68,80}       | {medium,good}     | f     | Play       |                  1 | medium | good
+  6 | rain     |          65 |       70 | {65,70}       | {low,unhealthy}   | t     | Don't Play |                  1 | low    | unhealthy
+  7 | overcast |          64 |       65 | {64,65}       | {medium,moderate} | t     | Play       |                1.5 | medium | moderate
+  8 | sunny    |          72 |       95 | {72,95}       | {high,unhealthy}  | f     | Don't Play |                  5 | high   | unhealthy
+  9 | sunny    |          69 |       70 | {69,70}       | {high,good}       | f     | Play       |                  5 | high   | good
+ 10 | rain     |          75 |       80 | {75,80}       | {medium,good}     | f     | Play       |                  1 | medium | good
+ 11 | sunny    |          75 |       70 | {75,70}       | {none,good}       | t     | Play       |                  5 | none   | good
+ 12 | overcast |          72 |       90 | {72,90}       | {medium,moderate} | t     | Play       |                1.5 | medium | moderate
+ 13 | overcast |          81 |       75 | {81,75}       | {medium,moderate} | f     | Play       |                1.5 | medium | moderate
+ 14 | rain     |          71 |       80 | {71,80}       | {low,unhealthy}   | t     | Don't Play |                  1 | low    | unhealthy
+(14 rows)
+</pre></li>
+<li>Now let's run cols2vec then reverse it using vec2cols. In this case we will get feature names from the cols2vec summary table. First run cols2vec: <pre class="example">
+DROP TABLE IF EXISTS cols2vec_result, cols2vec_result_summary;
+SELECT madlib.cols2vec(
+    'golf',
+    'cols2vec_result',
+    'temperature, humidity',
+    NULL,
+    'id, temperature, humidity'
+);
+SELECT * FROM cols2vec_result ORDER BY id;
+</pre> <pre class="result">
+ id | temperature | humidity | feature_vector
+----+-------------+----------+----------------
+  1 |          85 |       85 | {85,85}
+  2 |          80 |       90 | {80,90}
+  3 |          83 |       78 | {83,78}
+  4 |          70 |       96 | {70,96}
+  5 |          68 |       80 | {68,80}
+  6 |          65 |       70 | {65,70}
+  7 |          64 |       65 | {64,65}
+  8 |          72 |       95 | {72,95}
+  9 |          69 |       70 | {69,70}
+ 10 |          75 |       80 | {75,80}
+ 11 |          75 |       70 | {75,70}
+ 12 |          72 |       90 | {72,90}
+ 13 |          81 |       75 | {81,75}
+ 14 |          71 |       80 | {71,80}
+(14 rows)
+</pre> View the summary table with the feature_names dictionary: <pre class="example">
+\x on
+SELECT * FROM cols2vec_result_summary;
+\x off
+</pre> <pre class="result">
+-[ RECORD 1 ]---------------+-----------------------
+source_table                | golf
+list_of_features            | temperature, humidity
+list_of_features_to_exclude | None
+feature_names               | {temperature,humidity}
+</pre> Now use feature_names from the summary table above to name the columns of the split array: <pre class="example">
+DROP TABLE IF EXISTS vec2cols_result;
+SELECT madlib.vec2cols(
+    'cols2vec_result',          -- source table containing the feature vector
+    'vec2cols_result',          -- output table
+    'feature_vector',           -- column with array entries to split
+    (SELECT feature_names from cols2vec_result_summary),    -- feature_names from summary table of cols2vec
+    'id'                        -- columns to keep from source table
+);
+SELECT * FROM vec2cols_result ORDER BY id;
+</pre> <pre class="result">
+ id | temperature | humidity
+----+-------------+----------
+  1 |          85 |       85
+  2 |          80 |       90
+  3 |          83 |       78
+  4 |          70 |       96
+  5 |          68 |       80
+  6 |          65 |       70
+  7 |          64 |       65
+  8 |          72 |       95
+  9 |          69 |       70
+ 10 |          75 |       80
+ 11 |          75 |       70
+ 12 |          72 |       90
+ 13 |          81 |       75
+ 14 |          71 |       80
+(14 rows)
+</pre> This is the same as the format of the original 'golf' dataset that we started with. </li>
+</ol>
+</dd></dl>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:59 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/group__grp__wcc.html b/docs/rc/group__grp__wcc.html
new file mode 100644
index 0000000..0597a25
--- /dev/null
+++ b/docs/rc/group__grp__wcc.html
@@ -0,0 +1,469 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Weakly Connected Components</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group__grp__wcc.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Weakly Connected Components<div class="ingroups"><a class="el" href="group__grp__graph.html">Graph</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><b>Contents</b> <ul>
+<li>
+<a href="#wcc">Weakly Connected Components</a> </li>
+<li>
+<a href="#rlcc">Retrieve Largest Connected Component</a> </li>
+<li>
+<a href="#hist">Build Histogram</a> </li>
+<li>
+<a href="#samecpt">Check Vertices in Same Connected Component</a> </li>
+<li>
+<a href="#reach">Retrieve Reachable Vertices</a> </li>
+<li>
+<a href="#count">Count Connected Components</a> </li>
+<li>
+<a href="#examples">Examples</a> </li>
+</ul>
+</div><p>Given a directed graph, a weakly connected component (WCC) is a subgraph of the original graph where all vertices are connected to each other by some path, ignoring the direction of edges. In case of an undirected graph, a weakly connected component is also a strongly connected component. This module also includes a number of helper functions that operate on the WCC output.</p>
+<p><a class="anchor" id="wcc"></a></p><dl class="section user"><dt>Weakly Connected Components</dt><dd><pre class="syntax">
+weakly_connected_components( vertex_table,
+            vertex_id,
+            edge_table,
+            edge_args,
+            out_table,
+            grouping_cols
+          )
+</pre></dd></dl>
+<p><b>Arguments</b> </p><dl class="arglist">
+<dt>vertex_table </dt>
+<dd><p class="startdd">TEXT. Name of the table containing the vertex data for the graph. Must contain the column specified in the 'vertex_id' parameter below.</p>
+<p class="enddd"></p>
+</dd>
+<dt>vertex_id </dt>
+<dd><p class="startdd">TEXT, default = 'id'. Name of the column in 'vertex_table' containing vertex ids. The vertex ids are of type INTEGER with no duplicates. They do not need to be contiguous.</p>
+<p class="enddd"></p>
+</dd>
+<dt>edge_table </dt>
+<dd><p class="startdd">TEXT. Name of the table containing the edge data. The edge table must contain columns for source vertex and destination vertex.</p>
+<p class="enddd"></p>
+</dd>
+<dt>edge_args </dt>
+<dd><p class="startdd">TEXT. A comma-delimited string containing multiple named arguments of the form "name=value". The following parameters are supported for this string argument:</p><ul>
+<li>src (INTEGER): Name of the column containing the source vertex ids in the edge table. Default column name is 'src'.</li>
+<li>dest (INTEGER): Name of the column containing the destination vertex ids in the edge table. Default column name is 'dest'.</li>
+</ul>
+<p class="enddd"></p>
+</dd>
+<dt>out_table </dt>
+<dd><p class="startdd">TEXT. Name of the table to store the component ID associated with each vertex. It will contain a row for every vertex from 'vertex_table' with the following columns:</p><ul>
+<li>vertex_id : The id of a vertex. Will use the input parameter 'vertex_id' for column naming.</li>
+<li>component_id : Component that the vertex belongs to. We use the convention where 'component_id' is the id of the first vertex in a particular group. It means that component ids are generally not contiguous.</li>
+<li>grouping_cols : Grouping column (if any) values associated with the vertex_id.</li>
+</ul>
+<p>A summary table named &lt;out_table&gt;_summary is also created. This is an internal table that keeps a record of some of the input parameters and is used by the weakly connected component helper functions. </p>
+<p class="enddd"></p>
+</dd>
+<dt>grouping_cols (optional) </dt>
+<dd>TEXT, default: NULL. A single column or a list of comma-separated columns that divides the input data into discrete groups, which are treated independently as separate graphs. When this value is NULL, no grouping is used and weakly connected components are generated for all data (single graph). <dl class="section note"><dt>Note</dt><dd>Expressions are not currently supported for 'grouping_cols'.</dd></dl>
+</dd>
+</dl>
+<dl class="section note"><dt>Note</dt><dd>On a Greenplum cluster, the edge table should be distributed by the source vertex id column for better performance. In addition, the user should note that this function creates a duplicate of the edge table (on Greenplum cluster) for better performance.</dd></dl>
+<p><a class="anchor" id="rlcc"></a></p><dl class="section user"><dt>Retrieve Largest Connected Component</dt><dd></dd></dl>
+<p>The largest connected component retrieval function finds the largest weakly connected component(s) in a graph. If weakly connected components was run with grouping, the largest connected components are computed for each group.</p>
+<pre class="syntax">
+graph_wcc_largest_cpt( wcc_table,
+                      largest_cpt_table
+                     )
+</pre><p><b>Arguments</b> </p><dl class="arglist">
+<dt>wcc_table </dt>
+<dd><p class="startdd">TEXT. Name of the table that contains the output of weakly connected components.</p>
+<p class="enddd"></p>
+</dd>
+<dt>largest_cpt_table </dt>
+<dd>TEXT. Name of the output table that contains the largest component's information. It contains one or more rows for every group and has the following columns:<ul>
+<li>grouping_cols: The grouping columns given in the creation of wcc_table. If there are no grouping columns, this column is not created.</li>
+<li>component_id: The ID of the largest component. Recall that we use the convention where 'component_id' is the id of the first vertex in a particular group. It means that component ids are generally not contiguous. If there are multiple components of the same size, a row is created for each component. If grouping_cols is specified, the largest component is computed for each group.</li>
+<li>num_vertices: Number of vertices in the largest component.  </li>
+</ul>
+</dd>
+</dl>
+<p><a class="anchor" id="hist"></a></p><dl class="section user"><dt>Retrieve Histogram of Vertices Per Connected Component</dt><dd></dd></dl>
+<p>This function creates a histogram of the number of vertices per connected component.</p>
+<pre class="syntax">
+graph_wcc_histogram( wcc_table,
+                    histogram_table
+                   )
+</pre><p><b>Arguments</b> </p><dl class="arglist">
+<dt>wcc_table </dt>
+<dd><p class="startdd">TEXT. Name of the table that contains the output of weakly connected components.</p>
+<p class="enddd"></p>
+</dd>
+<dt>histogram_table </dt>
+<dd><p class="startdd">TEXT. Name of the output table that contains the number of vertices per component. A row is created for every comoponent in every group if grouping_cols was specified when running weakly connected components. The output table has the following columns:</p><ul>
+<li>grouping_cols: The grouping columns given during the creation of the wcc_table. If there are no grouping columns, this column is not created.</li>
+<li>component_id: The ID of the component.</li>
+<li>num_vertices: Number of vertices in the component specified by the component_id column.</li>
+</ul>
+<p class="enddd"></p>
+</dd>
+</dl>
+<p><a class="anchor" id="samecpt"></a></p><dl class="section user"><dt>Check if Two Vertices Belong to the Same Component</dt><dd></dd></dl>
+<p>This function determines if two vertices belong to the same component.</p>
+<pre class="syntax">
+graph_wcc_vertex_check( wcc_table,
+                       vertex_pair,
+                       pair_table
+                      )
+</pre><p><b>Arguments</b> </p><dl class="arglist">
+<dt>wcc_table </dt>
+<dd><p class="startdd">TEXT. Name of the table that contains the output of weakly connected components.</p>
+<p class="enddd"></p>
+</dd>
+<dt>vertex_pair </dt>
+<dd><p class="startdd">TEXT. A pair of vertex IDs separated by a comma.</p>
+<p class="enddd"></p>
+</dd>
+<dt>pair_table </dt>
+<dd><p class="startdd">TEXT. Name of the output table that specifies if the two vertices in vertex_pair belong to the same component. If wcc_table was generated using grouping_cols, all the components in all groups are considered. The output table has the following columns:</p><ul>
+<li>component_id: Component ID that contains both the vertices in vertex_pair.</li>
+<li>grouping_cols: The grouping columns given in the creation of wcc_table. If there are no grouping columns, this column is not created.</li>
+</ul>
+<p class="enddd"></p>
+</dd>
+</dl>
+<p><a class="anchor" id="reach"></a></p><dl class="section user"><dt>Retrieve All Vertices Reachable from a Vertex</dt><dd></dd></dl>
+<p>This function finds all the vertices that can be reached from a given vertex via weakly connected paths.</p>
+<pre class="syntax">
+graph_wcc_reachable_vertices( wcc_table,
+                             src,
+                             reachable_vertices_table
+                            )
+</pre><p><b>Arguments</b> </p><dl class="arglist">
+<dt>wcc_table </dt>
+<dd><p class="startdd">TEXT. Name of the table that contains the output of weakly connected components.</p>
+<p class="enddd"></p>
+</dd>
+<dt>src </dt>
+<dd><p class="startdd">TEXT. The vertex ID from which all reachable vertices have to be found.</p>
+<p class="enddd"></p>
+</dd>
+<dt>reachable_vertices_table </dt>
+<dd><p class="startdd">TEXT. Name of the output table that contains the list of vertices that are reachable from the src vertex. The output table has the following columns:</p><ul>
+<li>grouping_cols : The grouping columns given in the creation of wcc_table. If there are no grouping columns, this column is not created.</li>
+<li>component_id : The ID of the component that both the src and dest vertices belong to.</li>
+<li>dest : Vertex ID that is reachable from the src vertex. Reachability is computed with regard to a component.</li>
+</ul>
+<p class="enddd"></p>
+</dd>
+</dl>
+<p><a class="anchor" id="count"></a></p><dl class="section user"><dt>Count of Connected Components</dt><dd></dd></dl>
+<p>This function finds the total number of components in the input graph.</p>
+<pre class="syntax">
+graph_wcc_num_cpts( wcc_table,
+                   count_table
+                  )
+</pre><p><b>Arguments</b> </p><dl class="arglist">
+<dt>wcc_table </dt>
+<dd><p class="startdd">TEXT. Name of the table that contains the output of weakly connected components.</p>
+<p class="enddd"></p>
+</dd>
+<dt>count_table </dt>
+<dd><p class="startdd">TEXT. Name of the output table that contains the total number of components per group in the graph, if there are any grouping_cols in wcc_table. The output table has the following columns:</p><ul>
+<li>grouping_cols : The grouping columns given in the creation of wcc_table. If there are no grouping columns, this column is not created, and count is with regard to the entire graph.</li>
+<li>num_components : Count of weakly connected components in a graph, or the number of components within a group if grouping_cols is defined. </li>
+</ul>
+<p class="enddd"></p>
+</dd>
+</dl>
+<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl>
+<ol type="1">
+<li>Create vertex and edge tables to represent the graph: <pre class="syntax">
+DROP TABLE IF EXISTS vertex, edge;
+CREATE TABLE vertex(
+    id INTEGER
+);
+CREATE TABLE edge(
+    src INTEGER,
+    dest INTEGER,
+    user_id INTEGER
+);
+INSERT INTO vertex VALUES
+(0),
+(1),
+(2),
+(3),
+(4),
+(5),
+(6),
+(10),
+(11),
+(12),
+(13),
+(14),
+(15),
+(16);
+INSERT INTO edge VALUES
+(0, 1, 1),
+(0, 2, 1),
+(1, 2, 1),
+(1, 3, 1),
+(2, 3, 1),
+(2, 5, 1),
+(2, 6, 1),
+(3, 0, 1),
+(5, 6, 1),
+(6, 3, 1),
+(10, 11, 2),
+(10, 12, 2),
+(11, 12, 2),
+(11, 13, 2),
+(12, 13, 2),
+(13, 10, 2),
+(15, 16, 2),
+(15, 14, 2);
+</pre></li>
+<li>Find all the weakly connected components in the graph: <pre class="syntax">
+DROP TABLE IF EXISTS wcc_out, wcc_out_summary;
+SELECT madlib.weakly_connected_components(
+                         'vertex',             -- Vertex table
+                         'id',                 -- Vertix id column
+                         'edge',               -- Edge table
+                         'src=src, dest=dest', -- Comma delimted string of edge arguments
+                         'wcc_out');      -- Output table of weakly connected components
+SELECT * FROM wcc_out ORDER BY component_id, id;
+</pre> <pre class="result">
+ id | component_id
+----+--------------
+  0 |            0
+  1 |            0
+  2 |            0
+  3 |            0
+  5 |            0
+  6 |            0
+  4 |            4
+ 10 |           10
+ 11 |           10
+ 12 |           10
+ 13 |           10
+ 14 |           14
+ 15 |           14
+ 16 |           14
+(14 rows)
+</pre></li>
+<li>Now get the weakly connected components associated with each 'user_id' using the grouping feature: <pre class="syntax">
+DROP TABLE IF EXISTS wcc_out, wcc_out_summary;
+SELECT madlib.weakly_connected_components(
+                         'vertex',             -- Vertex table
+                         'id',                 -- Vertix id column
+                         'edge',               -- Edge table
+                         'src=src, dest=dest', -- Comma delimted string of edge arguments
+                         'wcc_out',       -- Output table of weakly connected components
+                         'user_id');           -- Grouping column name
+SELECT * FROM wcc_out ORDER BY user_id, component_id, id;
+</pre> <pre class="result">
+ id | component_id | user_id
+----+--------------+---------
+  0 |            0 |       1
+  1 |            0 |       1
+  2 |            0 |       1
+  3 |            0 |       1
+  5 |            0 |       1
+  6 |            0 |       1
+ 10 |           10 |       2
+ 11 |           10 |       2
+ 12 |           10 |       2
+ 13 |           10 |       2
+ 14 |           14 |       2
+ 15 |           14 |       2
+ 16 |           14 |       2
+(13 rows)
+</pre> Note that vertex 4 is not identified as a separate component above. This is because there is no entry in the edge table for vertex 4 indicating which group it belongs to (though you could do that if you wanted to).</li>
+<li>Retrieve the largest connected component: <pre class="syntax">
+DROP TABLE IF EXISTS largest_cpt_table;
+SELECT madlib.graph_wcc_largest_cpt(
+                         'wcc_out',             -- WCC output table
+                         'largest_cpt_table');  -- output table containing largest component ID
+SELECT * FROM largest_cpt_table ORDER BY component_id;
+</pre> <pre class="result">
+ user_id | component_id | num_vertices
+---------+--------------+--------------
+       1 |            0 |            6
+       2 |           10 |            4
+(2 rows)
+</pre></li>
+<li>Retrieve histogram of the number of vertices per connected component: <pre class="syntax">
+DROP TABLE IF EXISTS histogram_table;
+SELECT madlib.graph_wcc_histogram(
+                         'wcc_out',           -- WCC output table
+                         'histogram_table');  -- output table containing the histogram of vertices
+SELECT * FROM histogram_table ORDER BY component_id;
+</pre> <pre class="result">
+ user_id | component_id | num_vertices
+---------+--------------+--------------
+       1 |            0 |            6
+       2 |           10 |            4
+       2 |           14 |            3
+(3 rows)
+</pre></li>
+<li>Check if two vertices belong to the same component: <pre class="syntax">
+DROP TABLE IF EXISTS vc_table;
+SELECT madlib.graph_wcc_vertex_check(
+                         'wcc_out',    -- WCC output table
+                         '14,15',      -- Pair of vertex IDs
+                         'vc_table');  -- output table containing components that contain the two vertices
+SELECT * FROM vc_table ORDER BY component_id;
+</pre> <pre class="result">
+ user_id | component_id
+---------+--------------
+       2 |           14
+(1 row)
+</pre></li>
+<li>Retrieve all vertices reachable from a vertex <pre class="syntax">
+DROP TABLE IF EXISTS reach_table;
+SELECT madlib.graph_wcc_reachable_vertices(
+                         'wcc_out',         -- WCC output table
+                         '0',               -- source vertex
+                         'reach_table');    -- output table containing all vertices reachable from source vertex
+SELECT * FROM reach_table ORDER BY component_id, dest;
+</pre> <pre class="result">
+ user_id | component_id | dest
+---------+--------------+------
+       1 |            0 |    1
+       1 |            0 |    2
+       1 |            0 |    3
+       1 |            0 |    5
+       1 |            0 |    6
+(5 rows)
+</pre></li>
+<li>Count of connected components: <pre class="syntax">
+DROP TABLE IF EXISTS count_table;
+SELECT madlib.graph_wcc_num_cpts(
+                         'wcc_out',       -- WCC output table
+                         'count_table');  -- output table containing number of components per group
+SELECT * FROM count_table;
+</pre> <pre class="result">
+ user_id | num_components
+------&mdash;+-------------&mdash;
+       1 |              1
+       2 |              2
+(2 rows)
+</pre> </li>
+</ol>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/hits_8sql__in.html b/docs/rc/hits_8sql__in.html
new file mode 100644
index 0000000..36101ca
--- /dev/null
+++ b/docs/rc/hits_8sql__in.html
@@ -0,0 +1,403 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: hits.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('hits_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">hits.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a8b627c2d93594ba5c4963a91bd89c702"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hits_8sql__in.html#a8b627c2d93594ba5c4963a91bd89c702">hits</a> (text vertex_table, text vertex_id, text edge_table, text edge_args, text out_table, integer max_iter, float8 threshold, varchar grouping_cols)</td></tr>
+<tr class="separator:a8b627c2d93594ba5c4963a91bd89c702"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae4965e9ad3dde6bf32393371f98ede7b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hits_8sql__in.html#ae4965e9ad3dde6bf32393371f98ede7b">hits</a> (text vertex_table, text vertex_id, text edge_table, text edge_args, text out_table, integer max_iter, float8 threshold)</td></tr>
+<tr class="separator:ae4965e9ad3dde6bf32393371f98ede7b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acef1d74fb74333a9868bb8edee001d75"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hits_8sql__in.html#acef1d74fb74333a9868bb8edee001d75">hits</a> (text vertex_table, text vertex_id, text edge_table, text edge_args, text out_table, integer max_iter)</td></tr>
+<tr class="separator:acef1d74fb74333a9868bb8edee001d75"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a67b3744cbd2995e6c5021420a0299562"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hits_8sql__in.html#a67b3744cbd2995e6c5021420a0299562">hits</a> (text vertex_table, text vertex_id, text edge_table, text edge_args, text out_table)</td></tr>
+<tr class="separator:a67b3744cbd2995e6c5021420a0299562"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7068f61698c2e76763cd06758ac0fbac"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hits_8sql__in.html#a7068f61698c2e76763cd06758ac0fbac">hits</a> (varchar message)</td></tr>
+<tr class="separator:a7068f61698c2e76763cd06758ac0fbac"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6c13c19b2e0db69af3d14e381b948e65"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hits_8sql__in.html#a6c13c19b2e0db69af3d14e381b948e65">hits</a> ()</td></tr>
+<tr class="separator:a6c13c19b2e0db69af3d14e381b948e65"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a8b627c2d93594ba5c4963a91bd89c702"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8b627c2d93594ba5c4963a91bd89c702">&#9670;&nbsp;</a></span>hits() <span class="overload">[1/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void hits </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>vertex_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>vertex_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>edge_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>edge_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_iter</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>threshold</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae4965e9ad3dde6bf32393371f98ede7b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae4965e9ad3dde6bf32393371f98ede7b">&#9670;&nbsp;</a></span>hits() <span class="overload">[2/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void hits </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>vertex_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>vertex_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>edge_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>edge_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_iter</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>threshold</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="acef1d74fb74333a9868bb8edee001d75"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acef1d74fb74333a9868bb8edee001d75">&#9670;&nbsp;</a></span>hits() <span class="overload">[3/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void hits </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>vertex_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>vertex_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>edge_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>edge_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_iter</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a67b3744cbd2995e6c5021420a0299562"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a67b3744cbd2995e6c5021420a0299562">&#9670;&nbsp;</a></span>hits() <span class="overload">[4/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void hits </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>vertex_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>vertex_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>edge_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>edge_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7068f61698c2e76763cd06758ac0fbac"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7068f61698c2e76763cd06758ac0fbac">&#9670;&nbsp;</a></span>hits() <span class="overload">[5/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar hits </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a6c13c19b2e0db69af3d14e381b948e65"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6c13c19b2e0db69af3d14e381b948e65">&#9670;&nbsp;</a></span>hits() <span class="overload">[6/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar hits </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_1c3de670490e30b2adf792227ef51e32.html">graph</a></li><li class="navelem"><a class="el" href="hits_8sql__in.html">hits.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:57 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/hypothesis__tests_8sql__in.html b/docs/rc/hypothesis__tests_8sql__in.html
new file mode 100644
index 0000000..aa50bbc
--- /dev/null
+++ b/docs/rc/hypothesis__tests_8sql__in.html
@@ -0,0 +1,1255 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: hypothesis_tests.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('hypothesis__tests_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">hypothesis_tests.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>SQL functions for statistical hypothesis tests.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a3bd1bcc335a2da73d01b40e06f7d2eea"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hypothesis__tests_8sql__in.html#a3bd1bcc335a2da73d01b40e06f7d2eea">t_test_one_transition</a> (float8[] state, float8 value)</td></tr>
+<tr class="separator:a3bd1bcc335a2da73d01b40e06f7d2eea"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac97c5f5015790b59645d69858e127645"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hypothesis__tests_8sql__in.html#ac97c5f5015790b59645d69858e127645">t_test_merge_states</a> (float8[] state1, float8[] state2)</td></tr>
+<tr class="separator:ac97c5f5015790b59645d69858e127645"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad570d893565618bcbbcbb01b3bb0a9b9"><td class="memItemLeft" align="right" valign="top">t_test_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hypothesis__tests_8sql__in.html#ad570d893565618bcbbcbb01b3bb0a9b9">t_test_one_final</a> (float8[] state)</td></tr>
+<tr class="separator:ad570d893565618bcbbcbb01b3bb0a9b9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abc6006e8da028dd93ac48b8fd9ae8786"><td class="memItemLeft" align="right" valign="top">f_test_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hypothesis__tests_8sql__in.html#abc6006e8da028dd93ac48b8fd9ae8786">f_test_final</a> (float8[] state)</td></tr>
+<tr class="separator:abc6006e8da028dd93ac48b8fd9ae8786"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a14fdcfa276fd1a7ea2e3adb41ebe7db4"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hypothesis__tests_8sql__in.html#a14fdcfa276fd1a7ea2e3adb41ebe7db4">t_test_one</a> (float8 value)</td></tr>
+<tr class="memdesc:a14fdcfa276fd1a7ea2e3adb41ebe7db4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Perform one-sample or dependent paired Student t-test.  <a href="#a14fdcfa276fd1a7ea2e3adb41ebe7db4">More...</a><br /></td></tr>
+<tr class="separator:a14fdcfa276fd1a7ea2e3adb41ebe7db4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1a835d80d1846a10a2c25b91ce81c6d2"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hypothesis__tests_8sql__in.html#a1a835d80d1846a10a2c25b91ce81c6d2">t_test_two_transition</a> (float8[] state, boolean first, float8 value)</td></tr>
+<tr class="separator:a1a835d80d1846a10a2c25b91ce81c6d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0a0a8a579bbf0f0d1efcbf62223e3431"><td class="memItemLeft" align="right" valign="top">t_test_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hypothesis__tests_8sql__in.html#a0a0a8a579bbf0f0d1efcbf62223e3431">t_test_two_pooled_final</a> (float8[] state)</td></tr>
+<tr class="separator:a0a0a8a579bbf0f0d1efcbf62223e3431"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5c306ba8380ce6567831fef4610e515b"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hypothesis__tests_8sql__in.html#a5c306ba8380ce6567831fef4610e515b">t_test_two_pooled</a> (boolean first, float8 value)</td></tr>
+<tr class="memdesc:a5c306ba8380ce6567831fef4610e515b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Perform two-sample pooled (i.e., equal variances) Student t-test.  <a href="#a5c306ba8380ce6567831fef4610e515b">More...</a><br /></td></tr>
+<tr class="separator:a5c306ba8380ce6567831fef4610e515b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8fe7f38d29bf835718adca811e36f15a"><td class="memItemLeft" align="right" valign="top">t_test_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hypothesis__tests_8sql__in.html#a8fe7f38d29bf835718adca811e36f15a">t_test_two_unpooled_final</a> (float8[] state)</td></tr>
+<tr class="separator:a8fe7f38d29bf835718adca811e36f15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac50750a0e0797ce24af1dc479b9699e1"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hypothesis__tests_8sql__in.html#ac50750a0e0797ce24af1dc479b9699e1">t_test_two_unpooled</a> (boolean first, float8 value)</td></tr>
+<tr class="memdesc:ac50750a0e0797ce24af1dc479b9699e1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Perform unpooled (i.e., unequal variances) t-test (also known as Welch's t-test)  <a href="#ac50750a0e0797ce24af1dc479b9699e1">More...</a><br /></td></tr>
+<tr class="separator:ac50750a0e0797ce24af1dc479b9699e1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5a946aa469ff6ddf8d276db16fa26ad4"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hypothesis__tests_8sql__in.html#a5a946aa469ff6ddf8d276db16fa26ad4">f_test</a> (boolean first, float8 value)</td></tr>
+<tr class="memdesc:a5a946aa469ff6ddf8d276db16fa26ad4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Perform Fisher F-test.  <a href="#a5a946aa469ff6ddf8d276db16fa26ad4">More...</a><br /></td></tr>
+<tr class="separator:a5a946aa469ff6ddf8d276db16fa26ad4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7c580537666776f1bd4b9d4a0a6b6438"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hypothesis__tests_8sql__in.html#a7c580537666776f1bd4b9d4a0a6b6438">chi2_gof_test_transition</a> (float8[] state, bigint observed, float8 expected, bigint df)</td></tr>
+<tr class="separator:a7c580537666776f1bd4b9d4a0a6b6438"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab4b83895c48dd1c1ca2e106b15741868"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hypothesis__tests_8sql__in.html#ab4b83895c48dd1c1ca2e106b15741868">chi2_gof_test_transition</a> (float8[] state, bigint observed, float8 expected)</td></tr>
+<tr class="separator:ab4b83895c48dd1c1ca2e106b15741868"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a66d03891a6add6d67f944df5344ed40e"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hypothesis__tests_8sql__in.html#a66d03891a6add6d67f944df5344ed40e">chi2_gof_test_transition</a> (float8[] state, bigint observed)</td></tr>
+<tr class="separator:a66d03891a6add6d67f944df5344ed40e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2b8265718a16ec65e89d2ab512f6a3e1"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hypothesis__tests_8sql__in.html#a2b8265718a16ec65e89d2ab512f6a3e1">chi2_gof_test_merge_states</a> (float8[] state1, float8[] state2)</td></tr>
+<tr class="separator:a2b8265718a16ec65e89d2ab512f6a3e1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a61c31dfde998db18afd6552239b872c4"><td class="memItemLeft" align="right" valign="top">chi2_test_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hypothesis__tests_8sql__in.html#a61c31dfde998db18afd6552239b872c4">chi2_gof_test_final</a> (float8[] state)</td></tr>
+<tr class="separator:a61c31dfde998db18afd6552239b872c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4c912b329fb103a44253932a653d4e40"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hypothesis__tests_8sql__in.html#a4c912b329fb103a44253932a653d4e40">chi2_gof_test</a> (bigint observed, float8 expected=1, bigint df=0)</td></tr>
+<tr class="memdesc:a4c912b329fb103a44253932a653d4e40"><td class="mdescLeft">&#160;</td><td class="mdescRight">Perform Pearson's chi-squared goodness-of-fit test.  <a href="#a4c912b329fb103a44253932a653d4e40">More...</a><br /></td></tr>
+<tr class="separator:a4c912b329fb103a44253932a653d4e40"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a09a8ed9d073f8c43d9ade3cf2defb2b0"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hypothesis__tests_8sql__in.html#a09a8ed9d073f8c43d9ade3cf2defb2b0">chi2_gof_test</a> (bigint observed, float8 expected)</td></tr>
+<tr class="separator:a09a8ed9d073f8c43d9ade3cf2defb2b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a13730efbff97aa5624a350135a9b83ff"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hypothesis__tests_8sql__in.html#a13730efbff97aa5624a350135a9b83ff">chi2_gof_test</a> (bigint observed)</td></tr>
+<tr class="separator:a13730efbff97aa5624a350135a9b83ff"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a58ffb5b2b8392e005f4f3e21560df93f"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hypothesis__tests_8sql__in.html#a58ffb5b2b8392e005f4f3e21560df93f">ks_test_transition</a> (float8[] state, boolean first, float8 value, bigint numFirst, bigint numSecond)</td></tr>
+<tr class="separator:a58ffb5b2b8392e005f4f3e21560df93f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abd3f6d1d6dc4203cab3bcc980ec8ed8d"><td class="memItemLeft" align="right" valign="top">ks_test_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hypothesis__tests_8sql__in.html#abd3f6d1d6dc4203cab3bcc980ec8ed8d">ks_test_final</a> (float8[] state)</td></tr>
+<tr class="separator:abd3f6d1d6dc4203cab3bcc980ec8ed8d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4e324c82b069ebf7b498012aa83931c5"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hypothesis__tests_8sql__in.html#a4e324c82b069ebf7b498012aa83931c5">mw_test_transition</a> (float8[] state, boolean first, float8 value)</td></tr>
+<tr class="memdesc:a4e324c82b069ebf7b498012aa83931c5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Perform Kolmogorov-Smirnov test.  <a href="#a4e324c82b069ebf7b498012aa83931c5">More...</a><br /></td></tr>
+<tr class="separator:a4e324c82b069ebf7b498012aa83931c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac18e666088117997da2d22236e982f5e"><td class="memItemLeft" align="right" valign="top">mw_test_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hypothesis__tests_8sql__in.html#ac18e666088117997da2d22236e982f5e">mw_test_final</a> (float8[] state)</td></tr>
+<tr class="separator:ac18e666088117997da2d22236e982f5e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0d85654832dfa961cd13526c052642f3"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hypothesis__tests_8sql__in.html#a0d85654832dfa961cd13526c052642f3">wsr_test_transition</a> (float8[] state, float8 value, float8 precision)</td></tr>
+<tr class="memdesc:a0d85654832dfa961cd13526c052642f3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Perform Mann-Whitney test.  <a href="#a0d85654832dfa961cd13526c052642f3">More...</a><br /></td></tr>
+<tr class="separator:a0d85654832dfa961cd13526c052642f3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4093de00ab033f4900ce186d481fa012"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hypothesis__tests_8sql__in.html#a4093de00ab033f4900ce186d481fa012">wsr_test_transition</a> (float8[] state, float8 value)</td></tr>
+<tr class="separator:a4093de00ab033f4900ce186d481fa012"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8f0431ace27ac78e9e1df9906f1f1c33"><td class="memItemLeft" align="right" valign="top">wsr_test_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hypothesis__tests_8sql__in.html#a8f0431ace27ac78e9e1df9906f1f1c33">wsr_test_final</a> (float8[] state)</td></tr>
+<tr class="separator:a8f0431ace27ac78e9e1df9906f1f1c33"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa694f4ce95280210a3887773bb3f417b"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hypothesis__tests_8sql__in.html#aa694f4ce95280210a3887773bb3f417b">one_way_anova_transition</a> (float8[] state, integer group, float8 value)</td></tr>
+<tr class="memdesc:aa694f4ce95280210a3887773bb3f417b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Perform Wilcoxon-Signed-Rank test.  <a href="#aa694f4ce95280210a3887773bb3f417b">More...</a><br /></td></tr>
+<tr class="separator:aa694f4ce95280210a3887773bb3f417b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad6c05d07183c961961f171b0a925ad93"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hypothesis__tests_8sql__in.html#ad6c05d07183c961961f171b0a925ad93">one_way_anova_merge_states</a> (float8[] state1, float8[] state2)</td></tr>
+<tr class="separator:ad6c05d07183c961961f171b0a925ad93"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5ac28bec7ff670a7da8b9eae4a8ed4cb"><td class="memItemLeft" align="right" valign="top">one_way_anova_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hypothesis__tests_8sql__in.html#a5ac28bec7ff670a7da8b9eae4a8ed4cb">one_way_anova_final</a> (float8[] state)</td></tr>
+<tr class="separator:a5ac28bec7ff670a7da8b9eae4a8ed4cb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abd5c80afd954294de268030ee73e88cc"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hypothesis__tests_8sql__in.html#abd5c80afd954294de268030ee73e88cc">one_way_anova</a> (integer group, float8 value)</td></tr>
+<tr class="memdesc:abd5c80afd954294de268030ee73e88cc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Perform one-way analysis of variance.  <a href="#abd5c80afd954294de268030ee73e88cc">More...</a><br /></td></tr>
+<tr class="separator:abd5c80afd954294de268030ee73e88cc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><dl class="section see"><dt>See also</dt><dd>For an overview of hypthesis-test functions, see the module description <a class="el" href="group__grp__stats__tests.html">Hypothesis Tests</a>. </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="a4c912b329fb103a44253932a653d4e40"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4c912b329fb103a44253932a653d4e40">&#9670;&nbsp;</a></span>chi2_gof_test() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] chi2_gof_test </td>
+          <td>(</td>
+          <td class="paramtype">bigint&#160;</td>
+          <td class="paramname"><em>observed</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>expected</em> = <code>1</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bigint&#160;</td>
+          <td class="paramname"><em>df</em> = <code>0</code>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Let \( n_1, \dots, n_k \) be a realization of a (vector) random variable \( N = (N_1, \dots, N_k) \) that follows the multinomial distribution with parameters \( k \) and \( p = (p_1, \dots, p_k) \). Test the null hypothesis \( H_0 : p = p^0 \).</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">observed</td><td>Number \( n_i \) of observations of the current event/row </td></tr>
+    <tr><td class="paramname">expected</td><td>Expected number of observations of current event/row. This number is not required to be normalized. That is, \( p^0_i \) will be taken as <code>expected</code> divided by <code>sum(expected)</code>. Hence, if this parameter is not specified, chi2_test() will by default use \( p^0 = (\frac 1k, \dots, \frac 1k) \), i.e., test that \( p \) is a discrete uniform distribution. </td></tr>
+    <tr><td class="paramname">df</td><td>Degrees of freedom. This is the number of events reduced by the degree of freedom lost by using the observed numbers for defining the expected number of observations. If this parameter is 0, the degree of freedom is taken as \( (k - 1) \).</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>A composite value as follows. Let \( n = \sum_{i=1}^n n_i \).<ul>
+<li><code>statistic FLOAT8</code> - Statistic <p class="formulaDsp">
+\[ \chi^2 = \sum_{i=1}^k \frac{(n_i - np_i)^2}{np_i} \]
+</p>
+ The corresponding random variable is approximately chi-squared distributed with <code>df</code> degrees of freedom.</li>
+<li><code>df BIGINT</code> - Degrees of freedom</li>
+<li><code>p_value FLOAT8</code> - Approximate p-value, i.e., \( \Pr[X^2 \geq \chi^2 \mid p = p^0] \). Computed as <code>(1.0 - <a class="el" href="prob_8sql__in.html#a230513b6b549d5b445cbacbdbab42c15">chi_squared_cdf</a>(statistic))</code>.</li>
+<li><code>phi FLOAT8</code> - Phi coefficient, i.e., \( \phi = \sqrt{\frac{\chi^2}{n}} \)</li>
+<li><code>contingency_coef FLOAT8</code> - Contingency coefficient, i.e., \( \sqrt{\frac{\chi^2}{n + \chi^2}} \)</li>
+</ul>
+</dd></dl>
+<dl class="section user"><dt>Usage</dt><dd><ul>
+<li>Test null hypothesis that all possible outcomes of a categorical variable are equally likely: <pre>SELECT (chi2_gof_test(<em>observed</em>, 1, NULL)).* FROM <em>source</em></pre></li>
+<li>Test null hypothesis that two categorical variables are independent. Such data is often shown in a <em>contingency table</em> (also known as <em>crosstab</em>). A crosstab is a matrix where possible values for the first variable correspond to rows and values for the second variable to columns. The matrix elements are the observation frequencies of the joint occurrence of the respective values. <a class="el" href="hypothesis__tests_8sql__in.html#a4c912b329fb103a44253932a653d4e40" title="Perform Pearson&#39;s chi-squared goodness-of-fit test. ">chi2_gof_test()</a> assumes that the crosstab is stored in normalized form, i.e., there are three columns <code><em>var1</em></code>, <code><em>var2</em></code>, <code><em>observed</em></code>. <pre>SELECT (chi2_gof_test(<em>observed</em>, expected, deg_freedom)).*
+FROM (
+    SELECT
+        <em>observed</em>,
+        sum(<em>observed</em>) OVER (PARTITION BY var1)::DOUBLE PRECISION
+            * sum(<em>observed</em>) OVER (PARTITION BY var2) AS expected
+    FROM <em>source</em>
+) p, (
+   SELECT
+        (count(DISTINCT <em>var1</em>) - 1) * (count(DISTINCT <em>var2</em>) - 1) AS deg_freedom
+    FROM <em>source</em>
+) q;</pre> </li>
+</ul>
+</dd></dl>
+
+</div>
+</div>
+<a id="a09a8ed9d073f8c43d9ade3cf2defb2b0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a09a8ed9d073f8c43d9ade3cf2defb2b0">&#9670;&nbsp;</a></span>chi2_gof_test() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] chi2_gof_test </td>
+          <td>(</td>
+          <td class="paramtype">bigint&#160;</td>
+          <td class="paramname"><em>observed</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>expected</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a13730efbff97aa5624a350135a9b83ff"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a13730efbff97aa5624a350135a9b83ff">&#9670;&nbsp;</a></span>chi2_gof_test() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] chi2_gof_test </td>
+          <td>(</td>
+          <td class="paramtype">bigint&#160;</td>
+          <td class="paramname"><em>observed</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a61c31dfde998db18afd6552239b872c4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a61c31dfde998db18afd6552239b872c4">&#9670;&nbsp;</a></span>chi2_gof_test_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">chi2_test_result chi2_gof_test_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a2b8265718a16ec65e89d2ab512f6a3e1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2b8265718a16ec65e89d2ab512f6a3e1">&#9670;&nbsp;</a></span>chi2_gof_test_merge_states()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] chi2_gof_test_merge_states </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7c580537666776f1bd4b9d4a0a6b6438"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7c580537666776f1bd4b9d4a0a6b6438">&#9670;&nbsp;</a></span>chi2_gof_test_transition() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] chi2_gof_test_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bigint&#160;</td>
+          <td class="paramname"><em>observed</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>expected</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bigint&#160;</td>
+          <td class="paramname"><em>df</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab4b83895c48dd1c1ca2e106b15741868"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab4b83895c48dd1c1ca2e106b15741868">&#9670;&nbsp;</a></span>chi2_gof_test_transition() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] chi2_gof_test_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bigint&#160;</td>
+          <td class="paramname"><em>observed</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>expected</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a66d03891a6add6d67f944df5344ed40e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a66d03891a6add6d67f944df5344ed40e">&#9670;&nbsp;</a></span>chi2_gof_test_transition() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] chi2_gof_test_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bigint&#160;</td>
+          <td class="paramname"><em>observed</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5a946aa469ff6ddf8d276db16fa26ad4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5a946aa469ff6ddf8d276db16fa26ad4">&#9670;&nbsp;</a></span>f_test()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] f_test </td>
+          <td>(</td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>first</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>value</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Given realizations \( x_1, \dots, x_m \) and \( y_1, \dots, y_n \) of i.i.d. random variables \( X_1, \dots, X_m \sim N(\mu_X, \sigma^2) \) and \( Y_1, \dots, Y_n \sim N(\mu_Y, \sigma^2) \) with unknown parameters \( \mu_X, \mu_Y, \) and \( \sigma^2 \), test the null hypotheses \( H_0 : \sigma_X &lt; \sigma_Y \) and \( H_0 : \sigma_X = \sigma_Y \).</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">first</td><td>Indicator whether <code>value</code> is from first sample \( x_1, \dots, x_m \) (if <code>TRUE</code>) or from second sample \( y_1, \dots, y_n \) (if <code>FALSE</code>) </td></tr>
+    <tr><td class="paramname">value</td><td>Value of random variate \( x_i \) or \( y_i \)</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>A composite value as follows. We denote by \( \bar x, \bar y \) the sample means and by \( s_X^2, s_Y^2 \) the sample variances.<ul>
+<li><code>statistic FLOAT8</code> - Statistic <p class="formulaDsp">
+\[ f = \frac{s_Y^2}{s_X^2} \]
+</p>
+ The corresponding random variable is F-distributed with \( (n - 1) \) degrees of freedom in the numerator and \( (m - 1) \) degrees of freedom in the denominator.</li>
+<li><code>df1 BIGINT</code> - Degrees of freedom in the numerator \( (n - 1) \)</li>
+<li><code>df2 BIGINT</code> - Degrees of freedom in the denominator \( (m - 1) \)</li>
+<li><code>p_value_one_sided FLOAT8</code> - Lower bound on one-sided p-value. In detail, the result is \( \Pr[F \geq f \mid \sigma_X = \sigma_Y] \), which is a lower bound on \( \Pr[F \geq f \mid \sigma_X \leq \sigma_Y] \). Computed as <code>(1.0 - <a class="el" href="prob_8sql__in.html#a6c5b3e35531e44098f9d0cbef14cb8a6">fisher_f_cdf</a>(statistic))</code>.</li>
+<li><code>p_value_two_sided FLOAT8</code> - Two-sided p-value, i.e., \( 2 \cdot \min \{ p, 1 - p \} \) where \( p = \Pr[ F \geq f \mid \sigma_X = \sigma_Y] \). Computed as <code>(min(p_value_one_sided, 1. - p_value_one_sided))</code>.</li>
+</ul>
+</dd></dl>
+<dl class="section user"><dt>Usage</dt><dd><ul>
+<li>Test null hypothesis that the variance of the first sample is at most (or equal to, respectively) the variance of the second sample: <pre>SELECT (f_test(<em>first</em>, <em>value</em>)).* FROM <em>source</em></pre> </li>
+</ul>
+</dd></dl>
+
+</div>
+</div>
+<a id="abc6006e8da028dd93ac48b8fd9ae8786"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abc6006e8da028dd93ac48b8fd9ae8786">&#9670;&nbsp;</a></span>f_test_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">f_test_result f_test_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="abd3f6d1d6dc4203cab3bcc980ec8ed8d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abd3f6d1d6dc4203cab3bcc980ec8ed8d">&#9670;&nbsp;</a></span>ks_test_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">ks_test_result ks_test_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a58ffb5b2b8392e005f4f3e21560df93f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a58ffb5b2b8392e005f4f3e21560df93f">&#9670;&nbsp;</a></span>ks_test_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] ks_test_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>first</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>value</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bigint&#160;</td>
+          <td class="paramname"><em>numFirst</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bigint&#160;</td>
+          <td class="paramname"><em>numSecond</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac18e666088117997da2d22236e982f5e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac18e666088117997da2d22236e982f5e">&#9670;&nbsp;</a></span>mw_test_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">mw_test_result mw_test_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a4e324c82b069ebf7b498012aa83931c5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4e324c82b069ebf7b498012aa83931c5">&#9670;&nbsp;</a></span>mw_test_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] mw_test_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>first</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>value</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Given realizations \( x_1, \dots, x_m \) and \( y_1, \dots, y_m \) of i.i.d. random variables \( X_1, \dots, X_m \) and i.i.d. \( Y_1, \dots, Y_n \), respectively, test the null hypothesis that the underlying distributions function \( F_X, F_Y \) are identical, i.e., \( H_0 : F_X = F_Y \).</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">first</td><td>Determines whether the value belongs to the first (if <code>TRUE</code>) or the second sample (if <code>FALSE</code>) </td></tr>
+    <tr><td class="paramname">value</td><td>Value of random variate \( x_i \) or \( y_i \) </td></tr>
+    <tr><td class="paramname">m</td><td>Size \( m \) of the first sample. See usage instructions below. </td></tr>
+    <tr><td class="paramname">n</td><td>Size of the second sample. See usage instructions below.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>A composite value.<ul>
+<li><code>statistic FLOAT8</code> - Kolmogorov–Smirnov statistic <p class="formulaDsp">
+\[ d = \max_{t \in \mathbb R} |F_x(t) - F_y(t)| \]
+</p>
+ where \( F_x(t) := \frac 1m |\{ i \mid x_i \leq t \}| \) and \( F_y \) (defined likewise) are the empirical distribution functions.</li>
+<li><code>k_statistic FLOAT8</code> - Kolmogorov statistic \( k = (r + 0.12 + \frac{0.11}{r}) \cdot d \) where \( r = \sqrt{\frac{m n}{m+n}}. \) and \( d \) is the statistic. Then \( k \) is approximately Kolmogorov distributed.</li>
+<li><code>p_value FLOAT8</code> - Approximate p-value, i.e., an approximate value for \( \Pr[D \geq d \mid F_X = F_Y] \). Computed as <code>(1.0 - <a class="el" href="prob_8sql__in.html#aeef43f74f583bdff17bd074d9c0d9607">kolmogorov_cdf</a>(k_statistic))</code>.</li>
+</ul>
+</dd></dl>
+<dl class="section user"><dt>Usage</dt><dd><ul>
+<li>Test null hypothesis that two samples stem from the same distribution: <pre>SELECT (ks_test(<em>first</em>, <em>value</em>,
+    (SELECT count(<em>value</em>) FROM <em>source</em> WHERE <em>first</em>),
+    (SELECT count(<em>value</em>) FROM <em>source</em> WHERE NOT <em>first</em>)
+    ORDER BY <em>value</em>
+)).* FROM <em>source</em></pre></li>
+</ul>
+</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This aggregate must be used as an ordered aggregate (<code>ORDER BY <em>value</code></em>) and will raise an exception if values are not ordered. </dd></dl>
+
+</div>
+</div>
+<a id="abd5c80afd954294de268030ee73e88cc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abd5c80afd954294de268030ee73e88cc">&#9670;&nbsp;</a></span>one_way_anova()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] one_way_anova </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>group</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>value</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Given realizations \( x_{1,1}, \dots, x_{1, n_1}, x_{2,1}, \dots, x_{2,n_2}, \dots, x_{k,n_k} \) of i.i.d. random variables \( X_{i,j} \sim N(\mu_i, \sigma^2) \) with unknown parameters \( \mu_1, \dots, \mu_k \) and \( \sigma^2 \), test the null hypotheses \( H_0 : \mu_1 = \dots = \mu_k \).</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">group</td><td>Group which <code>value</code> is from. Note that <code>group</code> can assume arbitary value not limited to a continguous range of integers. </td></tr>
+    <tr><td class="paramname">value</td><td>Value of random variate \( x_{i,j} \)</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>A composite value as follows. Let \( n := \sum_{i=1}^k n_i \) be the total size of all samples. Denote by \( \bar x \) the grand mean, by \( \overline{x_i} \) the group sample means, and by \( s_i^2 \) the group sample variances.<ul>
+<li><code>sum_squares_between DOUBLE PRECISION</code> - sum of squares between the group means, i.e., \( \mathit{SS}_b = \sum_{i=1}^k n_i (\overline{x_i} - \bar x)^2. \)</li>
+<li><code>sum_squares_within DOUBLE PRECISION</code> - sum of squares within the groups, i.e., \( \mathit{SS}_w = \sum_{i=1}^k (n_i - 1) s_i^2. \)</li>
+<li><code>df_between BIGINT</code> - degree of freedom for between-group variation \( (k-1) \)</li>
+<li><code>df_within BIGINT</code> - degree of freedom for within-group variation \( (n-k) \)</li>
+<li><code>mean_squares_between DOUBLE PRECISION</code> - mean square between groups, i.e., \( s_b^2 := \frac{\mathit{SS}_b}{k-1} \)</li>
+<li><code>mean_squares_within DOUBLE PRECISION</code> - mean square within groups, i.e., \( s_w^2 := \frac{\mathit{SS}_w}{n-k} \)</li>
+<li><code>statistic DOUBLE PRECISION</code> - Statistic computed as <p class="formulaDsp">
+\[ f = \frac{s_b^2}{s_w^2}. \]
+</p>
+ This statistic is Fisher F-distributed with \( (k-1) \) degrees of freedom in the numerator and \( (n-k) \) degrees of freedom in the denominator.</li>
+<li><code>p_value DOUBLE PRECISION</code> - p-value, i.e., \( \Pr[ F \geq f \mid H_0] \).</li>
+</ul>
+</dd></dl>
+<dl class="section user"><dt>Usage</dt><dd><ul>
+<li>Test null hypothesis that the mean of the all samples is equal: <pre>SELECT (one_way_anova(<em>group</em>, <em>value</em>)).* FROM <em>source</em></pre> </li>
+</ul>
+</dd></dl>
+
+</div>
+</div>
+<a id="a5ac28bec7ff670a7da8b9eae4a8ed4cb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5ac28bec7ff670a7da8b9eae4a8ed4cb">&#9670;&nbsp;</a></span>one_way_anova_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">one_way_anova_result one_way_anova_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ad6c05d07183c961961f171b0a925ad93"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad6c05d07183c961961f171b0a925ad93">&#9670;&nbsp;</a></span>one_way_anova_merge_states()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] one_way_anova_merge_states </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa694f4ce95280210a3887773bb3f417b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa694f4ce95280210a3887773bb3f417b">&#9670;&nbsp;</a></span>one_way_anova_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] one_way_anova_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>group</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>value</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Given realizations \( x_1, \dots, x_n \) of i.i.d. random variables \( X_1, \dots, X_n \) with unknown mean \( \mu \), test the null hypotheses \( H_0 : \mu \leq 0 \) and \( H_0 : \mu = 0 \).</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">value</td><td>Value of random variate \( x_i \) or \( y_i \). Values of 0 are ignored (i.e., they do not count towards \( n \)). </td></tr>
+    <tr><td class="paramname">precision</td><td>The precision \( \epsilon_i \) with which value is known. The precision determines the handling of ties. The current value \( v_i \) is regarded a tie with the previous value \( v_{i-1} \) if \( v_i - \epsilon_i \leq \max_{j=1, \dots, i-1} v_j + \epsilon_j \). If <code>precision</code> is negative, then it will be treated as <code>value * 2^(-52)</code>. (Note that \( 2^{-52} \) is the machine epsilon for type <code>DOUBLE PRECISION</code>.)</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>A composite value:<ul>
+<li><code>statistic FLOAT8</code> - statistic computed as follows. Let \( w^+ = \sum_{i \mid x_i &gt; 0} r_i \) and \( w^- = \sum_{i \mid x_i &lt; 0} r_i \) be the <em>signed rank sums</em> where <p class="formulaDsp">
+\[ r_i = \{ j \mid |x_j| &lt; |x_i| \} + \frac{\{ j \mid |x_j| = |x_i| \} + 1}{2}. \]
+</p>
+ The Wilcoxon signed-rank statistic is \( w = \min \{ w^+, w^- \} \).</li>
+<li><code>rank_sum_pos FLOAT8</code> - rank sum of all positive values, i.e., \( w^+ \)</li>
+<li><code>rank_sum_neg FLOAT8</code> - rank sum of all negative values, i.e., \( w^- \)</li>
+<li><code>num BIGINT</code> - number \( n \) of non-zero values</li>
+<li><code>z_statistic FLOAT8</code> - z-statistic <p class="formulaDsp">
+\[ z = \frac{w^+ - \frac{n(n+1)}{4}} {\sqrt{\frac{n(n+1)(2n+1)}{24} - \sum_{i=1}^n \frac{t_i^2 - 1}{48}}} \]
+</p>
+ where \( t_i \) is the number of values with absolute value equal to \( |x_i| \). The corresponding random variable is approximately standard normally distributed.</li>
+<li><code>p_value_one_sided FLOAT8</code> - One-sided p-value i.e., \( \Pr[Z \geq z \mid \mu \leq 0] \). Computed as <code>(1.0 - <a class="el" href="prob_8sql__in.html#a6c0a499faa80db26c0178f1e69cf7a50">normal_cdf</a>(z_statistic))</code>.</li>
+<li><code>p_value_two_sided FLOAT8</code> - Two-sided p-value, i.e., \( \Pr[ |Z| \geq |z| \mid \mu = 0] \). Computed as <code>(2 * <a class="el" href="prob_8sql__in.html#a6c0a499faa80db26c0178f1e69cf7a50">normal_cdf</a>(-abs(z_statistic)))</code>.</li>
+</ul>
+</dd></dl>
+<dl class="section user"><dt>Usage</dt><dd><ul>
+<li>One-sample test: Test null hypothesis that the mean of a sample is at most (or equal to, respectively) \( \mu_0 \): <pre>SELECT (wsr_test(<em>value</em> - <em>mu_0</em> ORDER BY abs(<em>value</em>))).* FROM <em>source</em></pre></li>
+<li>Dependent paired test: Test null hypothesis that the mean difference between the first and second value in a pair is at most (or equal to, respectively) \( \mu_0 \): <pre>SELECT (wsr_test(<em>first</em> - <em>second</em> - <em>mu_0</em> ORDER BY abs(<em>first</em> - <em>second</em>))).* FROM <em>source</em></pre> If correctly determining ties is important (e.g., you may want to do so when comparing to software products that take <code>first</code>, <code>second</code>, and <code>mu_0</code> as individual parameters), supply the precision parameter. This can be done as follows: <pre>SELECT (wsr_test(
+    <em>first</em> - <em>second</em> - <em>mu_0</em>,
+    3 * 2^(-52) * greatest(first, second, mu_0)
+    ORDER BY abs(<em>first</em> - <em>second</em>)
+)).* FROM <em>source</em></pre> Here \( 2^{-52} \) is the machine epsilon, which we scale to the magnitude of the input data and multiply with 3 because we have a sum with three terms.</li>
+</ul>
+</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This aggregate must be used as an ordered aggregate (<code>ORDER BY abs(<em>value</code></em>)) and will raise an exception if the absolute values are not ordered. </dd></dl>
+
+</div>
+</div>
+<a id="ac97c5f5015790b59645d69858e127645"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac97c5f5015790b59645d69858e127645">&#9670;&nbsp;</a></span>t_test_merge_states()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] t_test_merge_states </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a14fdcfa276fd1a7ea2e3adb41ebe7db4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a14fdcfa276fd1a7ea2e3adb41ebe7db4">&#9670;&nbsp;</a></span>t_test_one()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] t_test_one </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>value</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Given realizations \( x_1, \dots, x_n \) of i.i.d. random variables \( X_1, \dots, X_n \sim N(\mu, \sigma^2) \) with unknown parameters \( \mu \) and \( \sigma^2 \), test the null hypotheses \( H_0 : \mu \leq 0 \) and \( H_0 : \mu = 0 \).</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">value</td><td>Value of random variate \( x_i \)</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>A composite value as follows. We denote by \( \bar x \) the sample mean and by \( s^2 \) the sample variance.<ul>
+<li><code>statistic FLOAT8</code> - Statistic <p class="formulaDsp">
+\[ t = \frac{\sqrt n \cdot \bar x}{s} \]
+</p>
+ The corresponding random variable is Student-t distributed with \( (n - 1) \) degrees of freedom.</li>
+<li><code>df FLOAT8</code> - Degrees of freedom \( (n - 1) \)</li>
+<li><code>p_value_one_sided FLOAT8</code> - Lower bound on one-sided p-value. In detail, the result is \( \Pr[\bar X \geq \bar x \mid \mu = 0] \), which is a lower bound on \( \Pr[\bar X \geq \bar x \mid \mu \leq 0] \). Computed as <code>(1.0 - <a class="el" href="prob_8sql__in.html#a5322531131074c23a2dbf067ee504ef7">students_t_cdf</a>(statistic))</code>.</li>
+<li><code>p_value_two_sided FLOAT8</code> - Two-sided p-value, i.e., \( \Pr[ |\bar X| \geq |\bar x| \mid \mu = 0] \). Computed as <code>(2 * <a class="el" href="prob_8sql__in.html#a5322531131074c23a2dbf067ee504ef7">students_t_cdf</a>(-abs(statistic)))</code>.</li>
+</ul>
+</dd></dl>
+<dl class="section user"><dt>Usage</dt><dd><ul>
+<li>One-sample t-test: Test null hypothesis that the mean of a sample is at most (or equal to, respectively) \( \mu_0 \): <pre>SELECT (t_test_one(<em>value</em> - <em>mu_0</em>)).* FROM <em>source</em></pre></li>
+<li>Dependent paired t-test: Test null hypothesis that the mean difference between the first and second value in each pair is at most (or equal to, respectively) \( \mu_0 \): <pre>SELECT (t_test_one(<em>first</em> - <em>second</em> - <em>mu_0</em>)).*
+              FROM <em>source</em></pre> </li>
+</ul>
+</dd></dl>
+
+</div>
+</div>
+<a id="ad570d893565618bcbbcbb01b3bb0a9b9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad570d893565618bcbbcbb01b3bb0a9b9">&#9670;&nbsp;</a></span>t_test_one_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">t_test_result t_test_one_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a3bd1bcc335a2da73d01b40e06f7d2eea"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3bd1bcc335a2da73d01b40e06f7d2eea">&#9670;&nbsp;</a></span>t_test_one_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] t_test_one_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>value</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5c306ba8380ce6567831fef4610e515b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5c306ba8380ce6567831fef4610e515b">&#9670;&nbsp;</a></span>t_test_two_pooled()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] t_test_two_pooled </td>
+          <td>(</td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>first</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>value</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Given realizations \( x_1, \dots, x_n \) and \( y_1, \dots, y_m \) of i.i.d. random variables \( X_1, \dots, X_n \sim N(\mu_X, \sigma^2) \) and \( Y_1, \dots, Y_m \sim N(\mu_Y, \sigma^2) \) with unknown parameters \( \mu_X, \mu_Y, \) and \( \sigma^2 \), test the null hypotheses \( H_0 : \mu_X \leq \mu_Y \) and \( H_0 : \mu_X = \mu_Y \).</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">first</td><td>Indicator whether <code>value</code> is from first sample \( x_1, \dots, x_n \) (if <code>TRUE</code>) or from second sample \( y_1, \dots, y_m \) (if <code>FALSE</code>) </td></tr>
+    <tr><td class="paramname">value</td><td>Value of random variate \( x_i \) or \( y_i \)</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>A composite value as follows. We denote by \( \bar x, \bar y \) the sample means and by \( s_X^2, s_Y^2 \) the sample variances.<ul>
+<li><code>statistic FLOAT8</code> - Statistic <p class="formulaDsp">
+\[ t = \frac{\bar x - \bar y}{s_p \sqrt{1/n + 1/m}} \]
+</p>
+ where <p class="formulaDsp">
+\[ s_p^2 = \frac{\sum_{i=1}^n (x_i - \bar x)^2 + \sum_{i=1}^m (y_i - \bar y)^2} {n + m - 2} \]
+</p>
+ is the <em>pooled variance</em>. The corresponding random variable is Student-t distributed with \( (n + m - 2) \) degrees of freedom.</li>
+<li><code>df FLOAT8</code> - Degrees of freedom \( (n + m - 2) \)</li>
+<li><code>p_value_one_sided FLOAT8</code> - Lower bound on one-sided p-value. In detail, the result is \( \Pr[\bar X - \bar Y \geq \bar x - \bar y \mid \mu_X = \mu_Y] \), which is a lower bound on \( \Pr[\bar X - \bar Y \geq \bar x - \bar y \mid \mu_X \leq \mu_Y] \). Computed as <code>(1.0 - <a class="el" href="prob_8sql__in.html#a5322531131074c23a2dbf067ee504ef7">students_t_cdf</a>(statistic))</code>.</li>
+<li><code>p_value_two_sided FLOAT8</code> - Two-sided p-value, i.e., \( \Pr[ |\bar X - \bar Y| \geq |\bar x - \bar y| \mid \mu_X = \mu_Y] \). Computed as <code>(2 * <a class="el" href="prob_8sql__in.html#a5322531131074c23a2dbf067ee504ef7">students_t_cdf</a>(-abs(statistic)))</code>.</li>
+</ul>
+</dd></dl>
+<dl class="section user"><dt>Usage</dt><dd><ul>
+<li>Two-sample pooled t-test: Test null hypothesis that the mean of the first sample is at most (or equal to, respectively) the mean of the second sample: <pre>SELECT (t_test_pooled(<em>first</em>, <em>value</em>)).* FROM <em>source</em></pre> </li>
+</ul>
+</dd></dl>
+
+</div>
+</div>
+<a id="a0a0a8a579bbf0f0d1efcbf62223e3431"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0a0a8a579bbf0f0d1efcbf62223e3431">&#9670;&nbsp;</a></span>t_test_two_pooled_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">t_test_result t_test_two_pooled_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1a835d80d1846a10a2c25b91ce81c6d2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1a835d80d1846a10a2c25b91ce81c6d2">&#9670;&nbsp;</a></span>t_test_two_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] t_test_two_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>first</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>value</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac50750a0e0797ce24af1dc479b9699e1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac50750a0e0797ce24af1dc479b9699e1">&#9670;&nbsp;</a></span>t_test_two_unpooled()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] t_test_two_unpooled </td>
+          <td>(</td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>first</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>value</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Given realizations \( x_1, \dots, x_n \) and \( y_1, \dots, y_m \) of i.i.d. random variables \( X_1, \dots, X_n \sim N(\mu_X, \sigma_X^2) \) and \( Y_1, \dots, Y_m \sim N(\mu_Y, \sigma_Y^2) \) with unknown parameters \( \mu_X, \mu_Y, \sigma_X^2, \) and \( \sigma_Y^2 \), test the null hypotheses \( H_0 : \mu_X \leq \mu_Y \) and \( H_0 : \mu_X = \mu_Y \).</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">first</td><td>Indicator whether <code>value</code> is from first sample \( x_1, \dots, x_n \) (if <code>TRUE</code>) or from second sample \( y_1, \dots, y_m \) (if <code>FALSE</code>) </td></tr>
+    <tr><td class="paramname">value</td><td>Value of random variate \( x_i \) or \( y_i \)</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>A composite value as follows. We denote by \( \bar x, \bar y \) the sample means and by \( s_X^2, s_Y^2 \) the sample variances.<ul>
+<li><code>statistic FLOAT8</code> - Statistic <p class="formulaDsp">
+\[ t = \frac{\bar x - \bar y}{\sqrt{s_X^2/n + s_Y^2/m}} \]
+</p>
+ The corresponding random variable is approximately Student-t distributed with <p class="formulaDsp">
+\[ \frac{(s_X^2 / n + s_Y^2 / m)^2}{(s_X^2 / n)^2/(n-1) + (s_Y^2 / m)^2/(m-1)} \]
+</p>
+ degrees of freedom (Welch–Satterthwaite formula).</li>
+<li><code>df FLOAT8</code> - Degrees of freedom (as above)</li>
+<li><code>p_value_one_sided FLOAT8</code> - Lower bound on one-sided p-value. In detail, the result is \( \Pr[\bar X - \bar Y \geq \bar x - \bar y \mid \mu_X = \mu_Y] \), which is a lower bound on \( \Pr[\bar X - \bar Y \geq \bar x - \bar y \mid \mu_X \leq \mu_Y] \). Computed as <code>(1.0 - <a class="el" href="prob_8sql__in.html#a5322531131074c23a2dbf067ee504ef7">students_t_cdf</a>(statistic))</code>.</li>
+<li><code>p_value_two_sided FLOAT8</code> - Two-sided p-value, i.e., \( \Pr[ |\bar X - \bar Y| \geq |\bar x - \bar y| \mid \mu_X = \mu_Y] \). Computed as <code>(2 * <a class="el" href="prob_8sql__in.html#a5322531131074c23a2dbf067ee504ef7">students_t_cdf</a>(-abs(statistic)))</code>.</li>
+</ul>
+</dd></dl>
+<dl class="section user"><dt>Usage</dt><dd><ul>
+<li>Two-sample unpooled t-test: Test null hypothesis that the mean of the first sample is at most (or equal to, respectively) the mean of the second sample: <pre>SELECT (t_test_unpooled(<em>first</em>, <em>value</em>)).* FROM <em>source</em></pre> </li>
+</ul>
+</dd></dl>
+
+</div>
+</div>
+<a id="a8fe7f38d29bf835718adca811e36f15a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8fe7f38d29bf835718adca811e36f15a">&#9670;&nbsp;</a></span>t_test_two_unpooled_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">t_test_result t_test_two_unpooled_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8f0431ace27ac78e9e1df9906f1f1c33"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8f0431ace27ac78e9e1df9906f1f1c33">&#9670;&nbsp;</a></span>wsr_test_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">wsr_test_result wsr_test_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a0d85654832dfa961cd13526c052642f3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0d85654832dfa961cd13526c052642f3">&#9670;&nbsp;</a></span>wsr_test_transition() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] wsr_test_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>value</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>precision</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Given realizations \( x_1, \dots, x_m \) and \( y_1, \dots, y_m \) of i.i.d. random variables \( X_1, \dots, X_m \) and i.i.d. \( Y_1, \dots, Y_n \), respectively, test the null hypothesis that the underlying distributions are equal, i.e., \( H_0 : \forall i,j: \Pr[X_i &gt; Y_j] + \frac{\Pr[X_i = Y_j]}{2} = \frac 12 \).</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">first</td><td>Determines whether the value belongs to the first (if <code>TRUE</code>) or the second sample (if <code>FALSE</code>) </td></tr>
+    <tr><td class="paramname">value</td><td>Value of random variate \( x_i \) or \( y_i \)</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>A composite value.<ul>
+<li><code>statistic FLOAT8</code> - Statistic <p class="formulaDsp">
+\[ z = \frac{u - \bar x}{\sqrt{\frac{mn(m+n+1)}{12}}} \]
+</p>
+ where \( u \) is the u-statistic computed as follows. The z-statistic is approximately standard normally distributed.</li>
+<li><code>u_statistic FLOAT8</code> - Statistic \( u = \min \{ u_x, u_y \} \) where <p class="formulaDsp">
+\[ u_x = mn + \binom{m+1}{2} - \sum_{i=1}^m r_{x,i} \]
+</p>
+ where <p class="formulaDsp">
+\[ r_{x,i} = \{ j \mid x_j &lt; x_i \} + \{ j \mid y_j &lt; x_i \} + \frac{\{ j \mid x_j = x_i \} + \{ j \mid y_j = x_i \} + 1}{2} \]
+</p>
+ is defined as the rank of \( x_i \) in the combined list of all \( m+n \) observations. For ties, the average rank of all equal values is used.</li>
+<li><code>p_value_one_sided FLOAT8</code> - Approximate one-sided p-value, i.e., an approximate value for \( \Pr[Z \geq z \mid H_0] \). Computed as <code>(1.0 - <a class="el" href="prob_8sql__in.html#a6c0a499faa80db26c0178f1e69cf7a50">normal_cdf</a>(z_statistic))</code>.</li>
+<li><code>p_value_two_sided FLOAT8</code> - Approximate two-sided p-value, i.e., an approximate value for \( \Pr[|Z| \geq |z| \mid H_0] \). Computed as <code>(2 * <a class="el" href="prob_8sql__in.html#a6c0a499faa80db26c0178f1e69cf7a50">normal_cdf</a>(-abs(z_statistic)))</code>.</li>
+</ul>
+</dd></dl>
+<dl class="section user"><dt>Usage</dt><dd><ul>
+<li>Test null hypothesis that two samples stem from the same distribution: <pre>SELECT (mw_test(<em>first</em>, <em>value</em> ORDER BY <em>value</em>)).* FROM <em>source</em></pre></li>
+</ul>
+</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This aggregate must be used as an ordered aggregate (<code>ORDER BY <em>value</code></em>) and will raise an exception if values are not ordered. </dd></dl>
+
+</div>
+</div>
+<a id="a4093de00ab033f4900ce186d481fa012"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4093de00ab033f4900ce186d481fa012">&#9670;&nbsp;</a></span>wsr_test_transition() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] wsr_test_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>value</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_505cd743a8a717435eca324f49291a46.html">stats</a></li><li class="navelem"><a class="el" href="hypothesis__tests_8sql__in.html">hypothesis_tests.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:57 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/index.html b/docs/rc/index.html
new file mode 100644
index 0000000..b4dc5f7
--- /dev/null
+++ b/docs/rc/index.html
@@ -0,0 +1,144 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Main Page</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('index.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">MADlib Documentation</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p>Apache MADlib is an open-source library for scalable in-database analytics. It provides data-parallel implementations of mathematical, statistical, graph and machine learning methods for structured and unstructured data.</p>
+<p>Useful links: </p><ul>
+<li>
+<a href="http://madlib.apache.org">MADlib web site</a> </li>
+<li>
+<a href="https://cwiki.apache.org/confluence/display/MADLIB">MADlib wiki</a> </li>
+<li>
+<a href="https://issues.apache.org/jira/browse/MADLIB/">JIRAs for reporting bugs and reviewing backlog</a> </li>
+<li>
+<a href="https://mail-archives.apache.org/mod_mbox/madlib-user/">User mailing list</a> </li>
+<li>
+<a href="https://mail-archives.apache.org/mod_mbox/madlib-dev/">Dev mailing list</a> </li>
+<li>
+User documentation for earlier releases: <a href="../v1.16/index.html">v1.16</a>, <a href="../v1.15.1/index.html">v1.15.1</a>, <a href="../v1.15/index.html">v1.15</a>, <a href="../v1.14/index.html">v1.14</a>, <a href="../v1.13/index.html">v1.13</a>  </li>
+</ul>
+<p>Please refer to the <a href="https://github.com/apache/madlib/blob/master/README.md">ReadMe</a> file for information about incorporated third-party material. License information regarding MADlib and included third-party libraries can be found in the <a href="https://github.com/apache/madlib/blob/master/LICENSE">License</a> directory. </p>
+</div></div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/input__data__preprocessor_8sql__in.html b/docs/rc/input__data__preprocessor_8sql__in.html
new file mode 100644
index 0000000..fe16d18
--- /dev/null
+++ b/docs/rc/input__data__preprocessor_8sql__in.html
@@ -0,0 +1,766 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: input_data_preprocessor.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('input__data__preprocessor_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">input_data_preprocessor.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a744eb29240e53401353c50635ff60451"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="input__data__preprocessor_8sql__in.html#a744eb29240e53401353c50635ff60451">validation_preprocessor_dl</a> (varchar source_table, varchar output_table, varchar dependent_varname, varchar independent_varname, varchar training_preprocessor_table, integer buffer_size, text distribution_rules)</td></tr>
+<tr class="separator:a744eb29240e53401353c50635ff60451"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9f219c66cfe4a834148090ee401ff769"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="input__data__preprocessor_8sql__in.html#a9f219c66cfe4a834148090ee401ff769">validation_preprocessor_dl</a> (varchar source_table, varchar output_table, varchar dependent_varname, varchar independent_varname, varchar training_preprocessor_table, integer buffer_size)</td></tr>
+<tr class="separator:a9f219c66cfe4a834148090ee401ff769"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af4105a378bccdf33dafc5bed91c94db4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="input__data__preprocessor_8sql__in.html#af4105a378bccdf33dafc5bed91c94db4">validation_preprocessor_dl</a> (varchar source_table, varchar output_table, varchar dependent_varname, varchar independent_varname, varchar training_preprocessor_table)</td></tr>
+<tr class="separator:af4105a378bccdf33dafc5bed91c94db4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af61c674e283134f2ffe282623befc1b6"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="input__data__preprocessor_8sql__in.html#af61c674e283134f2ffe282623befc1b6">validation_preprocessor_dl</a> (varchar message)</td></tr>
+<tr class="separator:af61c674e283134f2ffe282623befc1b6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae112de88adf13d59bcf2ed7ef15dd40f"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="input__data__preprocessor_8sql__in.html#ae112de88adf13d59bcf2ed7ef15dd40f">validation_preprocessor_dl</a> ()</td></tr>
+<tr class="separator:ae112de88adf13d59bcf2ed7ef15dd40f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a11a26c03a879a4c7e40e3ba07ca39a22"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="input__data__preprocessor_8sql__in.html#a11a26c03a879a4c7e40e3ba07ca39a22">training_preprocessor_dl</a> (varchar source_table, varchar output_table, varchar dependent_varname, varchar independent_varname, integer buffer_size, real normalizing_const, integer num_classes, text distribution_rules)</td></tr>
+<tr class="separator:a11a26c03a879a4c7e40e3ba07ca39a22"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a75a2de01ab9b86789faa7c41b2c55356"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="input__data__preprocessor_8sql__in.html#a75a2de01ab9b86789faa7c41b2c55356">training_preprocessor_dl</a> (varchar source_table, varchar output_table, varchar dependent_varname, varchar independent_varname, integer buffer_size, real normalizing_const, integer num_classes)</td></tr>
+<tr class="separator:a75a2de01ab9b86789faa7c41b2c55356"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab8bc5ee0db5db0e89da79ba3a0edc608"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="input__data__preprocessor_8sql__in.html#ab8bc5ee0db5db0e89da79ba3a0edc608">training_preprocessor_dl</a> (varchar source_table, varchar output_table, varchar dependent_varname, varchar independent_varname, integer buffer_size, real normalizing_const)</td></tr>
+<tr class="separator:ab8bc5ee0db5db0e89da79ba3a0edc608"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a64cd744683e85892bf020cc936f532ed"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="input__data__preprocessor_8sql__in.html#a64cd744683e85892bf020cc936f532ed">training_preprocessor_dl</a> (varchar source_table, varchar output_table, varchar dependent_varname, varchar independent_varname, integer buffer_size)</td></tr>
+<tr class="separator:a64cd744683e85892bf020cc936f532ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab60b64f54439fe51608fa2cd2de93a91"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="input__data__preprocessor_8sql__in.html#ab60b64f54439fe51608fa2cd2de93a91">training_preprocessor_dl</a> (varchar source_table, varchar output_table, varchar dependent_varname, varchar independent_varname)</td></tr>
+<tr class="separator:ab60b64f54439fe51608fa2cd2de93a91"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1a999c1227078fa664faed39ee8f836b"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="input__data__preprocessor_8sql__in.html#a1a999c1227078fa664faed39ee8f836b">training_preprocessor_dl</a> (varchar message)</td></tr>
+<tr class="separator:a1a999c1227078fa664faed39ee8f836b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aed7b34f84c82c898742af1d7878ba42d"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="input__data__preprocessor_8sql__in.html#aed7b34f84c82c898742af1d7878ba42d">training_preprocessor_dl</a> ()</td></tr>
+<tr class="separator:aed7b34f84c82c898742af1d7878ba42d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0d24b7a8306ca61b0d89d1afe1f892b0"><td class="memItemLeft" align="right" valign="top">aggregate real []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="input__data__preprocessor_8sql__in.html#a0d24b7a8306ca61b0d89d1afe1f892b0">agg_array_concat</a> (real[])</td></tr>
+<tr class="separator:a0d24b7a8306ca61b0d89d1afe1f892b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab478cd585b6a2aa1435c93d53429987f"><td class="memItemLeft" align="right" valign="top">aggregate smallint []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="input__data__preprocessor_8sql__in.html#ab478cd585b6a2aa1435c93d53429987f">agg_array_concat</a> (smallint[])</td></tr>
+<tr class="separator:ab478cd585b6a2aa1435c93d53429987f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adddc008fc86a92a0ffa8ce2875fff6e0"><td class="memItemLeft" align="right" valign="top">bytea&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="input__data__preprocessor_8sql__in.html#adddc008fc86a92a0ffa8ce2875fff6e0">convert_array_to_bytea</a> (real[] var)</td></tr>
+<tr class="separator:adddc008fc86a92a0ffa8ce2875fff6e0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a81d7da93a6e2ed7cd1c8407b259f7258"><td class="memItemLeft" align="right" valign="top">bytea&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="input__data__preprocessor_8sql__in.html#a81d7da93a6e2ed7cd1c8407b259f7258">convert_array_to_bytea</a> (smallint[] var)</td></tr>
+<tr class="separator:a81d7da93a6e2ed7cd1c8407b259f7258"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3ce0821912d0e1256816881607d3bfc9"><td class="memItemLeft" align="right" valign="top">real []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="input__data__preprocessor_8sql__in.html#a3ce0821912d0e1256816881607d3bfc9">convert_bytea_to_real_array</a> (bytea var)</td></tr>
+<tr class="separator:a3ce0821912d0e1256816881607d3bfc9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a38e811354ec1793a7126dfe38e4cd086"><td class="memItemLeft" align="right" valign="top">smallint []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="input__data__preprocessor_8sql__in.html#a38e811354ec1793a7126dfe38e4cd086">convert_bytea_to_smallint_array</a> (bytea var)</td></tr>
+<tr class="separator:a38e811354ec1793a7126dfe38e4cd086"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a0d24b7a8306ca61b0d89d1afe1f892b0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0d24b7a8306ca61b0d89d1afe1f892b0">&#9670;&nbsp;</a></span>agg_array_concat() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate real [] agg_array_concat </td>
+          <td>(</td>
+          <td class="paramtype">real&#160;</td>
+          <td class="paramname">[]</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab478cd585b6a2aa1435c93d53429987f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab478cd585b6a2aa1435c93d53429987f">&#9670;&nbsp;</a></span>agg_array_concat() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate smallint [] agg_array_concat </td>
+          <td>(</td>
+          <td class="paramtype">smallint&#160;</td>
+          <td class="paramname">[]</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="adddc008fc86a92a0ffa8ce2875fff6e0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adddc008fc86a92a0ffa8ce2875fff6e0">&#9670;&nbsp;</a></span>convert_array_to_bytea() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea convert_array_to_bytea </td>
+          <td>(</td>
+          <td class="paramtype">real []&#160;</td>
+          <td class="paramname"><em>var</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a81d7da93a6e2ed7cd1c8407b259f7258"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a81d7da93a6e2ed7cd1c8407b259f7258">&#9670;&nbsp;</a></span>convert_array_to_bytea() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea convert_array_to_bytea </td>
+          <td>(</td>
+          <td class="paramtype">smallint []&#160;</td>
+          <td class="paramname"><em>var</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a3ce0821912d0e1256816881607d3bfc9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3ce0821912d0e1256816881607d3bfc9">&#9670;&nbsp;</a></span>convert_bytea_to_real_array()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">real [] convert_bytea_to_real_array </td>
+          <td>(</td>
+          <td class="paramtype">bytea&#160;</td>
+          <td class="paramname"><em>var</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a38e811354ec1793a7126dfe38e4cd086"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a38e811354ec1793a7126dfe38e4cd086">&#9670;&nbsp;</a></span>convert_bytea_to_smallint_array()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">smallint [] convert_bytea_to_smallint_array </td>
+          <td>(</td>
+          <td class="paramtype">bytea&#160;</td>
+          <td class="paramname"><em>var</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a11a26c03a879a4c7e40e3ba07ca39a22"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a11a26c03a879a4c7e40e3ba07ca39a22">&#9670;&nbsp;</a></span>training_preprocessor_dl() <span class="overload">[1/7]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void training_preprocessor_dl </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>buffer_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">real&#160;</td>
+          <td class="paramname"><em>normalizing_const</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_classes</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>distribution_rules</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a75a2de01ab9b86789faa7c41b2c55356"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a75a2de01ab9b86789faa7c41b2c55356">&#9670;&nbsp;</a></span>training_preprocessor_dl() <span class="overload">[2/7]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void training_preprocessor_dl </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>buffer_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">real&#160;</td>
+          <td class="paramname"><em>normalizing_const</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_classes</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab8bc5ee0db5db0e89da79ba3a0edc608"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab8bc5ee0db5db0e89da79ba3a0edc608">&#9670;&nbsp;</a></span>training_preprocessor_dl() <span class="overload">[3/7]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void training_preprocessor_dl </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>buffer_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">real&#160;</td>
+          <td class="paramname"><em>normalizing_const</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a64cd744683e85892bf020cc936f532ed"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a64cd744683e85892bf020cc936f532ed">&#9670;&nbsp;</a></span>training_preprocessor_dl() <span class="overload">[4/7]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void training_preprocessor_dl </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>buffer_size</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab60b64f54439fe51608fa2cd2de93a91"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab60b64f54439fe51608fa2cd2de93a91">&#9670;&nbsp;</a></span>training_preprocessor_dl() <span class="overload">[5/7]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void training_preprocessor_dl </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1a999c1227078fa664faed39ee8f836b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1a999c1227078fa664faed39ee8f836b">&#9670;&nbsp;</a></span>training_preprocessor_dl() <span class="overload">[6/7]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar training_preprocessor_dl </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aed7b34f84c82c898742af1d7878ba42d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aed7b34f84c82c898742af1d7878ba42d">&#9670;&nbsp;</a></span>training_preprocessor_dl() <span class="overload">[7/7]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar training_preprocessor_dl </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a744eb29240e53401353c50635ff60451"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a744eb29240e53401353c50635ff60451">&#9670;&nbsp;</a></span>validation_preprocessor_dl() <span class="overload">[1/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void validation_preprocessor_dl </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>training_preprocessor_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>buffer_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>distribution_rules</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a9f219c66cfe4a834148090ee401ff769"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9f219c66cfe4a834148090ee401ff769">&#9670;&nbsp;</a></span>validation_preprocessor_dl() <span class="overload">[2/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void validation_preprocessor_dl </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>training_preprocessor_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>buffer_size</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="af4105a378bccdf33dafc5bed91c94db4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af4105a378bccdf33dafc5bed91c94db4">&#9670;&nbsp;</a></span>validation_preprocessor_dl() <span class="overload">[3/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void validation_preprocessor_dl </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>training_preprocessor_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="af61c674e283134f2ffe282623befc1b6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af61c674e283134f2ffe282623befc1b6">&#9670;&nbsp;</a></span>validation_preprocessor_dl() <span class="overload">[4/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar validation_preprocessor_dl </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae112de88adf13d59bcf2ed7ef15dd40f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae112de88adf13d59bcf2ed7ef15dd40f">&#9670;&nbsp;</a></span>validation_preprocessor_dl() <span class="overload">[5/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar validation_preprocessor_dl </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_7592ceb856cf018f9811e11407c61fda.html">deep_learning</a></li><li class="navelem"><a class="el" href="input__data__preprocessor_8sql__in.html">input_data_preprocessor.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:57 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/jquery.js b/docs/rc/jquery.js
new file mode 100644
index 0000000..f5343ed
--- /dev/null
+++ b/docs/rc/jquery.js
@@ -0,0 +1,87 @@
+/*!
+ * jQuery JavaScript Library v1.7.1
+ * http://jquery.com/
+ *
+ * Copyright 2011, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2011, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Mon Nov 21 21:11:03 2011 -0500
+ */
+(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b4<b3;b4++){if((b9=arguments[b4])!=null){for(b2 in b9){b0=b5[b2];b1=b9[b2];if(b5===b1){continue}if(b8&&b1&&(bF.isPlainObject(b1)||(b6=bF.isArray(b1)))){if(b6){b6=false;b7=b0&&bF.isArray(b0)?b0:[]}else{b7=b0&&bF.isPlainObject(b0)?b0:{}}b5[b2]=bF.extend(b8,b7,b1)}else{if(b1!==L){b5[b2]=b1}}}}}return b5};bF.extend({noConflict:function(b0){if(bb.$===bF){bb.$=bH}if(b0&&bb.jQuery===bF){bb.jQuery=bU}return bF},isReady:false,readyWait:1,holdReady:function(b0){if(b0){bF.readyWait++}else{bF.ready(true)}},ready:function(b0){if((b0===true&&!--bF.readyWait)||(b0!==true&&!bF.isReady)){if(!av.body){return setTimeout(bF.ready,1)}bF.isReady=true;if(b0!==true&&--bF.readyWait>0){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bb.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bb.attachEvent("onload",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0&&typeof b0==="object"&&"setInterval" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb["eval"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b4<b5;){if(b6.apply(b3[b4++],b2)===false){break}}}}else{if(b0){for(b1 in b3){if(b6.call(b3[b1],b1,b3[b1])===false){break}}}else{for(;b4<b5;){if(b6.call(b3[b4],b4,b3[b4++])===false){break}}}}return b3},trim:bO?function(b0){return b0==null?"":bO.call(b0)}:function(b0){return b0==null?"":b0.toString().replace(bI,"").replace(bE,"")},makeArray:function(b3,b1){var b0=b1||[];if(b3!=null){var b2=bF.type(b3);if(b3.length==null||b2==="string"||b2==="function"||b2==="regexp"||bF.isWindow(b3)){bz.call(b0,b3)}else{bF.merge(b0,b3)}}return b0},inArray:function(b2,b3,b1){var b0;if(b3){if(bv){return bv.call(b3,b2,b1)}b0=b3.length;b1=b1?b1<0?Math.max(0,b0+b1):b1:0;for(;b1<b0;b1++){if(b1 in b3&&b3[b1]===b2){return b1}}}return -1},merge:function(b4,b2){var b3=b4.length,b1=0;if(typeof b2.length==="number"){for(var b0=b2.length;b1<b0;b1++){b4[b3++]=b2[b1]}}else{while(b2[b1]!==L){b4[b3++]=b2[b1++]}}b4.length=b3;return b4},grep:function(b1,b6,b0){var b2=[],b5;b0=!!b0;for(var b3=0,b4=b1.length;b3<b4;b3++){b5=!!b6(b1[b3],b3);if(b0!==b5){b2.push(b1[b3])}}return b2},map:function(b0,b7,b8){var b5,b6,b4=[],b2=0,b1=b0.length,b3=b0 instanceof bF||b1!==L&&typeof b1==="number"&&((b1>0&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b2<b1;b2++){b5=b7(b0[b2],b2,b8);if(b5!=null){b4[b4.length]=b5}}}else{for(b6 in b0){b5=b7(b0[b6],b6,b8);if(b5!=null){b4[b4.length]=b5}}}return b4.concat.apply([],b4)},guid:1,proxy:function(b4,b3){if(typeof b3==="string"){var b2=b4[b3];b3=b4;b4=b2}if(!bF.isFunction(b4)){return L}var b0=bK.call(arguments,2),b1=function(){return b4.apply(b3,b0.concat(bK.call(arguments)))};b1.guid=b4.guid=b4.guid||b1.guid||bF.guid++;return b1},access:function(b0,b8,b6,b2,b5,b7){var b1=b0.length;if(typeof b8==="object"){for(var b3 in b8){bF.access(b0,b3,b8[b3],b2,b5,b6)}return b0}if(b6!==L){b2=!b7&&b2&&bF.isFunction(b6);for(var b4=0;b4<b1;b4++){b5(b0[b4],b8,b2?b6.call(b0[b4],b4,b5(b0[b4],b8)):b6,b7)}return b0}return b1?b5(b0[0],b8):L},now:function(){return(new Date()).getTime()},uaMatch:function(b1){b1=b1.toLowerCase();var b0=by.exec(b1)||bR.exec(b1)||bQ.exec(b1)||b1.indexOf("compatible")<0&&bS.exec(b1)||[];return{browser:b0[1]||"",version:b0[2]||"0"}},sub:function(){function b0(b3,b4){return new b0.fn.init(b3,b4)}bF.extend(true,b0,this);b0.superclass=this;b0.fn=b0.prototype=this();b0.fn.constructor=b0;b0.sub=this.sub;b0.fn.init=function b2(b3,b4){if(b4&&b4 instanceof bF&&!(b4 instanceof b0)){b4=b0(b4)}return bF.fn.init.call(this,b3,b4,b1)};b0.fn.init.prototype=b0.fn;var b1=b0(av);return b0},browser:{}});bF.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(b1,b0){bx["[object "+b0+"]"]=b0.toLowerCase()});bV=bF.uaMatch(bX);if(bV.browser){bF.browser[bV.browser]=true;bF.browser.version=bV.version}if(bF.browser.webkit){bF.browser.safari=true}if(bM.test("\xA0")){bI=/^[\s\xA0]+/;bE=/[\s\xA0]+$/}bD=bF(av);if(av.addEventListener){e=function(){av.removeEventListener("DOMContentLoaded",e,false);bF.ready()}}else{if(av.attachEvent){e=function(){if(av.readyState==="complete"){av.detachEvent("onreadystatechange",e);bF.ready()}}}}function bw(){if(bF.isReady){return}try{av.documentElement.doScroll("left")}catch(b0){setTimeout(bw,1);return}bF.ready()}return bF})();var a2={};function X(e){var bv=a2[e]={},bw,bx;e=e.split(/\s+/);for(bw=0,bx=e.length;bw<bx;bw++){bv[e[bw]]=true}return bv}b.Callbacks=function(bw){bw=bw?(a2[bw]||X(bw)):{};var bB=[],bC=[],bx,by,bv,bz,bA,bE=function(bF){var bG,bJ,bI,bH,bK;for(bG=0,bJ=bF.length;bG<bJ;bG++){bI=bF[bG];bH=b.type(bI);if(bH==="array"){bE(bI)}else{if(bH==="function"){if(!bw.unique||!bD.has(bI)){bB.push(bI)}}}}},e=function(bG,bF){bF=bF||[];bx=!bw.memory||[bG,bF];by=true;bA=bv||0;bv=0;bz=bB.length;for(;bB&&bA<bz;bA++){if(bB[bA].apply(bG,bF)===false&&bw.stopOnFalse){bx=true;break}}by=false;if(bB){if(!bw.once){if(bC&&bC.length){bx=bC.shift();bD.fireWith(bx[0],bx[1])}}else{if(bx===true){bD.disable()}else{bB=[]}}}},bD={add:function(){if(bB){var bF=bB.length;bE(arguments);if(by){bz=bB.length}else{if(bx&&bx!==true){bv=bF;e(bx[0],bx[1])}}}return this},remove:function(){if(bB){var bF=arguments,bH=0,bI=bF.length;for(;bH<bI;bH++){for(var bG=0;bG<bB.length;bG++){if(bF[bH]===bB[bG]){if(by){if(bG<=bz){bz--;if(bG<=bA){bA--}}}bB.splice(bG--,1);if(bw.unique){break}}}}}return this},has:function(bG){if(bB){var bF=0,bH=bB.length;for(;bF<bH;bF++){if(bG===bB[bF]){return true}}}return false},empty:function(){bB=[];return this},disable:function(){bB=bC=bx=L;return this},disabled:function(){return !bB},lock:function(){bC=L;if(!bx||bx===true){bD.disable()}return this},locked:function(){return !bC},fireWith:function(bG,bF){if(bC){if(by){if(!bw.once){bC.push([bG,bF])}}else{if(!(bw.once&&bx)){e(bG,bF)}}}return this},fire:function(){bD.fireWith(this,arguments);return this},fired:function(){return !!bx}};return bD};var aJ=[].slice;b.extend({Deferred:function(by){var bx=b.Callbacks("once memory"),bw=b.Callbacks("once memory"),bv=b.Callbacks("memory"),e="pending",bA={resolve:bx,reject:bw,notify:bv},bC={done:bx.add,fail:bw.add,progress:bv.add,state:function(){return e},isResolved:bx.fired,isRejected:bw.fired,then:function(bE,bD,bF){bB.done(bE).fail(bD).progress(bF);return this},always:function(){bB.done.apply(bB,arguments).fail.apply(bB,arguments);return this},pipe:function(bF,bE,bD){return b.Deferred(function(bG){b.each({done:[bF,"resolve"],fail:[bE,"reject"],progress:[bD,"notify"]},function(bI,bL){var bH=bL[0],bK=bL[1],bJ;if(b.isFunction(bH)){bB[bI](function(){bJ=bH.apply(this,arguments);if(bJ&&b.isFunction(bJ.promise)){bJ.promise().then(bG.resolve,bG.reject,bG.notify)}else{bG[bK+"With"](this===bB?bG:this,[bJ])}})}else{bB[bI](bG[bK])}})}).promise()},promise:function(bE){if(bE==null){bE=bC}else{for(var bD in bC){bE[bD]=bC[bD]}}return bE}},bB=bC.promise({}),bz;for(bz in bA){bB[bz]=bA[bz].fire;bB[bz+"With"]=bA[bz].fireWith}bB.done(function(){e="resolved"},bw.disable,bv.lock).fail(function(){e="rejected"},bx.disable,bv.lock);if(by){by.call(bB,bB)}return bB},when:function(bA){var bx=aJ.call(arguments,0),bv=0,e=bx.length,bB=new Array(e),bw=e,by=e,bC=e<=1&&bA&&b.isFunction(bA.promise)?bA:b.Deferred(),bE=bC.promise();function bD(bF){return function(bG){bx[bF]=arguments.length>1?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv<e;bv++){if(bx[bv]&&bx[bv].promise&&b.isFunction(bx[bv].promise)){bx[bv].promise().then(bD(bv),bC.reject,bz(bv))}else{--bw}}if(!bw){bC.resolveWith(bC,bx)}}else{if(bC!==bA){bC.resolveWith(bC,e?[bA]:[])}}return bE}});b.support=(function(){var bJ,bI,bF,bG,bx,bE,bA,bD,bz,bK,bB,by,bw,bv=av.createElement("div"),bH=av.documentElement;bv.setAttribute("className","t");bv.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";bI=bv.getElementsByTagName("*");bF=bv.getElementsByTagName("a")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement("select");bx=bG.appendChild(av.createElement("option"));bE=bv.getElementsByTagName("input")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bF.getAttribute("style")),hrefNormalized:(bF.getAttribute("href")==="/a"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav></:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bE=av.createElement("input");bE.value="t";bE.setAttribute("type","radio");bJ.radioValue=bE.value==="t";bE.setAttribute("checked","checked");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML="";if(bb.getComputedStyle){bA=av.createElement("div");bA.style.width="0";bA.style.marginRight="0";bv.style.width="2px";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB="on"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,"return;");bw=(typeof bv[bB]==="function")}bJ[by+"Bubbles"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName("body")[0];if(!bQ){return}bL=1;bS="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";bR="visibility:hidden;border:0;";e="style='"+bS+"border:5px solid #000;padding:0;'";bP="<div "+e+"><div></div></div><table "+e+" cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";bM=av.createElement("div");bM.style.cssText=bR+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML="";bv.style.width=bv.style.paddingLeft="1px";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!=="undefined"){bv.style.display="inline";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display="";bv.innerHTML="<div style='width:4px;'></div>";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position="fixed";bV.style.top="20px";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top="";bU.style.overflow="hidden";bU.style.position="relative";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA<bz;bA++){delete bB[bv[bA]]}if(!(by?S:b.isEmptyObject)(bB)){return}}}if(!by){delete e[bw].data;if(!S(e[bw])){return}}if(b.support.deleteExpando||!e.setInterval){delete e[bw]}else{e[bw]=null}if(bD){if(b.support.deleteExpando){delete bx[bC]}else{if(bx.removeAttribute){bx.removeAttribute(bC)}else{bx[bC]=null}}}},_data:function(bv,e,bw){return b.data(bv,e,bw,true)},acceptData:function(bv){if(bv.nodeName){var e=b.noData[bv.nodeName.toLowerCase()];if(e){return !(e===true||bv.getAttribute("classid")!==e)}}return true}});b.fn.extend({data:function(by,bA){var bB,e,bw,bz=null;if(typeof by==="undefined"){if(this.length){bz=b.data(this[0]);if(this[0].nodeType===1&&!b._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var bx=0,bv=e.length;bx<bv;bx++){bw=e[bx].name;if(bw.indexOf("data-")===0){bw=b.camelCase(bw.substring(5));a5(this[0],bw,bz[bw])}}b._data(this[0],"parsedAttrs",true)}}return bz}else{if(typeof by==="object"){return this.each(function(){b.data(this,by)})}}bB=by.split(".");bB[1]=bB[1]?"."+bB[1]:"";if(bA===L){bz=this.triggerHandler("getData"+bB[1]+"!",[bB[0]]);if(bz===L&&this.length){bz=b.data(this[0],by);bz=a5(this[0],by,bz)}return bz===L&&bB[1]?this.data(bB[0]):bz}else{return this.each(function(){var bC=b(this),bD=[bB[0],bA];bC.triggerHandler("setData"+bB[1]+"!",bD);b.data(this,by,bA);bC.triggerHandler("changeData"+bB[1]+"!",bD)})}},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function a5(bx,bw,by){if(by===L&&bx.nodeType===1){var bv="data-"+bw.replace(aA,"-$1").toLowerCase();by=bx.getAttribute(bv);if(typeof by==="string"){try{by=by==="true"?true:by==="false"?false:by==="null"?null:b.isNumeric(by)?parseFloat(by):aS.test(by)?b.parseJSON(by):by}catch(bz){}b.data(bx,bw,by)}else{by=L}}return by}function S(bv){for(var e in bv){if(e==="data"&&b.isEmptyObject(bv[e])){continue}if(e!=="toJSON"){return false}}return true}function bi(by,bx,bA){var bw=bx+"defer",bv=bx+"queue",e=bx+"mark",bz=b._data(by,bw);if(bz&&(bA==="queue"||!b._data(by,bv))&&(bA==="mark"||!b._data(by,e))){setTimeout(function(){if(!b._data(by,bv)&&!b._data(by,e)){b.removeData(by,bw,true);bz.fire()}},0)}}b.extend({_mark:function(bv,e){if(bv){e=(e||"fx")+"mark";b._data(bv,e,(b._data(bv,e)||0)+1)}},_unmark:function(by,bx,bv){if(by!==true){bv=bx;bx=by;by=false}if(bx){bv=bv||"fx";var e=bv+"mark",bw=by?0:((b._data(bx,e)||1)-1);if(bw){b._data(bx,e,bw)}else{b.removeData(bx,e,true);bi(bx,bv,"mark")}}},queue:function(bv,e,bx){var bw;if(bv){e=(e||"fx")+"queue";bw=b._data(bv,e);if(bx){if(!bw||b.isArray(bx)){bw=b._data(bv,e,b.makeArray(bx))}else{bw.push(bx)}}return bw||[]}},dequeue:function(by,bx){bx=bx||"fx";var bv=b.queue(by,bx),bw=bv.shift(),e={};if(bw==="inprogress"){bw=bv.shift()}if(bw){if(bx==="fx"){bv.unshift("inprogress")}b._data(by,bx+".run",e);bw.call(by,function(){b.dequeue(by,bx)},e)}if(!bv.length){b.removeData(by,bx+"queue "+bx+".run",true);bi(by,bx,"queue")}}});b.fn.extend({queue:function(e,bv){if(typeof e!=="string"){bv=e;e="fx"}if(bv===L){return b.queue(this[0],e)}return this.each(function(){var bw=b.queue(this,e,bv);if(e==="fx"&&bw[0]!=="inprogress"){b.dequeue(this,e)}})},dequeue:function(e){return this.each(function(){b.dequeue(this,e)})},delay:function(bv,e){bv=b.fx?b.fx.speeds[bv]||bv:bv;e=e||"fx";return this.queue(e,function(bx,bw){var by=setTimeout(bx,bv);bw.stop=function(){clearTimeout(by)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(bD,bw){if(typeof bD!=="string"){bw=bD;bD=L}bD=bD||"fx";var e=b.Deferred(),bv=this,by=bv.length,bB=1,bz=bD+"defer",bA=bD+"queue",bC=bD+"mark",bx;function bE(){if(!(--bB)){e.resolveWith(bv,[bv])}}while(by--){if((bx=b.data(bv[by],bz,L,true)||(b.data(bv[by],bA,L,true)||b.data(bv[by],bC,L,true))&&b.data(bv[by],bz,b.Callbacks("once memory"),true))){bB++;bx.add(bE)}}bE();return e.promise()}});var aP=/[\n\t\r]/g,af=/\s+/,aU=/\r/g,g=/^(?:button|input)$/i,D=/^(?:button|input|object|select|textarea)$/i,l=/^a(?:rea)?$/i,ao=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,F=b.support.getSetAttribute,be,aY,aF;b.fn.extend({attr:function(e,bv){return b.access(this,e,bv,true,b.attr)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,bv){return b.access(this,e,bv,true,b.prop)},removeProp:function(e){e=b.propFix[e]||e;return this.each(function(){try{this[e]=L;delete this[e]}catch(bv){}})},addClass:function(by){var bA,bw,bv,bx,bz,bB,e;if(b.isFunction(by)){return this.each(function(bC){b(this).addClass(by.call(this,bC,this.className))})}if(by&&typeof by==="string"){bA=by.split(af);for(bw=0,bv=this.length;bw<bv;bw++){bx=this[bw];if(bx.nodeType===1){if(!bx.className&&bA.length===1){bx.className=by}else{bz=" "+bx.className+" ";for(bB=0,e=bA.length;bB<e;bB++){if(!~bz.indexOf(" "+bA[bB]+" ")){bz+=bA[bB]+" "}}bx.className=b.trim(bz)}}}}return this},removeClass:function(bz){var bA,bw,bv,by,bx,bB,e;if(b.isFunction(bz)){return this.each(function(bC){b(this).removeClass(bz.call(this,bC,this.className))})}if((bz&&typeof bz==="string")||bz===L){bA=(bz||"").split(af);for(bw=0,bv=this.length;bw<bv;bw++){by=this[bw];if(by.nodeType===1&&by.className){if(bz){bx=(" "+by.className+" ").replace(aP," ");for(bB=0,e=bA.length;bB<e;bB++){bx=bx.replace(" "+bA[bB]+" "," ")}by.className=b.trim(bx)}else{by.className=""}}}}return this},toggleClass:function(bx,bv){var bw=typeof bx,e=typeof bv==="boolean";if(b.isFunction(bx)){return this.each(function(by){b(this).toggleClass(bx.call(this,by,this.className,bv),bv)})}return this.each(function(){if(bw==="string"){var bA,bz=0,by=b(this),bB=bv,bC=bx.split(af);while((bA=bC[bz++])){bB=e?bB:!by.hasClass(bA);by[bB?"addClass":"removeClass"](bA)}}else{if(bw==="undefined"||bw==="boolean"){if(this.className){b._data(this,"__className__",this.className)}this.className=this.className||bx===false?"":b._data(this,"__className__")||""}}})},hasClass:function(e){var bx=" "+e+" ",bw=0,bv=this.length;for(;bw<bv;bw++){if(this[bw].nodeType===1&&(" "+this[bw].className+" ").replace(aP," ").indexOf(bx)>-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aU,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv<bz;bv++){bx=bC[bv];if(bx.selected&&(b.support.optDisabled?!bx.disabled:bx.getAttribute("disabled")===null)&&(!bx.parentNode.disabled||!b.nodeName(bx.parentNode,"optgroup"))){bA=b(bx).val();if(bw){return bA}bB.push(bA)}}if(bw&&!bB.length&&bC.length){return b(bC[by]).val()}return bB},set:function(bv,bw){var e=b.makeArray(bw);b(bv).find("option").each(function(){this.selected=b.inArray(b(this).val(),e)>=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType;if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw<e;bw++){bv=bA[bw];if(bv){by=b.propFix[bv]||bv;b.attr(bx,bv,"");bx.removeAttribute(F?bv:by);if(ao.test(bv)&&by in bx){bx[by]=false}}}}},attrHooks:{type:{set:function(e,bv){if(g.test(e.nodeName)&&e.parentNode){b.error("type property can't be changed")}else{if(!b.support.radioValue&&bv==="radio"&&b.nodeName(e,"input")){var bw=e.value;e.setAttribute("type",bv);if(bw){e.value=bw}return bv}}}},value:{get:function(bv,e){if(be&&b.nodeName(bv,"button")){return be.get(bv,e)}return e in bv?bv.value:null},set:function(bv,bw,e){if(be&&b.nodeName(bv,"button")){return be.set(bv,bw,e)}bv.value=bw}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(bz,bx,bA){var bw,e,by,bv=bz.nodeType;if(!bz||bv===3||bv===8||bv===2){return}by=bv!==1||!b.isXMLDoc(bz);if(by){bx=b.propFix[bx]||bx;e=b.propHooks[bx]}if(bA!==L){if(e&&"set" in e&&(bw=e.set(bz,bA,bx))!==L){return bw}else{return(bz[bx]=bA)}}else{if(e&&"get" in e&&(bw=e.get(bz,bx))!==null){return bw}else{return bz[bx]}}},propHooks:{tabIndex:{get:function(bv){var e=bv.getAttributeNode("tabindex");return e&&e.specified?parseInt(e.value,10):D.test(bv.nodeName)||l.test(bv.nodeName)&&bv.href?0:L}}}});b.attrHooks.tabindex=b.propHooks.tabIndex;aY={get:function(bv,e){var bx,bw=b.prop(bv,e);return bw===true||typeof bw!=="boolean"&&(bx=bv.getAttributeNode(e))&&bx.nodeValue!==false?e.toLowerCase():L},set:function(bv,bx,e){var bw;if(bx===false){b.removeAttr(bv,e)}else{bw=b.propFix[e]||e;if(bw in bv){bv[bw]=true}bv.setAttribute(e,e.toLowerCase())}return e}};if(!F){aF={name:true,id:true};be=b.valHooks.button={get:function(bw,bv){var e;e=bw.getAttributeNode(bv);return e&&(aF[bv]?e.nodeValue!=="":e.specified)?e.nodeValue:L},set:function(bw,bx,bv){var e=bw.getAttributeNode(bv);if(!e){e=av.createAttribute(bv);bw.setAttributeNode(e)}return(e.nodeValue=bx+"")}};b.attrHooks.tabindex.set=be.set;b.each(["width","height"],function(bv,e){b.attrHooks[e]=b.extend(b.attrHooks[e],{set:function(bw,bx){if(bx===""){bw.setAttribute(e,"auto");return bx}}})});b.attrHooks.contenteditable={get:be.get,set:function(bv,bw,e){if(bw===""){bw="false"}be.set(bv,bw,e)}}}if(!b.support.hrefNormalized){b.each(["href","src","width","height"],function(bv,e){b.attrHooks[e]=b.extend(b.attrHooks[e],{get:function(bx){var bw=bx.getAttribute(e,2);return bw===null?L:bw}})})}if(!b.support.style){b.attrHooks.style={get:function(e){return e.style.cssText.toLowerCase()||L},set:function(e,bv){return(e.style.cssText=""+bv)}}}if(!b.support.optSelected){b.propHooks.selected=b.extend(b.propHooks.selected,{get:function(bv){var e=bv.parentNode;if(e){e.selectedIndex;if(e.parentNode){e.parentNode.selectedIndex}}return null}})}if(!b.support.enctype){b.propFix.enctype="encoding"}if(!b.support.checkOn){b.each(["radio","checkbox"],function(){b.valHooks[this]={get:function(e){return e.getAttribute("value")===null?"on":e.value}}})}b.each(["radio","checkbox"],function(){b.valHooks[this]=b.extend(b.valHooks[this],{set:function(e,bv){if(b.isArray(bv)){return(e.checked=b.inArray(b(e).val(),bv)>=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/\bhover(\.\S+)?\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI<bC.length;bI++){bH=n.exec(bC[bI])||[];bF=bH[1];e=(bH[2]||"").split(".").sort();bE=b.event.special[bF]||{};bF=(by?bE.delegateType:bE.bindType)||bF;bE=b.event.special[bF]||{};bG=b.extend({type:bF,origType:bH[1],data:bA,handler:bJ,guid:bJ.guid,selector:by,quick:Y(by),namespace:e.join(".")},bv);bw=bK[bF];if(!bw){bw=bK[bF]=[];bw.delegateCount=0;if(!bE.setup||bE.setup.call(bx,bA,e,bB)===false){if(bx.addEventListener){bx.addEventListener(bF,bB,false)}else{if(bx.attachEvent){bx.attachEvent("on"+bF,bB)}}}}if(bE.add){bE.add.call(bx,bG);if(!bG.handler.guid){bG.handler.guid=bJ.guid}}if(by){bw.splice(bw.delegateCount++,0,bG)}else{bw.push(bG)}b.event.global[bF]=true}bx=null},global:{},remove:function(bJ,bE,bv,bH,bB){var bI=b.hasData(bJ)&&b._data(bJ),bF,bx,bz,bL,bC,bA,bG,bw,by,bK,bD,e;if(!bI||!(bw=bI.events)){return}bE=b.trim(bt(bE||"")).split(" ");for(bF=0;bF<bE.length;bF++){bx=n.exec(bE[bF])||[];bz=bL=bx[1];bC=bx[2];if(!bz){for(bz in bw){b.event.remove(bJ,bz+bE[bF],bv,bH,true)}continue}by=b.event.special[bz]||{};bz=(bH?by.delegateType:by.bindType)||bz;bD=bw[bz]||[];bA=bD.length;bC=bC?new RegExp("(^|\\.)"+bC.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(bG=0;bG<bD.length;bG++){e=bD[bG];if((bB||bL===e.origType)&&(!bv||bv.guid===e.guid)&&(!bC||bC.test(e.namespace))&&(!bH||bH===e.selector||bH==="**"&&e.selector)){bD.splice(bG--,1);if(e.selector){bD.delegateCount--}if(by.remove){by.remove.call(bJ,e)}}}if(bD.length===0&&bA!==bD.length){if(!by.teardown||by.teardown.call(bJ,bC)===false){b.removeEvent(bJ,bz,bI.handle)}delete bw[bz]}}if(b.isEmptyObject(bw)){bK=bI.handle;if(bK){bK.elem=null}b.removeData(bJ,["events","handle"],true)}},customEvent:{getData:true,setData:true,changeData:true},trigger:function(bv,bD,bA,bJ){if(bA&&(bA.nodeType===3||bA.nodeType===8)){return}var bG=bv.type||bv,bx=[],e,bw,bC,bH,bz,by,bF,bE,bB,bI;if(T.test(bG+b.event.triggered)){return}if(bG.indexOf("!")>=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bC<bB.length&&!bv.isPropagationStopped();bC++){bH=bB[bC][0];bv.type=bB[bC][1];bE=(b._data(bH,"events")||{})[bv.type]&&b._data(bH,"handle");if(bE){bE.apply(bH,bD)}bE=by&&bH[by];if(bE&&b.acceptData(bH)&&bE.apply(bH,bD)===false){bv.preventDefault()}}bv.type=bG;if(!bJ&&!bv.isDefaultPrevented()){if((!bF._default||bF._default.apply(bA.ownerDocument,bD)===false)&&!(bG==="click"&&b.nodeName(bA,"a"))&&b.acceptData(bA)){if(by&&bA[bG]&&((bG!=="focus"&&bG!=="blur")||bv.target.offsetWidth!==0)&&!b.isWindow(bA)){bz=bA[by];if(bz){bA[by]=null}b.event.triggered=bG;bA[bG]();b.event.triggered=L;if(bz){bA[by]=bz}}}}return bv.result},dispatch:function(e){e=b.event.fix(e||bb.event);var bz=((b._data(this,"events")||{})[e.type]||[]),bA=bz.delegateCount,bG=[].slice.call(arguments,0),by=!e.exclusive&&!e.namespace,bH=[],bC,bB,bK,bx,bF,bE,bv,bD,bI,bw,bJ;bG[0]=e;e.delegateTarget=this;if(bA&&!e.target.disabled&&!(e.button&&e.type==="click")){bx=b(this);bx.context=this.ownerDocument||this;for(bK=e.target;bK!=this;bK=bK.parentNode||this){bE={};bD=[];bx[0]=bK;for(bC=0;bC<bA;bC++){bI=bz[bC];bw=bI.selector;if(bE[bw]===L){bE[bw]=(bI.quick?j(bK,bI.quick):bx.is(bw))}if(bE[bw]){bD.push(bI)}}if(bD.length){bH.push({elem:bK,matches:bD})}}}if(bz.length>bA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC<bH.length&&!e.isPropagationStopped();bC++){bv=bH[bC];e.currentTarget=bv.elem;for(bB=0;bB<bv.matches.length&&!e.isImmediatePropagationStopped();bB++){bI=bv.matches[bB];if(by||(!e.namespace&&!bI.namespace)||e.namespace_re&&e.namespace_re.test(bI.namespace)){e.data=bI.data;e.handleObj=bI;bF=((b.event.special[bI.origType]||{}).handle||bI.handler).apply(bv.elem,bG);if(bF!==L){e.result=bF;if(bF===false){e.preventDefault();e.stopPropagation()}}}}}return e.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(bv,e){if(bv.which==null){bv.which=e.charCode!=null?e.charCode:e.keyCode}return bv}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(bx,bw){var by,bz,e,bv=bw.button,bA=bw.fromElement;if(bx.pageX==null&&bw.clientX!=null){by=bx.target.ownerDocument||av;bz=by.documentElement;e=by.body;bx.pageX=bw.clientX+(bz&&bz.scrollLeft||e&&e.scrollLeft||0)-(bz&&bz.clientLeft||e&&e.clientLeft||0);bx.pageY=bw.clientY+(bz&&bz.scrollTop||e&&e.scrollTop||0)-(bz&&bz.clientTop||e&&e.clientTop||0)}if(!bx.relatedTarget&&bA){bx.relatedTarget=bA===bx.target?bw.toElement:bA}if(!bx.which&&bv!==L){bx.which=(bv&1?1:(bv&2?3:(bv&4?2:0)))}return bx}},fix:function(bw){if(bw[b.expando]){return bw}var bv,bz,e=bw,bx=b.event.fixHooks[bw.type]||{},by=bx.props?this.props.concat(bx.props):this.props;bw=b.Event(e);for(bv=by.length;bv;){bz=by[--bv];bw[bz]=e[bz]}if(!bw.target){bw.target=e.srcElement||av}if(bw.target.nodeType===3){bw.target=bw.target.parentNode}if(bw.metaKey===L){bw.metaKey=bw.ctrlKey}return bx.filter?bx.filter(bw,e):bw},special:{ready:{setup:b.bindReady},load:{noBubble:true},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(bw,bv,e){if(b.isWindow(this)){this.onbeforeunload=e}},teardown:function(bv,e){if(this.onbeforeunload===e){this.onbeforeunload=null}}}},simulate:function(bw,by,bx,bv){var bz=b.extend(new b.Event(),bx,{type:bw,isSimulated:true,originalEvent:{}});if(bv){b.event.trigger(bz,null,by)}else{b.event.dispatch.call(by,bz)}if(bz.isDefaultPrevented()){bx.preventDefault()}}};b.event.handle=b.event.dispatch;b.removeEvent=av.removeEventListener?function(bv,e,bw){if(bv.removeEventListener){bv.removeEventListener(e,bw,false)}}:function(bv,e,bw){if(bv.detachEvent){bv.detachEvent("on"+e,bw)}};b.Event=function(bv,e){if(!(this instanceof b.Event)){return new b.Event(bv,e)}if(bv&&bv.type){this.originalEvent=bv;this.type=bv.type;this.isDefaultPrevented=(bv.defaultPrevented||bv.returnValue===false||bv.getPreventDefault&&bv.getPreventDefault())?i:bk}else{this.type=bv}if(e){b.extend(this,e)}this.timeStamp=bv&&bv.timeStamp||b.now();this[b.expando]=true};function bk(){return false}function i(){return true}b.Event.prototype={preventDefault:function(){this.isDefaultPrevented=i;var bv=this.originalEvent;if(!bv){return}if(bv.preventDefault){bv.preventDefault()}else{bv.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=i;var bv=this.originalEvent;if(!bv){return}if(bv.stopPropagation){bv.stopPropagation()}bv.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=i;this.stopPropagation()},isDefaultPrevented:bk,isPropagationStopped:bk,isImmediatePropagationStopped:bk};b.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(bv,e){b.event.special[bv]={delegateType:e,bindType:e,handle:function(bz){var bB=this,bA=bz.relatedTarget,by=bz.handleObj,bw=by.selector,bx;if(!bA||(bA!==bB&&!b.contains(bB,bA))){bz.type=by.origType;bx=by.handler.apply(this,arguments);bz.type=e}return bx}}});if(!b.support.submitBubbles){b.event.special.submit={setup:function(){if(b.nodeName(this,"form")){return false}b.event.add(this,"click._submit keypress._submit",function(bx){var bw=bx.target,bv=b.nodeName(bw,"input")||b.nodeName(bw,"button")?bw.form:L;if(bv&&!bv._submit_attached){b.event.add(bv,"submit._submit",function(e){if(this.parentNode&&!e.isTrigger){b.event.simulate("submit",this.parentNode,e,true)}});bv._submit_attached=true}})},teardown:function(){if(b.nodeName(this,"form")){return false}b.event.remove(this,"._submit")}}}if(!b.support.changeBubbles){b.event.special.change={setup:function(){if(bd.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio"){b.event.add(this,"propertychange._change",function(e){if(e.originalEvent.propertyName==="checked"){this._just_changed=true}});b.event.add(this,"click._change",function(e){if(this._just_changed&&!e.isTrigger){this._just_changed=false;b.event.simulate("change",this,e,true)}})}return false}b.event.add(this,"beforeactivate._change",function(bw){var bv=bw.target;if(bd.test(bv.nodeName)&&!bv._change_attached){b.event.add(bv,"change._change",function(e){if(this.parentNode&&!e.isSimulated&&!e.isTrigger){b.event.simulate("change",this.parentNode,e,true)}});bv._change_attached=true}})},handle:function(bv){var e=bv.target;if(this!==e||bv.isSimulated||bv.isTrigger||(e.type!=="radio"&&e.type!=="checkbox")){return bv.handleObj.handler.apply(this,arguments)}},teardown:function(){b.event.remove(this,"._change");return bd.test(this.nodeName)}}}if(!b.support.focusinBubbles){b.each({focus:"focusin",blur:"focusout"},function(bx,e){var bv=0,bw=function(by){b.event.simulate(e,by.target,b.event.fix(by),true)};b.event.special[e]={setup:function(){if(bv++===0){av.addEventListener(bx,bw,true)}},teardown:function(){if(--bv===0){av.removeEventListener(bx,bw,true)}}}})}b.fn.extend({on:function(bw,e,bz,by,bv){var bA,bx;if(typeof bw==="object"){if(typeof e!=="string"){bz=e;e=L}for(bx in bw){this.on(bx,e,bz,bw[bx],bv)}return this}if(bz==null&&by==null){by=e;bz=e=L}else{if(by==null){if(typeof e==="string"){by=bz;bz=L}else{by=bz;bz=e;e=L}}}if(by===false){by=bk}else{if(!by){return this}}if(bv===1){bA=by;by=function(bB){b().off(bB);return bA.apply(this,arguments)};by.guid=bA.guid||(bA.guid=b.guid++)}return this.each(function(){b.event.add(this,bw,by,bz,e)})},one:function(bv,e,bx,bw){return this.on.call(this,bv,e,bx,bw,1)},off:function(bw,e,by){if(bw&&bw.preventDefault&&bw.handleObj){var bv=bw.handleObj;b(bw.delegateTarget).off(bv.namespace?bv.type+"."+bv.namespace:bv.type,bv.selector,bv.handler);return this}if(typeof bw==="object"){for(var bx in bw){this.off(bx,e,bw[bx])}return this}if(e===false||typeof e==="function"){by=e;e=L}if(by===false){by=bk}return this.each(function(){b.event.remove(this,bw,by,e)})},bind:function(e,bw,bv){return this.on(e,null,bw,bv)},unbind:function(e,bv){return this.off(e,null,bv)},live:function(e,bw,bv){b(this.context).on(e,this.selector,bw,bv);return this},die:function(e,bv){b(this.context).off(e,this.selector||"**",bv);return this},delegate:function(e,bv,bx,bw){return this.on(bv,e,bx,bw)},undelegate:function(e,bv,bw){return arguments.length==1?this.off(e,"**"):this.off(bv,e,bw)},trigger:function(e,bv){return this.each(function(){b.event.trigger(e,bv,this)})},triggerHandler:function(e,bv){if(this[0]){return b.event.trigger(e,bv,this[0],true)}},toggle:function(bx){var bv=arguments,e=bx.guid||b.guid++,bw=0,by=function(bz){var bA=(b._data(this,"lastToggle"+bx.guid)||0)%bw;b._data(this,"lastToggle"+bx.guid,bA+1);bz.preventDefault();return bv[bA].apply(this,arguments)||false};by.guid=e;while(bw<bv.length){bv[bw++].guid=e}return this.click(by)},hover:function(e,bv){return this.mouseenter(e).mouseleave(bv||e)}});b.each(("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu").split(" "),function(bv,e){b.fn[e]=function(bx,bw){if(bw==null){bw=bx;bx=null}return arguments.length>0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}});
+/*!
+ * Sizzle CSS Selector Engine
+ *  Copyright 2011, The Dojo Foundation
+ *  Released under the MIT, BSD, and GPL Licenses.
+ *  More information: http://sizzlejs.com/
+ */
+(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e<bR.length;e++){if(bR[e]===bR[e-1]){bR.splice(e--,1)}}}}return bR};by.matches=function(e,bR){return by(e,null,null,bR)};by.matchesSelector=function(e,bR){return by(bR,null,null,[e]).length>0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS<bU;bS++){bV=bE.order[bS];if((bT=bE.leftMatch[bV].exec(bX))){bR=bT[1];bT.splice(1,1);if(bR.substr(bR.length-1)!=="\\"){bT[1]=(bT[1]||"").replace(bK,"");bW=bE.find[bV](bT,e,bY);if(bW!=null){bX=bX.replace(bE.match[bV],"");break}}}}if(!bW){bW=typeof e.getElementsByTagName!=="undefined"?e.getElementsByTagName("*"):[]}return{set:bW,expr:bX}};by.filter=function(b1,b0,b4,bU){var bW,e,bZ,b6,b3,bR,bT,bV,b2,bS=b1,b5=[],bY=b0,bX=b0&&b0[0]&&by.isXML(b0[0]);while(b1&&b0.length){for(bZ in bE.filter){if((bW=bE.leftMatch[bZ].exec(b1))!=null&&bW[2]){bR=bE.filter[bZ];bT=bW[1];e=false;bW.splice(1,1);if(bT.substr(bT.length-1)==="\\"){continue}if(bY===b5){b5=[]}if(bE.preFilter[bZ]){bW=bE.preFilter[bZ](bW,bY,b4,b5,bU,bX);if(!bW){e=b6=true}else{if(bW===true){continue}}}if(bW){for(bV=0;(b3=bY[bV])!=null;bV++){if(b3){b6=bR(b3,bW,bV,bY);b2=bU^b6;if(b4&&b6!=null){if(b2){e=true}else{bY[bV]=false}}else{if(b2){b5.push(b3);e=true}}}}}if(b6!==L){if(!b4){bY=b5}b1=b1.replace(bE.match[bZ],"");if(!e){return[]}break}}}if(b1===bS){if(e==null){by.error(b1)}else{break}}bS=b1}return bY};by.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)};var bw=by.getText=function(bU){var bS,bT,e=bU.nodeType,bR="";if(e){if(e===1||e===9){if(typeof bU.textContent==="string"){return bU.textContent}else{if(typeof bU.innerText==="string"){return bU.innerText.replace(bO,"")}else{for(bU=bU.firstChild;bU;bU=bU.nextSibling){bR+=bw(bU)}}}}else{if(e===3||e===4){return bU.nodeValue}}}else{for(bS=0;(bT=bU[bS]);bS++){if(bT.nodeType!==8){bR+=bw(bT)}}}return bR};var bE=by.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(e){return e.getAttribute("href")},type:function(e){return e.getAttribute("type")}},relative:{"+":function(bW,bR){var bT=typeof bR==="string",bV=bT&&!bQ.test(bR),bX=bT&&!bV;if(bV){bR=bR.toLowerCase()}for(var bS=0,e=bW.length,bU;bS<e;bS++){if((bU=bW[bS])){while((bU=bU.previousSibling)&&bU.nodeType!==1){}bW[bS]=bX||bU&&bU.nodeName.toLowerCase()===bR?bU||false:bU===bR}}if(bX){by.filter(bR,bW,true)}},">":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS<e;bS++){bV=bW[bS];if(bV){var bT=bV.parentNode;bW[bS]=bT.nodeName.toLowerCase()===bR?bT:false}}}else{for(;bS<e;bS++){bV=bW[bS];if(bV){bW[bS]=bU?bV.parentNode:bV.parentNode===bR}}if(bU){by.filter(bR,bW,true)}}},"":function(bT,bR,bV){var bU,bS=bI++,e=bN;if(typeof bR==="string"&&!bQ.test(bR)){bR=bR.toLowerCase();bU=bR;e=bv}e("parentNode",bR,bS,bT,bU,bV)},"~":function(bT,bR,bV){var bU,bS=bI++,e=bN;if(typeof bR==="string"&&!bQ.test(bR)){bR=bR.toLowerCase();bU=bR;e=bv}e("previousSibling",bR,bS,bT,bU,bV)}},find:{ID:function(bR,bS,bT){if(typeof bS.getElementById!=="undefined"&&!bT){var e=bS.getElementById(bR[1]);return e&&e.parentNode?[e]:[]}},NAME:function(bS,bV){if(typeof bV.getElementsByName!=="undefined"){var bR=[],bU=bV.getElementsByName(bS[1]);for(var bT=0,e=bU.length;bT<e;bT++){if(bU[bT].getAttribute("name")===bS[1]){bR.push(bU[bT])}}return bR.length===0?null:bR}},TAG:function(e,bR){if(typeof bR.getElementsByTagName!=="undefined"){return bR.getElementsByTagName(e[1])}}},preFilter:{CLASS:function(bT,bR,bS,e,bW,bX){bT=" "+bT[1].replace(bK,"")+" ";if(bX){return bT}for(var bU=0,bV;(bV=bR[bU])!=null;bU++){if(bV){if(bW^(bV.className&&(" "+bV.className+" ").replace(/[\t\n\r]/g," ").indexOf(bT)>=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1},lt:function(bS,bR,e){return bR<e[3]-0},gt:function(bS,bR,e){return bR>e[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV<bU;bV++){if(bT[bV]===bS){return false}}return true}else{by.error(e)}}}},CHILD:function(bS,bU){var bT,b0,bW,bZ,e,bV,bY,bX=bU[1],bR=bS;switch(bX){case"only":case"first":while((bR=bR.previousSibling)){if(bR.nodeType===1){return false}}if(bX==="first"){return true}bR=bS;case"last":while((bR=bR.nextSibling)){if(bR.nodeType===1){return false}}return true;case"nth":bT=bU[2];b0=bU[3];if(bT===1&&b0===0){return true}bW=bU[0];bZ=bS.parentNode;if(bZ&&(bZ[bC]!==bW||!bS.nodeIndex)){bV=0;for(bR=bZ.firstChild;bR;bR=bR.nextSibling){if(bR.nodeType===1){bR.nodeIndex=++bV}}bZ[bC]=bW}bY=bS.nodeIndex-b0;if(bT===0){return bY===0}else{return(bY%bT===0&&bY/bT>=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS<e;bS++){bR.push(bU[bS])}}else{for(;bU[bS];bS++){bR.push(bU[bS])}}}return bR}}var bJ,bG;if(av.documentElement.compareDocumentPosition){bJ=function(bR,e){if(bR===e){bB=true;return 0}if(!bR.compareDocumentPosition||!e.compareDocumentPosition){return bR.compareDocumentPosition?-1:1}return bR.compareDocumentPosition(e)&4?-1:1}}else{bJ=function(bY,bX){if(bY===bX){bB=true;return 0}else{if(bY.sourceIndex&&bX.sourceIndex){return bY.sourceIndex-bX.sourceIndex}}var bV,bR,bS=[],e=[],bU=bY.parentNode,bW=bX.parentNode,bZ=bU;if(bU===bW){return bG(bY,bX)}else{if(!bU){return -1}else{if(!bW){return 1}}}while(bZ){bS.unshift(bZ);bZ=bZ.parentNode}bZ=bW;while(bZ){e.unshift(bZ);bZ=bZ.parentNode}bV=bS.length;bR=e.length;for(var bT=0;bT<bV&&bT<bR;bT++){if(bS[bT]!==e[bT]){return bG(bS[bT],e[bT])}}return bT===bV?bG(bY,e[bT],-1):bG(bS[bT],bX,1)};bG=function(bR,e,bS){if(bR===e){return bS}var bT=bR.nextSibling;while(bT){if(bT===e){return -1}bT=bT.nextSibling}return 1}}(function(){var bR=av.createElement("div"),bS="script"+(new Date()).getTime(),e=av.documentElement;bR.innerHTML="<a name='"+bS+"'/>";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="<a href='#'></a>";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="<p class='TEST'></p>";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="<div class='test e'></div><div class='test'></div>";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT<bS;bT++){var e=bZ[bT];if(e){var bU=false;e=e[bR];while(e){if(e[bC]===bV){bU=bZ[e.sizset];break}if(e.nodeType===1&&!bY){e[bC]=bV;e.sizset=bT}if(e.nodeName.toLowerCase()===bW){bU=e;break}e=e[bR]}bZ[bT]=bU}}}function bN(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT<bS;bT++){var e=bZ[bT];if(e){var bU=false;e=e[bR];while(e){if(e[bC]===bV){bU=bZ[e.sizset];break}if(e.nodeType===1){if(!bY){e[bC]=bV;e.sizset=bT}if(typeof bW!=="string"){if(e===bW){bU=true;break}}else{if(by.filter(bW,[e]).length>0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT<bR;bT++){by(bS,bY[bT],bX,bW)}return by.filter(bU,bX)};by.attr=b.attr;by.selectors.attrMap={};b.find=by;b.expr=by.selectors;b.expr[":"]=b.expr.filters;b.unique=by.uniqueSort;b.text=by.getText;b.isXMLDoc=by.isXML;b.contains=by.contains})();var ab=/Until$/,aq=/^(?:parents|prevUntil|prevAll)/,a9=/,/,bp=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,H=b.expr.match.POS,ay={children:true,contents:true,next:true,prev:true};b.fn.extend({find:function(e){var bw=this,by,bv;if(typeof e!=="string"){return b(e).filter(function(){for(by=0,bv=bw.length;by<bv;by++){if(b.contains(bw[by],this)){return true}}})}var bx=this.pushStack("","find",e),bA,bB,bz;for(by=0,bv=this.length;by<bv;by++){bA=bx.length;b.find(e,this[by],bx);if(by>0){for(bB=bA;bB<bx.length;bB++){for(bz=0;bz<bA;bz++){if(bx[bz]===bx[bB]){bx.splice(bB--,1);break}}}}}return bx},has:function(bv){var e=b(bv);return this.filter(function(){for(var bx=0,bw=e.length;bx<bw;bx++){if(b.contains(this,e[bx])){return true}}})},not:function(e){return this.pushStack(aG(this,e,false),"not",e)},filter:function(e){return this.pushStack(aG(this,e,true),"filter",e)},is:function(e){return !!e&&(typeof e==="string"?H.test(e)?b(e,this.context).index(this[0])>=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw<by.length;bw++){if(b(bz).is(by[bw])){bv.push({selector:by[bw],elem:bz,level:bB})}}bz=bz.parentNode;bB++}return bv}var bA=H.test(by)||typeof by!=="string"?b(by,bx||this.context):0;for(bw=0,e=this.length;bw<e;bw++){bz=this[bw];while(bz){if(bA?bA.index(bz)>-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/<tbody/i,W=/<|&#?\w+;/,ae=/<(?:script|style)/i,O=/<(?:script|object|embed|option|style)/i,ah=new RegExp("<(?:"+aR+")","i"),o=/checked\s*(?:[^=]|=\s*.checked.)/i,bm=/\/(java|ecma)script/i,aN=/^\s*<!(?:\[CDATA\[|\-\-)/,ax={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},ac=a(av);ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div<div>","</div>"]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1></$2>");try{for(var bw=0,bv=this.length;bw<bv;bw++){if(this[bw].nodeType===1){b.cleanData(this[bw].getElementsByTagName("*"));this[bw].innerHTML=bx}}}catch(by){this.empty().append(bx)}}else{if(b.isFunction(bx)){this.each(function(bz){var e=b(this);e.html(bx.call(this,bz,e.html()))})}else{this.empty().append(bx)}}}return this},replaceWith:function(e){if(this[0]&&this[0].parentNode){if(b.isFunction(e)){return this.each(function(bx){var bw=b(this),bv=bw.html();bw.replaceWith(e.call(this,bx,bv))})}if(typeof e!=="string"){e=b(e).detach()}return this.each(function(){var bw=this.nextSibling,bv=this.parentNode;b(this).remove();if(bw){b(bw).before(e)}else{b(bv).append(e)}})}else{return this.length?this.pushStack(b(b.isFunction(e)?e():e),"replaceWith",e):this}},detach:function(e){return this.remove(e,true)},domManip:function(bB,bF,bE){var bx,by,bA,bD,bC=bB[0],bv=[];if(!b.support.checkClone&&arguments.length===3&&typeof bC==="string"&&o.test(bC)){return this.each(function(){b(this).domManip(bB,bF,bE,true)})}if(b.isFunction(bC)){return this.each(function(bH){var bG=b(this);bB[0]=bC.call(this,bH,bF?bG.html():L);bG.domManip(bB,bF,bE)})}if(this[0]){bD=bC&&bC.parentNode;if(b.support.parentNode&&bD&&bD.nodeType===11&&bD.childNodes.length===this.length){bx={fragment:bD}}else{bx=b.buildFragment(bB,this,bv)}bA=bx.fragment;if(bA.childNodes.length===1){by=bA=bA.firstChild}else{by=bA.firstChild}if(by){bF=bF&&b.nodeName(by,"tr");for(var bw=0,e=this.length,bz=e-1;bw<e;bw++){bE.call(bF?ba(this[bw],by):this[bw],bx.cacheable||(e>1&&bw<bz)?b.clone(bA,true,true):bA)}}if(bv.length){b.each(bv,bo)}}return this}});function ba(e,bv){return b.nodeName(e,"table")?(e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody"))):e}function t(bB,bv){if(bv.nodeType!==1||!b.hasData(bB)){return}var by,bx,e,bA=b._data(bB),bz=b._data(bv,bA),bw=bA.events;if(bw){delete bz.handle;bz.events={};for(by in bw){for(bx=0,e=bw[by].length;bx<e;bx++){b.event.add(bv,by+(bw[by][bx].namespace?".":"")+bw[by][bx].namespace,bw[by][bx],bw[by][bx].data)}}}if(bz.data){bz.data=b.extend({},bz.data)}}function ai(bv,e){var bw;if(e.nodeType!==1){return}if(e.clearAttributes){e.clearAttributes()}if(e.mergeAttributes){e.mergeAttributes(bv)}bw=e.nodeName.toLowerCase();if(bw==="object"){e.outerHTML=bv.outerHTML}else{if(bw==="input"&&(bv.type==="checkbox"||bv.type==="radio")){if(bv.checked){e.defaultChecked=e.checked=bv.checked}if(e.value!==bv.value){e.value=bv.value}}else{if(bw==="option"){e.selected=bv.defaultSelected}else{if(bw==="input"||bw==="textarea"){e.defaultValue=bv.defaultValue}}}}e.removeAttribute(b.expando)}b.buildFragment=function(bz,bx,bv){var by,e,bw,bA,bB=bz[0];if(bx&&bx[0]){bA=bx[0].ownerDocument||bx[0]}if(!bA.createDocumentFragment){bA=av}if(bz.length===1&&typeof bB==="string"&&bB.length<512&&bA===av&&bB.charAt(0)==="<"&&!O.test(bB)&&(b.support.checkClone||!o.test(bB))&&(b.support.html5Clone||!ah.test(bB))){e=true;bw=b.fragments[bB];if(bw&&bw!==1){by=bw}}if(!by){by=bA.createDocumentFragment();b.clean(bz,bA,by,bv)}if(e){b.fragments[bB]=bw?by:1}return{fragment:by,cacheable:e}};b.fragments={};b.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,bv){b.fn[e]=function(bw){var bz=[],bC=b(bw),bB=this.length===1&&this[0].parentNode;if(bB&&bB.nodeType===11&&bB.childNodes.length===1&&bC.length===1){bC[bv](this[0]);return this}else{for(var bA=0,bx=bC.length;bA<bx;bA++){var by=(bA>0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1></$2>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]==="<table>"&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB<bG;bB++){E(bz[bB])}}else{E(bz)}}if(bz.nodeType){bI.push(bz)}else{bI=b.merge(bI,bz)}}if(bH){bF=function(bL){return !bL.type||bm.test(bL.type)};for(bE=0;bI[bE];bE++){if(bA&&b.nodeName(bI[bE],"script")&&(!bI[bE].type||bI[bE].type.toLowerCase()==="text/javascript")){bA.push(bI[bE].parentNode?bI[bE].parentNode.removeChild(bI[bE]):bI[bE])}else{if(bI[bE].nodeType===1){var bJ=b.grep(bI[bE].getElementsByTagName("script"),bF);bI.splice.apply(bI,[bE+1,0].concat(bJ))}bH.appendChild(bI[bE])}}}return bI},cleanData:function(bv){var by,bw,e=b.cache,bB=b.event.special,bA=b.support.deleteExpando;for(var bz=0,bx;(bx=bv[bz])!=null;bz++){if(bx.nodeName&&b.noData[bx.nodeName.toLowerCase()]){continue}bw=bx[b.expando];if(bw){by=e[bw];if(by&&by.events){for(var bC in by.events){if(bB[bC]){b.event.remove(bx,bC)}else{b.removeEvent(bx,bC,by.handle)}}if(by.handle){by.handle.elem=null}}if(bA){delete bx[b.expando]}else{if(bx.removeAttribute){bx.removeAttribute(b.expando)}}delete e[bw]}}}});function bo(e,bv){if(bv.src){b.ajax({url:bv.src,async:false,dataType:"script"})}else{b.globalEval((bv.text||bv.textContent||bv.innerHTML||"").replace(aN,"/*$0*/"))}if(bv.parentNode){bv.parentNode.removeChild(bv)}}var ak=/alpha\([^)]*\)/i,au=/opacity=([^)]*)/,z=/([A-Z]|^ms)/g,bc=/^-?\d+(?:px)?$/i,bn=/^-?\d/,I=/^([\-+])=([\-+.\de]+)/,a7={position:"absolute",visibility:"hidden",display:"block"},an=["Left","Right"],a1=["Top","Bottom"],Z,aI,aX;b.fn.css=function(e,bv){if(arguments.length===2&&bv===L){return this}return b.access(this,e,bv,true,function(bx,bw,by){return by!==L?b.style(bx,bw,by):b.css(bx,bw)})};b.extend({cssHooks:{opacity:{get:function(bw,bv){if(bv){var e=Z(bw,"opacity","opacity");return e===""?"1":e}else{return bw.style.opacity}}}},cssNumber:{fillOpacity:true,fontWeight:true,lineHeight:true,opacity:true,orphans:true,widows:true,zIndex:true,zoom:true},cssProps:{"float":b.support.cssFloat?"cssFloat":"styleFloat"},style:function(bx,bw,bD,by){if(!bx||bx.nodeType===3||bx.nodeType===8||!bx.style){return}var bB,bC,bz=b.camelCase(bw),bv=bx.style,bE=b.cssHooks[bz];bw=b.cssProps[bz]||bz;if(bD!==L){bC=typeof bD;if(bC==="string"&&(bB=I.exec(bD))){bD=(+(bB[1]+1)*+bB[2])+parseFloat(b.css(bx,bw));bC="number"}if(bD==null||bC==="number"&&isNaN(bD)){return}if(bC==="number"&&!b.cssNumber[bz]){bD+="px"}if(!bE||!("set" in bE)||(bD=bE.set(bx,bD))!==L){try{bv[bw]=bD}catch(bA){}}}else{if(bE&&"get" in bE&&(bB=bE.get(bx,false,by))!==L){return bB}return bv[bw]}},css:function(by,bx,bv){var bw,e;bx=b.camelCase(bx);e=b.cssHooks[bx];bx=b.cssProps[bx]||bx;if(bx==="cssFloat"){bx="float"}if(e&&"get" in e&&(bw=e.get(by,true,bv))!==L){return bw}else{if(Z){return Z(by,bx)}}},swap:function(bx,bw,by){var e={};for(var bv in bw){e[bv]=bx.style[bv];bx.style[bv]=bw[bv]}by.call(bx);for(bv in bw){bx.style[bv]=e[bv]}}});b.curCSS=b.css;b.each(["height","width"],function(bv,e){b.cssHooks[e]={get:function(by,bx,bw){var bz;if(bx){if(by.offsetWidth!==0){return p(by,e,bw)}else{b.swap(by,a7,function(){bz=p(by,e,bw)})}return bz}},set:function(bw,bx){if(bc.test(bx)){bx=parseFloat(bx);if(bx>=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length;if(bA>0){if(bv!=="border"){for(;bx<e;bx++){if(!bv){bA-=parseFloat(b.css(by,"padding"+bz[bx]))||0}if(bv==="margin"){bA+=parseFloat(b.css(by,bv+bz[bx]))||0}else{bA-=parseFloat(b.css(by,"border"+bz[bx]+"Width"))||0}}}return bA+"px"}bA=Z(by,bw,bw);if(bA<0||bA==null){bA=by.style[bw]||0}bA=parseFloat(bA)||0;if(bv){for(;bx<e;bx++){bA+=parseFloat(b.css(by,"padding"+bz[bx]))||0;if(bv!=="padding"){bA+=parseFloat(b.css(by,"border"+bz[bx]+"Width"))||0}if(bv==="margin"){bA+=parseFloat(b.css(by,bv+bz[bx]))||0}}}return bA+"px"}if(b.expr&&b.expr.filters){b.expr.filters.hidden=function(bw){var bv=bw.offsetWidth,e=bw.offsetHeight;return(bv===0&&e===0)||(!b.support.reliableHiddenOffsets&&((bw.style&&bw.style.display)||b.css(bw,"display"))==="none")};b.expr.filters.visible=function(e){return !b.expr.filters.hidden(e)}}var k=/%20/g,ap=/\[\]$/,bs=/\r?\n/g,bq=/#.*$/,aD=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,aZ=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,aM=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,aQ=/^(?:GET|HEAD)$/,c=/^\/\//,M=/\?/,a6=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw<bz;bw++){bv=bx[bw];bC=/^\+/.test(bv);if(bC){bv=bv.substr(1)||"*"}bB=e[bv]=e[bv]||[];bB[bC?"unshift":"push"](bA)}}}}function aW(bv,bE,bz,bD,bB,bx){bB=bB||bE.dataTypes[0];bx=bx||{};bx[bB]=true;var bA=bv[bB],bw=0,e=bA?bA.length:0,by=(bv===aa),bC;for(;bw<e&&(by||!bC);bw++){bC=bA[bw](bE,bz,bD);if(typeof bC==="string"){if(!by||bx[bC]){bC=L}else{bE.dataTypes.unshift(bC);bC=aW(bv,bE,bz,bD,bC,bx)}}}if((by||!bC)&&!bx["*"]){bC=aW(bv,bE,bz,bD,"*",bx)}return bC}function am(bw,bx){var bv,e,by=b.ajaxSettings.flatOptions||{};for(bv in bx){if(bx[bv]!==L){(by[bv]?bw:(e||(e={})))[bv]=bx[bv]}}if(e){b.extend(true,bw,e)}}b.fn.extend({load:function(bw,bz,bA){if(typeof bw!=="string"&&A){return A.apply(this,arguments)}else{if(!this.length){return this}}var by=bw.indexOf(" ");if(by>=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("<div>").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA<bw;bA++){if(bA===1){for(bE in bH.converters){if(typeof bE==="string"){bG[bE.toLowerCase()]=bH.converters[bE]}}}bx=bC;bC=bD[bA];if(bC==="*"){bC=bx}else{if(bx!=="*"&&bx!==bC){by=bx+" "+bC;bF=bG[by]||bG["* "+bC];if(!bF){e=L;for(bv in bG){bB=bv.split(" ");if(bB[0]===bx||bB[0]==="*"){e=bG[bB[1]+" "+bC];if(e){bv=bG[bv];if(bv===true){bF=e}else{if(e===true){bF=bv}}break}}}}if(!(bF||e)){b.error("No conversion from "+by.replace(" "," to "))}if(bF!==true){bz=bF?bF(bz):e(bv(bz))}}}}return bz}var aC=b.now(),u=/(\=)\?(&|$)|\?\?/i;b.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return b.expando+"_"+(aC++)}});b.ajaxPrefilter("json jsonp",function(bD,bA,bC){var bx=bD.contentType==="application/x-www-form-urlencoded"&&(typeof bD.data==="string");if(bD.dataTypes[0]==="jsonp"||bD.jsonp!==false&&(u.test(bD.url)||bx&&u.test(bD.data))){var bB,bw=bD.jsonpCallback=b.isFunction(bD.jsonpCallback)?bD.jsonpCallback():bD.jsonpCallback,bz=bb[bw],e=bD.url,by=bD.data,bv="$1"+bw+"$2";if(bD.jsonp!==false){e=e.replace(u,bv);if(bD.url===e){if(bx){by=by.replace(u,bv)}if(bD.data===by){e+=(/\?/.test(e)?"&":"?")+bD.jsonp+"="+bw}}}bD.url=e;bD.data=by;bb[bw]=function(bE){bB=[bE]};bC.always(function(){bb[bw]=bz;if(bB&&b.isFunction(bz)){bb[bw](bB[0])}});bD.converters["script json"]=function(){if(!bB){b.error(bw+" was not called")}return bB[0]};bD.dataTypes[0]="json";return"script"}});b.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(e){b.globalEval(e);return e}}});b.ajaxPrefilter("script",function(e){if(e.cache===L){e.cache=false}if(e.crossDomain){e.type="GET";e.global=false}});b.ajaxTransport("script",function(bw){if(bw.crossDomain){var e,bv=av.head||av.getElementsByTagName("head")[0]||av.documentElement;return{send:function(bx,by){e=av.createElement("script");e.async="async";if(bw.scriptCharset){e.charset=bw.scriptCharset}e.src=bw.url;e.onload=e.onreadystatechange=function(bA,bz){if(bz||!e.readyState||/loaded|complete/.test(e.readyState)){e.onload=e.onreadystatechange=null;if(bv&&e.parentNode){bv.removeChild(e)}e=L;if(!bz){by(200,"success")}}};bv.insertBefore(e,bv.firstChild)},abort:function(){if(e){e.onload(0,1)}}}}});var B=bb.ActiveXObject?function(){for(var e in N){N[e](0,1)}}:false,y=0,N;function aL(){try{return new bb.XMLHttpRequest()}catch(bv){}}function aj(){try{return new bb.ActiveXObject("Microsoft.XMLHTTP")}catch(bv){}}b.ajaxSettings.xhr=bb.ActiveXObject?function(){return !this.isLocal&&aL()||aj()}:aL;(function(e){b.extend(b.support,{ajax:!!e,cors:!!e&&("withCredentials" in e)})})(b.ajaxSettings.xhr());if(b.support.ajax){b.ajaxTransport(function(e){if(!e.crossDomain||b.support.cors){var bv;return{send:function(bB,bw){var bA=e.xhr(),bz,by;if(e.username){bA.open(e.type,e.url,e.async,e.username,e.password)}else{bA.open(e.type,e.url,e.async)}if(e.xhrFields){for(by in e.xhrFields){bA[by]=e.xhrFields[by]}}if(e.mimeType&&bA.overrideMimeType){bA.overrideMimeType(e.mimeType)}if(!e.crossDomain&&!bB["X-Requested-With"]){bB["X-Requested-With"]="XMLHttpRequest"}try{for(by in bB){bA.setRequestHeader(by,bB[by])}}catch(bx){}bA.send((e.hasContent&&e.data)||null);bv=function(bK,bE){var bF,bD,bC,bI,bH;try{if(bv&&(bE||bA.readyState===4)){bv=L;if(bz){bA.onreadystatechange=b.noop;if(B){delete N[bz]}}if(bE){if(bA.readyState!==4){bA.abort()}}else{bF=bA.status;bC=bA.getAllResponseHeaders();bI={};bH=bA.responseXML;if(bH&&bH.documentElement){bI.xml=bH}bI.text=bA.responseText;try{bD=bA.statusText}catch(bJ){bD=""}if(!bF&&e.isLocal&&!e.crossDomain){bF=bI.text?200:404}else{if(bF===1223){bF=204}}}}}catch(bG){if(!bE){bw(-1,bG)}}if(bI){bw(bF,bD,bI,bC)}};if(!e.async||bA.readyState===4){bv()}else{bz=++y;if(B){if(!N){N={};b(bb).unload(B)}N[bz]=bv}bA.onreadystatechange=bv}},abort:function(){if(bv){bv(0,1)}}}}})}var Q={},a8,m,aB=/^(?:toggle|show|hide)$/,aT=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,a3,aH=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],a4;b.fn.extend({show:function(bx,bA,bz){var bw,by;if(bx||bx===0){return this.animate(a0("show",3),bx,bA,bz)}else{for(var bv=0,e=this.length;bv<e;bv++){bw=this[bv];if(bw.style){by=bw.style.display;if(!b._data(bw,"olddisplay")&&by==="none"){by=bw.style.display=""}if(by===""&&b.css(bw,"display")==="none"){b._data(bw,"olddisplay",x(bw.nodeName))}}}for(bv=0;bv<e;bv++){bw=this[bv];if(bw.style){by=bw.style.display;if(by===""||by==="none"){bw.style.display=b._data(bw,"olddisplay")||""}}}return this}},hide:function(bx,bA,bz){if(bx||bx===0){return this.animate(a0("hide",3),bx,bA,bz)}else{var bw,by,bv=0,e=this.length;for(;bv<e;bv++){bw=this[bv];if(bw.style){by=b.css(bw,"display");if(by!=="none"&&!b._data(bw,"olddisplay")){b._data(bw,"olddisplay",by)}}}for(bv=0;bv<e;bv++){if(this[bv].style){this[bv].style.display="none"}}return this}},_toggle:b.fn.toggle,toggle:function(bw,bv,bx){var e=typeof bw==="boolean";if(b.isFunction(bw)&&b.isFunction(bv)){this._toggle.apply(this,arguments)}else{if(bw==null||e){this.each(function(){var by=e?bw:b(this).is(":hidden");b(this)[by?"show":"hide"]()})}else{this.animate(a0("toggle",3),bw,bv,bx)}}return this},fadeTo:function(e,bx,bw,bv){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:bx},e,bw,bv)},animate:function(bz,bw,by,bx){var e=b.speed(bw,by,bx);if(b.isEmptyObject(bz)){return this.each(e.complete,[false])}bz=b.extend({},bz);function bv(){if(e.queue===false){b._mark(this)}var bE=b.extend({},e),bK=this.nodeType===1,bI=bK&&b(this).is(":hidden"),bB,bF,bD,bJ,bH,bC,bG,bL,bA;bE.animatedProperties={};for(bD in bz){bB=b.camelCase(bD);if(bD!==bB){bz[bB]=bz[bD];delete bz[bD]}bF=bz[bB];if(b.isArray(bF)){bE.animatedProperties[bB]=bF[1];bF=bz[bB]=bF[0]}else{bE.animatedProperties[bB]=bE.specialEasing&&bE.specialEasing[bB]||bE.easing||"swing"}if(bF==="hide"&&bI||bF==="show"&&!bI){return bE.complete.call(this)}if(bK&&(bB==="height"||bB==="width")){bE.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY];if(b.css(this,"display")==="inline"&&b.css(this,"float")==="none"){if(!b.support.inlineBlockNeedsLayout||x(this.nodeName)==="inline"){this.style.display="inline-block"}else{this.style.zoom=1}}}}if(bE.overflow!=null){this.style.overflow="hidden"}for(bD in bz){bJ=new b.fx(this,bE,bD);bF=bz[bD];if(aB.test(bF)){bA=b._data(this,"toggle"+bD)||(bF==="toggle"?bI?"show":"hide":0);if(bA){b._data(this,"toggle"+bD,bA==="show"?"hide":"show");bJ[bA]()}else{bJ[bF]()}}else{bH=aT.exec(bF);bC=bJ.cur();if(bH){bG=parseFloat(bH[2]);bL=bH[3]||(b.cssNumber[bD]?"":"px");if(bL!=="px"){b.style(this,bD,(bG||1)+bL);bC=((bG||1)/bJ.cur())*bC;b.style(this,bD,bC+bL)}if(bH[1]){bG=((bH[1]==="-="?-1:1)*bG)+bC}bJ.custom(bC,bG,bL)}else{bJ.custom(bC,bF,"")}}}return true}return e.queue===false?this.each(bv):this.queue(e.queue,bv)},stop:function(bw,bv,e){if(typeof bw!=="string"){e=bv;bv=bw;bw=L}if(bv&&bw!==false){this.queue(bw||"fx",[])}return this.each(function(){var bx,by=false,bA=b.timers,bz=b._data(this);if(!e){b._unmark(true,this)}function bB(bE,bF,bD){var bC=bF[bD];b.removeData(bE,bD,true);bC.stop(e)}if(bw==null){for(bx in bz){if(bz[bx]&&bz[bx].stop&&bx.indexOf(".run")===bx.length-4){bB(this,bz,bx)}}}else{if(bz[bx=bw+".run"]&&bz[bx].stop){bB(this,bz,bx)}}for(bx=bA.length;bx--;){if(bA[bx].elem===this&&(bw==null||bA[bx].queue===bw)){if(e){bA[bx](true)}else{bA[bx].saveState()}by=true;bA.splice(bx,1)}}if(!(e&&by)){b.dequeue(this,bw)}})}});function bh(){setTimeout(at,0);return(a4=b.now())}function at(){a4=L}function a0(bv,e){var bw={};b.each(aH.concat.apply([],aH.slice(0,e)),function(){bw[this]=bv});return bw}b.each({slideDown:a0("show",1),slideUp:a0("hide",1),slideToggle:a0("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,bv){b.fn[e]=function(bw,by,bx){return this.animate(bv,bw,by,bx)}});b.extend({speed:function(bw,bx,bv){var e=bw&&typeof bw==="object"?b.extend({},bw):{complete:bv||!bv&&bx||b.isFunction(bw)&&bw,duration:bw,easing:bv&&bx||bx&&!b.isFunction(bx)&&bx};e.duration=b.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in b.fx.speeds?b.fx.speeds[e.duration]:b.fx.speeds._default;if(e.queue==null||e.queue===true){e.queue="fx"}e.old=e.complete;e.complete=function(by){if(b.isFunction(e.old)){e.old.call(this)}if(e.queue){b.dequeue(this,e.queue)}else{if(by!==false){b._unmark(this)}}};return e},easing:{linear:function(bw,bx,e,bv){return e+bv*bw},swing:function(bw,bx,e,bv){return((-Math.cos(bw*Math.PI)/2)+0.5)*bv+e}},timers:[],fx:function(bv,e,bw){this.options=e;this.elem=bv;this.prop=bw;e.orig=e.orig||{}}});b.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(b.fx.step[this.prop]||b.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var e,bv=b.css(this.elem,this.prop);return isNaN(e=parseFloat(bv))?!bv||bv==="auto"?0:bv:e},custom:function(bz,by,bx){var e=this,bw=b.fx;this.startTime=a4||bh();this.end=by;this.now=this.start=bz;this.pos=this.state=0;this.unit=bx||this.unit||(b.cssNumber[this.prop]?"":"px");function bv(bA){return e.step(bA)}bv.queue=this.options.queue;bv.elem=this.elem;bv.saveState=function(){if(e.options.hide&&b._data(e.elem,"fxshow"+e.prop)===L){b._data(e.elem,"fxshow"+e.prop,e.start)}};if(bv()&&b.timers.push(bv)&&!a3){a3=setInterval(bw.tick,bw.interval)}},show:function(){var e=b._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=e||b.style(this.elem,this.prop);this.options.show=true;if(e!==L){this.custom(this.cur(),e)}else{this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur())}b(this.elem).show()},hide:function(){this.options.orig[this.prop]=b._data(this.elem,"fxshow"+this.prop)||b.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(by){var bA,bB,bv,bx=a4||bh(),e=true,bz=this.elem,bw=this.options;if(by||bx>=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e<bv.length;e++){bw=bv[e];if(!bw()&&bv[e]===bw){bv.splice(e--,1)}}if(!bv.length){b.fx.stop()}},interval:13,stop:function(){clearInterval(a3);a3=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(e){b.style(e.elem,"opacity",e.now)},_default:function(e){if(e.elem.style&&e.elem.style[e.prop]!=null){e.elem.style[e.prop]=e.now+e.unit}else{e.elem[e.prop]=e.now}}}});b.each(["width","height"],function(e,bv){b.fx.step[bv]=function(bw){b.style(bw.elem,bv,Math.max(0,bw.now)+bw.unit)}});if(b.expr&&b.expr.filters){b.expr.filters.animated=function(e){return b.grep(b.timers,function(bv){return e===bv.elem}).length}}function x(bx){if(!Q[bx]){var e=av.body,bv=b("<"+bx+">").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b})}})(window);/*!
+ * jQuery UI 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI
+ */
+(function(a,d){a.ui=a.ui||{};if(a.ui.version){return}a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(e,f){return typeof e==="number"?this.each(function(){var g=this;setTimeout(function(){a(g).focus();if(f){f.call(g)}},e)}):this._focus.apply(this,arguments)},scrollParent:function(){var e;if((a.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){e=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(a.curCSS(this,"position",1))&&(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}else{e=this.parents().filter(function(){return(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!e.length?a(document):e},zIndex:function(h){if(h!==d){return this.css("zIndex",h)}if(this.length){var f=a(this[0]),e,g;while(f.length&&f[0]!==document){e=f.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){g=parseInt(f.css("zIndex"),10);if(!isNaN(g)&&g!==0){return g}}f=f.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});a.each(["Width","Height"],function(g,e){var f=e==="Width"?["Left","Right"]:["Top","Bottom"],h=e.toLowerCase(),k={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};function j(m,l,i,n){a.each(f,function(){l-=parseFloat(a.curCSS(m,"padding"+this,true))||0;if(i){l-=parseFloat(a.curCSS(m,"border"+this+"Width",true))||0}if(n){l-=parseFloat(a.curCSS(m,"margin"+this,true))||0}});return l}a.fn["inner"+e]=function(i){if(i===d){return k["inner"+e].call(this)}return this.each(function(){a(this).css(h,j(this,i)+"px")})};a.fn["outer"+e]=function(i,l){if(typeof i!=="number"){return k["outer"+e].call(this,i)}return this.each(function(){a(this).css(h,j(this,i,true,l)+"px")})}});function c(g,e){var j=g.nodeName.toLowerCase();if("area"===j){var i=g.parentNode,h=i.name,f;if(!g.href||!h||i.nodeName.toLowerCase()!=="map"){return false}f=a("img[usemap=#"+h+"]")[0];return !!f&&b(f)}return(/input|select|textarea|button|object/.test(j)?!g.disabled:"a"==j?g.href||e:e)&&b(g)}function b(e){return !a(e).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.extend(a.expr[":"],{data:function(g,f,e){return !!a.data(g,e[3])},focusable:function(e){return c(e,!isNaN(a.attr(e,"tabindex")))},tabbable:function(g){var e=a.attr(g,"tabindex"),f=isNaN(e);return(f||e>=0)&&c(g,!f)}});a(function(){var e=document.body,f=e.appendChild(f=document.createElement("div"));f.offsetHeight;a.extend(f.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});a.support.minHeight=f.offsetHeight===100;a.support.selectstart="onselectstart" in f;e.removeChild(f).style.display="none"});a.extend(a.ui,{plugin:{add:function(f,g,j){var h=a.ui[f].prototype;for(var e in j){h.plugins[e]=h.plugins[e]||[];h.plugins[e].push([g,j[e]])}},call:function(e,g,f){var j=e.plugins[g];if(!j||!e.element[0].parentNode){return}for(var h=0;h<j.length;h++){if(e.options[j[h][0]]){j[h][1].apply(e.element,f)}}}},contains:function(f,e){return document.compareDocumentPosition?f.compareDocumentPosition(e)&16:f!==e&&f.contains(e)},hasScroll:function(h,f){if(a(h).css("overflow")==="hidden"){return false}var e=(f&&f==="left")?"scrollLeft":"scrollTop",g=false;if(h[e]>0){return true}h[e]=1;g=(h[e]>0);h[e]=0;return g},isOverAxis:function(f,e,g){return(f>e)&&(f<(e+g))},isOver:function(j,f,i,h,e,g){return a.ui.isOverAxis(j,i,e)&&a.ui.isOverAxis(f,h,g)}})})(jQuery);/*!
+ * jQuery UI Widget 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Widget
+ */
+(function(b,d){if(b.cleanData){var c=b.cleanData;b.cleanData=function(f){for(var g=0,h;(h=f[g])!=null;g++){try{b(h).triggerHandler("remove")}catch(j){}}c(f)}}else{var a=b.fn.remove;b.fn.remove=function(e,f){return this.each(function(){if(!f){if(!e||b.filter(e,[this]).length){b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(g){}})}}return a.call(b(this),e,f)})}}b.widget=function(f,h,e){var g=f.split(".")[0],j;f=f.split(".")[1];j=g+"-"+f;if(!e){e=h;h=b.Widget}b.expr[":"][j]=function(k){return !!b.data(k,f)};b[g]=b[g]||{};b[g][f]=function(k,l){if(arguments.length){this._createWidget(k,l)}};var i=new h();i.options=b.extend(true,{},i.options);b[g][f].prototype=b.extend(true,i,{namespace:g,widgetName:f,widgetEventPrefix:b[g][f].prototype.widgetEventPrefix||f,widgetBaseClass:j},e);b.widget.bridge(f,b[g][f])};b.widget.bridge=function(f,e){b.fn[f]=function(i){var g=typeof i==="string",h=Array.prototype.slice.call(arguments,1),j=this;i=!g&&h.length?b.extend.apply(null,[true,i].concat(h)):i;if(g&&i.charAt(0)==="_"){return j}if(g){this.each(function(){var k=b.data(this,f),l=k&&b.isFunction(k[i])?k[i].apply(k,h):k;if(l!==k&&l!==d){j=l;return false}})}else{this.each(function(){var k=b.data(this,f);if(k){k.option(i||{})._init()}else{b.data(this,f,new e(i,this))}})}return j}};b.Widget=function(e,f){if(arguments.length){this._createWidget(e,f)}};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(f,g){b.data(g,this.widgetName,this);this.element=b(g);this.options=b.extend(true,{},this.options,this._getCreateOptions(),f);var e=this;this.element.bind("remove."+this.widgetName,function(){e.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(f,g){var e=f;if(arguments.length===0){return b.extend({},this.options)}if(typeof f==="string"){if(g===d){return this.options[f]}e={};e[f]=g}this._setOptions(e);return this},_setOptions:function(f){var e=this;b.each(f,function(g,h){e._setOption(g,h)});return this},_setOption:function(e,f){this.options[e]=f;if(e==="disabled"){this.widget()[f?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",f)}return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(e,f,g){var j,i,h=this.options[e];g=g||{};f=b.Event(f);f.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase();f.target=this.element[0];i=f.originalEvent;if(i){for(j in i){if(!(j in f)){f[j]=i[j]}}}this.element.trigger(f,g);return !(b.isFunction(h)&&h.call(this.element[0],f,g)===false||f.isDefaultPrevented())}}})(jQuery);/*!
+ * jQuery UI Mouse 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Mouse
+ *
+ * Depends:
+ *	jquery.ui.widget.js
+ */
+(function(b,c){var a=false;b(document).mouseup(function(d){a=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var d=this;this.element.bind("mousedown."+this.widgetName,function(e){return d._mouseDown(e)}).bind("click."+this.widgetName,function(e){if(true===b.data(e.target,d.widgetName+".preventClickEvent")){b.removeData(e.target,d.widgetName+".preventClickEvent");e.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(f){if(a){return}(this._mouseStarted&&this._mouseUp(f));this._mouseDownEvent=f;var e=this,g=(f.which==1),d=(typeof this.options.cancel=="string"&&f.target.nodeName?b(f.target).closest(this.options.cancel).length:false);if(!g||d||!this._mouseCapture(f)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(f)&&this._mouseDelayMet(f)){this._mouseStarted=(this._mouseStart(f)!==false);if(!this._mouseStarted){f.preventDefault();return true}}if(true===b.data(f.target,this.widgetName+".preventClickEvent")){b.removeData(f.target,this.widgetName+".preventClickEvent")}this._mouseMoveDelegate=function(h){return e._mouseMove(h)};this._mouseUpDelegate=function(h){return e._mouseUp(h)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);f.preventDefault();a=true;return true},_mouseMove:function(d){if(b.browser.msie&&!(document.documentMode>=9)&&!d.button){return this._mouseUp(d)}if(this._mouseStarted){this._mouseDrag(d);return d.preventDefault()}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,d)!==false);(this._mouseStarted?this._mouseDrag(d):this._mouseUp(d))}return !this._mouseStarted},_mouseUp:function(d){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;if(d.target==this._mouseDownEvent.target){b.data(d.target,this.widgetName+".preventClickEvent",true)}this._mouseStop(d)}return false},_mouseDistanceMet:function(d){return(Math.max(Math.abs(this._mouseDownEvent.pageX-d.pageX),Math.abs(this._mouseDownEvent.pageY-d.pageY))>=this.options.distance)},_mouseDelayMet:function(d){return this.mouseDelayMet},_mouseStart:function(d){},_mouseDrag:function(d){},_mouseStop:function(d){},_mouseCapture:function(d){return true}})})(jQuery);(function(c,d){c.widget("ui.resizable",c.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000},_create:function(){var f=this,k=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(k.aspectRatio),aspectRatio:k.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:k.helper||k.ghost||k.animate?k.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){this.element.wrap(c('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=k.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var l=this.handles.split(",");this.handles={};for(var g=0;g<l.length;g++){var j=c.trim(l[g]),e="ui-resizable-"+j;var h=c('<div class="ui-resizable-handle '+e+'"></div>');if(/sw|se|ne|nw/.test(j)){h.css({zIndex:++k.zIndex})}if("se"==j){h.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[j]=".ui-resizable-"+j;this.element.append(h)}}this._renderAxis=function(q){q=q||this.element;for(var n in this.handles){if(this.handles[n].constructor==String){this.handles[n]=c(this.handles[n],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=c(this.handles[n],this.element),p=0;p=/sw|ne|nw|se|n|s/.test(n)?o.outerHeight():o.outerWidth();var m=["padding",/ne|nw|n/.test(n)?"Top":/se|sw|s/.test(n)?"Bottom":/^e$/.test(n)?"Right":"Left"].join("");q.css(m,p);this._proportionallyResize()}if(!c(this.handles[n]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!f.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}f.axis=i&&i[1]?i[1]:"se"}});if(k.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){if(k.disabled){return}c(this).removeClass("ui-resizable-autohide");f._handles.show()},function(){if(k.disabled){return}if(!f.resizing){c(this).addClass("ui-resizable-autohide");f._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var e=function(g){c(g).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){e(this.element);var f=this.element;f.after(this.originalElement.css({position:f.css("position"),width:f.outerWidth(),height:f.outerHeight(),top:f.css("top"),left:f.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(f){var g=false;for(var e in this.handles){if(c(this.handles[e])[0]==f.target){g=true}}return !this.options.disabled&&g},_mouseStart:function(g){var j=this.options,f=this.element.position(),e=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(e.is(".ui-draggable")||(/absolute/).test(e.css("position"))){e.css({position:"absolute",top:f.top,left:f.left})}this._renderProxy();var k=b(this.helper.css("left")),h=b(this.helper.css("top"));if(j.containment){k+=c(j.containment).scrollLeft()||0;h+=c(j.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:k,top:h};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:k,top:h};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:g.pageX,top:g.pageY};this.aspectRatio=(typeof j.aspectRatio=="number")?j.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var i=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",i=="auto"?this.axis+"-resize":i);e.addClass("ui-resizable-resizing");this._propagate("start",g);return true},_mouseDrag:function(e){var h=this.helper,g=this.options,m={},q=this,j=this.originalMousePosition,n=this.axis;var r=(e.pageX-j.left)||0,p=(e.pageY-j.top)||0;var i=this._change[n];if(!i){return false}var l=i.apply(this,[e,r,p]),k=c.browser.msie&&c.browser.version<7,f=this.sizeDiff;this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey){l=this._updateRatio(l,e)}l=this._respectSize(l,e);this._propagate("resize",e);h.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(l);this._trigger("resize",e,this.ui());return false},_mouseStop:function(h){this.resizing=false;var i=this.options,m=this;if(this._helper){var g=this._proportionallyResizeElements,e=g.length&&(/textarea/i).test(g[0].nodeName),f=e&&c.ui.hasScroll(g[0],"left")?0:m.sizeDiff.height,k=e?0:m.sizeDiff.width;var n={width:(m.helper.width()-k),height:(m.helper.height()-f)},j=(parseInt(m.element.css("left"),10)+(m.position.left-m.originalPosition.left))||null,l=(parseInt(m.element.css("top"),10)+(m.position.top-m.originalPosition.top))||null;if(!i.animate){this.element.css(c.extend(n,{top:l,left:j}))}m.helper.height(m.size.height);m.helper.width(m.size.width);if(this._helper&&!i.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",h);if(this._helper){this.helper.remove()}return false},_updateVirtualBoundaries:function(g){var j=this.options,i,h,f,k,e;e={minWidth:a(j.minWidth)?j.minWidth:0,maxWidth:a(j.maxWidth)?j.maxWidth:Infinity,minHeight:a(j.minHeight)?j.minHeight:0,maxHeight:a(j.maxHeight)?j.maxHeight:Infinity};if(this._aspectRatio||g){i=e.minHeight*this.aspectRatio;f=e.minWidth/this.aspectRatio;h=e.maxHeight*this.aspectRatio;k=e.maxWidth/this.aspectRatio;if(i>e.minWidth){e.minWidth=i}if(f>e.minHeight){e.minHeight=f}if(h<e.maxWidth){e.maxWidth=h}if(k<e.maxHeight){e.maxHeight=k}}this._vBoundaries=e},_updateCache:function(e){var f=this.options;this.offset=this.helper.offset();if(a(e.left)){this.position.left=e.left}if(a(e.top)){this.position.top=e.top}if(a(e.height)){this.size.height=e.height}if(a(e.width)){this.size.width=e.width}},_updateRatio:function(h,g){var i=this.options,j=this.position,f=this.size,e=this.axis;if(a(h.height)){h.width=(h.height*this.aspectRatio)}else{if(a(h.width)){h.height=(h.width/this.aspectRatio)}}if(e=="sw"){h.left=j.left+(f.width-h.width);h.top=null}if(e=="nw"){h.top=j.top+(f.height-h.height);h.left=j.left+(f.width-h.width)}return h},_respectSize:function(l,g){var j=this.helper,i=this._vBoundaries,r=this._aspectRatio||g.shiftKey,q=this.axis,t=a(l.width)&&i.maxWidth&&(i.maxWidth<l.width),m=a(l.height)&&i.maxHeight&&(i.maxHeight<l.height),h=a(l.width)&&i.minWidth&&(i.minWidth>l.width),s=a(l.height)&&i.minHeight&&(i.minHeight>l.height);if(h){l.width=i.minWidth}if(s){l.height=i.minHeight}if(t){l.width=i.maxWidth}if(m){l.height=i.maxHeight}var f=this.originalPosition.left+this.originalSize.width,p=this.position.top+this.size.height;var k=/sw|nw|w/.test(q),e=/nw|ne|n/.test(q);if(h&&k){l.left=f-i.minWidth}if(t&&k){l.left=f-i.maxWidth}if(s&&e){l.top=p-i.minHeight}if(m&&e){l.top=p-i.maxHeight}var n=!l.width&&!l.height;if(n&&!l.left&&l.top){l.top=null}else{if(n&&!l.top&&l.left){l.left=null}}return l},_proportionallyResize:function(){var k=this.options;if(!this._proportionallyResizeElements.length){return}var g=this.helper||this.element;for(var f=0;f<this._proportionallyResizeElements.length;f++){var h=this._proportionallyResizeElements[f];if(!this.borderDif){var e=[h.css("borderTopWidth"),h.css("borderRightWidth"),h.css("borderBottomWidth"),h.css("borderLeftWidth")],j=[h.css("paddingTop"),h.css("paddingRight"),h.css("paddingBottom"),h.css("paddingLeft")];this.borderDif=c.map(e,function(l,n){var m=parseInt(l,10)||0,o=parseInt(j[n],10)||0;return m+o})}if(c.browser.msie&&!(!(c(g).is(":hidden")||c(g).parents(":hidden").length))){continue}h.css({height:(g.height()-this.borderDif[0]-this.borderDif[2])||0,width:(g.width()-this.borderDif[1]-this.borderDif[3])||0})}},_renderProxy:function(){var f=this.element,i=this.options;this.elementOffset=f.offset();if(this._helper){this.helper=this.helper||c('<div style="overflow:hidden;"></div>');var e=c.browser.msie&&c.browser.version<7,g=(e?1:0),h=(e?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+h,height:this.element.outerHeight()+h,position:"absolute",left:this.elementOffset.left-g+"px",top:this.elementOffset.top-g+"px",zIndex:++i.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(g,f,e){return{width:this.originalSize.width+f}},w:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{left:i.left+f,width:g.width-f}},n:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{top:i.top+e,height:g.height-e}},s:function(g,f,e){return{height:this.originalSize.height+e}},se:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},sw:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[g,f,e]))},ne:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},nw:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[g,f,e]))}},_propagate:function(f,e){c.ui.plugin.call(this,f,[e,this.ui()]);(f!="resize"&&this._trigger(f,e,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});c.extend(c.ui.resizable,{version:"1.8.18"});c.ui.plugin.add("resizable","alsoResize",{start:function(f,g){var e=c(this).data("resizable"),i=e.options;var h=function(j){c(j).each(function(){var k=c(this);k.data("resizable-alsoresize",{width:parseInt(k.width(),10),height:parseInt(k.height(),10),left:parseInt(k.css("left"),10),top:parseInt(k.css("top"),10)})})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.parentNode){if(i.alsoResize.length){i.alsoResize=i.alsoResize[0];h(i.alsoResize)}else{c.each(i.alsoResize,function(j){h(j)})}}else{h(i.alsoResize)}},resize:function(g,i){var f=c(this).data("resizable"),j=f.options,h=f.originalSize,l=f.originalPosition;var k={height:(f.size.height-h.height)||0,width:(f.size.width-h.width)||0,top:(f.position.top-l.top)||0,left:(f.position.left-l.left)||0},e=function(m,n){c(m).each(function(){var q=c(this),r=c(this).data("resizable-alsoresize"),p={},o=n&&n.length?n:q.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];c.each(o,function(s,u){var t=(r[u]||0)+(k[u]||0);if(t&&t>=0){p[u]=t||null}});q.css(p)})};if(typeof(j.alsoResize)=="object"&&!j.alsoResize.nodeType){c.each(j.alsoResize,function(m,n){e(m,n)})}else{e(j.alsoResize)}},stop:function(e,f){c(this).removeData("resizable-alsoresize")}});c.ui.plugin.add("resizable","animate",{stop:function(i,n){var p=c(this).data("resizable"),j=p.options;var h=p._proportionallyResizeElements,e=h.length&&(/textarea/i).test(h[0].nodeName),f=e&&c.ui.hasScroll(h[0],"left")?0:p.sizeDiff.height,l=e?0:p.sizeDiff.width;var g={width:(p.size.width-l),height:(p.size.height-f)},k=(parseInt(p.element.css("left"),10)+(p.position.left-p.originalPosition.left))||null,m=(parseInt(p.element.css("top"),10)+(p.position.top-p.originalPosition.top))||null;p.element.animate(c.extend(g,m&&k?{top:m,left:k}:{}),{duration:j.animateDuration,easing:j.animateEasing,step:function(){var o={width:parseInt(p.element.css("width"),10),height:parseInt(p.element.css("height"),10),top:parseInt(p.element.css("top"),10),left:parseInt(p.element.css("left"),10)};if(h&&h.length){c(h[0]).css({width:o.width,height:o.height})}p._updateCache(o);p._propagate("resize",i)}})}});c.ui.plugin.add("resizable","containment",{start:function(f,r){var t=c(this).data("resizable"),j=t.options,l=t.element;var g=j.containment,k=(g instanceof c)?g.get(0):(/parent/.test(g))?l.parent().get(0):g;if(!k){return}t.containerElement=c(k);if(/document/.test(g)||g==document){t.containerOffset={left:0,top:0};t.containerPosition={left:0,top:0};t.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var n=c(k),i=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){i[p]=b(n.css("padding"+o))});t.containerOffset=n.offset();t.containerPosition=n.position();t.containerSize={height:(n.innerHeight()-i[3]),width:(n.innerWidth()-i[1])};var q=t.containerOffset,e=t.containerSize.height,m=t.containerSize.width,h=(c.ui.hasScroll(k,"left")?k.scrollWidth:m),s=(c.ui.hasScroll(k)?k.scrollHeight:e);t.parentData={element:k,left:q.left,top:q.top,width:h,height:s}}},resize:function(g,q){var t=c(this).data("resizable"),i=t.options,f=t.containerSize,p=t.containerOffset,m=t.size,n=t.position,r=t._aspectRatio||g.shiftKey,e={top:0,left:0},h=t.containerElement;if(h[0]!=document&&(/static/).test(h.css("position"))){e=p}if(n.left<(t._helper?p.left:0)){t.size.width=t.size.width+(t._helper?(t.position.left-p.left):(t.position.left-e.left));if(r){t.size.height=t.size.width/i.aspectRatio}t.position.left=i.helper?p.left:0}if(n.top<(t._helper?p.top:0)){t.size.height=t.size.height+(t._helper?(t.position.top-p.top):t.position.top);if(r){t.size.width=t.size.height*i.aspectRatio}t.position.top=t._helper?p.top:0}t.offset.left=t.parentData.left+t.position.left;t.offset.top=t.parentData.top+t.position.top;var l=Math.abs((t._helper?t.offset.left-e.left:(t.offset.left-e.left))+t.sizeDiff.width),s=Math.abs((t._helper?t.offset.top-e.top:(t.offset.top-p.top))+t.sizeDiff.height);var k=t.containerElement.get(0)==t.element.parent().get(0),j=/relative|absolute/.test(t.containerElement.css("position"));if(k&&j){l-=t.parentData.left}if(l+t.size.width>=t.parentData.width){t.size.width=t.parentData.width-l;if(r){t.size.height=t.size.width/t.aspectRatio}}if(s+t.size.height>=t.parentData.height){t.size.height=t.parentData.height-s;if(r){t.size.width=t.size.height*t.aspectRatio}}},stop:function(f,n){var q=c(this).data("resizable"),g=q.options,l=q.position,m=q.containerOffset,e=q.containerPosition,i=q.containerElement;var j=c(q.helper),r=j.offset(),p=j.outerWidth()-q.sizeDiff.width,k=j.outerHeight()-q.sizeDiff.height;if(q._helper&&!g.animate&&(/relative/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}if(q._helper&&!g.animate&&(/static/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}}});c.ui.plugin.add("resizable","ghost",{start:function(g,h){var e=c(this).data("resizable"),i=e.options,f=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof i.ghost=="string"?i.ghost:"");e.ghost.appendTo(e.helper)},resize:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost){e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})}},stop:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost&&e.helper){e.helper.get(0).removeChild(e.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(e,m){var p=c(this).data("resizable"),h=p.options,k=p.size,i=p.originalSize,j=p.originalPosition,n=p.axis,l=h._aspectRatio||e.shiftKey;h.grid=typeof h.grid=="number"?[h.grid,h.grid]:h.grid;var g=Math.round((k.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1),f=Math.round((k.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f}else{if(/^(ne)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f}else{if(/^(sw)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.left=j.left-g}else{p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f;p.position.left=j.left-g}}}}});var b=function(e){return parseInt(e,10)||0};var a=function(e){return !isNaN(parseInt(e,10))}})(jQuery);/*!
+ * jQuery hashchange event - v1.3 - 7/21/2010
+ * http://benalman.com/projects/jquery-hashchange-plugin/
+ * 
+ * Copyright (c) 2010 "Cowboy" Ben Alman
+ * Dual licensed under the MIT and GPL licenses.
+ * http://benalman.com/about/license/
+ */
+(function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,"")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$('<iframe tabindex="-1" title="empty"/>').hide().one("load",function(){r||l(a());n()}).attr("src",r||"javascript:0").insertAfter("body")[0].contentWindow;h.onpropertychange=function(){try{if(event.propertyName==="title"){q.document.title=h.title}}catch(s){}}}};j.stop=k;o=function(){return a(q.location.href)};l=function(v,s){var u=q.document,t=$.fn[c].domain;if(v!==s){u.title=h.title;u.open();t&&u.write('<script>document.domain="'+t+'"<\/script>');u.close();q.location.hash=v}}})();return j})()})(jQuery,this);(function(c){var a=c.scrollTo=function(f,e,d){c(window).scrollTo(f,e,d)};a.defaults={axis:"xy",duration:parseFloat(c.fn.jquery)>=1.3?0:1};a.window=function(d){return c(window)._scrollable()};c.fn._scrollable=function(){return this.map(function(){var e=this,d=!e.nodeName||c.inArray(e.nodeName.toLowerCase(),["iframe","#document","html","body"])!=-1;if(!d){return e}var f=(e.contentWindow||e).document||e.ownerDocument||e;return c.browser.safari||f.compatMode=="BackCompat"?f.body:f.documentElement})};c.fn.scrollTo=function(f,e,d){if(typeof e=="object"){d=e;e=0}if(typeof d=="function"){d={onAfter:d}}if(f=="max"){f=9000000000}d=c.extend({},a.defaults,d);e=e||d.speed||d.duration;d.queue=d.queue&&d.axis.length>1;if(d.queue){e/=2}d.offset=b(d.offset);d.over=b(d.over);return this._scrollable().each(function(){var l=this,j=c(l),k=f,i,g={},m=j.is("html,body");switch(typeof k){case"number":case"string":if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(k)){k=b(k);break}k=c(k,this);case"object":if(k.is||k.style){i=(k=c(k)).offset()}}c.each(d.axis.split(""),function(q,r){var s=r=="x"?"Left":"Top",u=s.toLowerCase(),p="scroll"+s,o=l[p],n=a.max(l,r);if(i){g[p]=i[u]+(m?0:o-j.offset()[u]);if(d.margin){g[p]-=parseInt(k.css("margin"+s))||0;g[p]-=parseInt(k.css("border"+s+"Width"))||0}g[p]+=d.offset[u]||0;if(d.over[u]){g[p]+=k[r=="x"?"width":"height"]()*d.over[u]}}else{var t=k[u];g[p]=t.slice&&t.slice(-1)=="%"?parseFloat(t)/100*n:t}if(/^\d+$/.test(g[p])){g[p]=g[p]<=0?0:Math.min(g[p],n)}if(!q&&d.queue){if(o!=g[p]){h(d.onAfterFirst)}delete g[p]}});h(d.onAfter);function h(n){j.animate(g,e,d.easing,n&&function(){n.call(this,f,d)})}}).end()};a.max=function(j,i){var h=i=="x"?"Width":"Height",e="scroll"+h;if(!c(j).is("html,body")){return j[e]-c(j)[h.toLowerCase()]()}var g="client"+h,f=j.ownerDocument.documentElement,d=j.ownerDocument.body;return Math.max(f[e],d[e])-Math.min(f[g],d[g])};function b(d){return typeof d=="object"?d:{top:d,left:d}}})(jQuery);/*!
+ PowerTip - v1.2.0 - 2013-04-03
+ http://stevenbenner.github.com/jquery-powertip/
+ Copyright (c) 2013 Steven Benner (http://stevenbenner.com/).
+ Released under MIT license.
+ https://raw.github.com/stevenbenner/jquery-powertip/master/LICENSE.txt
+*/
+(function(a){if(typeof define==="function"&&define.amd){define(["jquery"],a)}else{a(jQuery)}}(function(k){var A=k(document),s=k(window),w=k("body");var n="displayController",e="hasActiveHover",d="forcedOpen",u="hasMouseMove",f="mouseOnToPopup",g="originalTitle",y="powertip",o="powertipjq",l="powertiptarget",E=180/Math.PI;var c={isTipOpen:false,isFixedTipOpen:false,isClosing:false,tipOpenImminent:false,activeHover:null,currentX:0,currentY:0,previousX:0,previousY:0,desyncTimeout:null,mouseTrackingActive:false,delayInProgress:false,windowWidth:0,windowHeight:0,scrollTop:0,scrollLeft:0};var p={none:0,top:1,bottom:2,left:4,right:8};k.fn.powerTip=function(F,N){if(!this.length){return this}if(k.type(F)==="string"&&k.powerTip[F]){return k.powerTip[F].call(this,this,N)}var O=k.extend({},k.fn.powerTip.defaults,F),G=new x(O);h();this.each(function M(){var R=k(this),Q=R.data(y),P=R.data(o),T=R.data(l),S;if(R.data(n)){k.powerTip.destroy(R)}S=R.attr("title");if(!Q&&!T&&!P&&S){R.data(y,S);R.data(g,S);R.removeAttr("title")}R.data(n,new t(R,O,G))});if(!O.manual){this.on({"mouseenter.powertip":function J(P){k.powerTip.show(this,P)},"mouseleave.powertip":function L(){k.powerTip.hide(this)},"focus.powertip":function K(){k.powerTip.show(this)},"blur.powertip":function H(){k.powerTip.hide(this,true)},"keydown.powertip":function I(P){if(P.keyCode===27){k.powerTip.hide(this,true)}}})}return this};k.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false};k.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};k.powerTip={show:function z(F,G){if(G){i(G);c.previousX=G.pageX;c.previousY=G.pageY;k(F).data(n).show()}else{k(F).first().data(n).show(true,true)}return F},reposition:function r(F){k(F).first().data(n).resetPosition();return F},hide:function D(G,F){if(G){k(G).first().data(n).hide(F)}else{if(c.activeHover){c.activeHover.data(n).hide(true)}}return G},destroy:function C(G){k(G).off(".powertip").each(function F(){var I=k(this),H=[g,n,e,d];if(I.data(g)){I.attr("title",I.data(g));H.push(y)}I.removeData(H)});return G}};k.powerTip.showTip=k.powerTip.show;k.powerTip.closeTip=k.powerTip.hide;function b(){var F=this;F.top="auto";F.left="auto";F.right="auto";F.bottom="auto";F.set=function(H,G){if(k.isNumeric(G)){F[H]=Math.round(G)}}}function t(K,N,F){var J=null;function L(P,Q){M();if(!K.data(e)){if(!P){c.tipOpenImminent=true;J=setTimeout(function O(){J=null;I()},N.intentPollInterval)}else{if(Q){K.data(d,true)}F.showTip(K)}}}function G(P){M();c.tipOpenImminent=false;if(K.data(e)){K.data(d,false);if(!P){c.delayInProgress=true;J=setTimeout(function O(){J=null;F.hideTip(K);c.delayInProgress=false},N.closeDelay)}else{F.hideTip(K)}}}function I(){var Q=Math.abs(c.previousX-c.currentX),O=Math.abs(c.previousY-c.currentY),P=Q+O;if(P<N.intentSensitivity){F.showTip(K)}else{c.previousX=c.currentX;c.previousY=c.currentY;L()}}function M(){J=clearTimeout(J);c.delayInProgress=false}function H(){F.resetPosition(K)}this.show=L;this.hide=G;this.cancel=M;this.resetPosition=H}function j(){function G(M,L,J,O,P){var K=L.split("-")[0],N=new b(),I;if(q(M)){I=H(M,K)}else{I=F(M,K)}switch(L){case"n":N.set("left",I.left-(J/2));N.set("bottom",c.windowHeight-I.top+P);break;case"e":N.set("left",I.left+P);N.set("top",I.top-(O/2));break;case"s":N.set("left",I.left-(J/2));N.set("top",I.top+P);break;case"w":N.set("top",I.top-(O/2));N.set("right",c.windowWidth-I.left+P);break;case"nw":N.set("bottom",c.windowHeight-I.top+P);N.set("right",c.windowWidth-I.left-20);break;case"nw-alt":N.set("left",I.left);N.set("bottom",c.windowHeight-I.top+P);break;case"ne":N.set("left",I.left-20);N.set("bottom",c.windowHeight-I.top+P);break;case"ne-alt":N.set("bottom",c.windowHeight-I.top+P);N.set("right",c.windowWidth-I.left);break;case"sw":N.set("top",I.top+P);N.set("right",c.windowWidth-I.left-20);break;case"sw-alt":N.set("left",I.left);N.set("top",I.top+P);break;case"se":N.set("left",I.left-20);N.set("top",I.top+P);break;case"se-alt":N.set("top",I.top+P);N.set("right",c.windowWidth-I.left);break}return N}function F(K,J){var O=K.offset(),N=K.outerWidth(),I=K.outerHeight(),M,L;switch(J){case"n":M=O.left+N/2;L=O.top;break;case"e":M=O.left+N;L=O.top+I/2;break;case"s":M=O.left+N/2;L=O.top+I;break;case"w":M=O.left;L=O.top+I/2;break;case"nw":M=O.left;L=O.top;break;case"ne":M=O.left+N;L=O.top;break;case"sw":M=O.left;L=O.top+I;break;case"se":M=O.left+N;L=O.top+I;break}return{top:L,left:M}}function H(O,K){var S=O.closest("svg")[0],N=O[0],W=S.createSVGPoint(),L=N.getBBox(),V=N.getScreenCTM(),M=L.width/2,Q=L.height/2,P=[],I=["nw","n","ne","e","se","s","sw","w"],U,X,R,T;function J(){P.push(W.matrixTransform(V))}W.x=L.x;W.y=L.y;J();W.x+=M;J();W.x+=M;J();W.y+=Q;J();W.y+=Q;J();W.x-=M;J();W.x-=M;J();W.y-=Q;J();if(P[0].y!==P[1].y||P[0].x!==P[7].x){X=Math.atan2(V.b,V.a)*E;R=Math.ceil(((X%360)-22.5)/45);if(R<1){R+=8}while(R--){I.push(I.shift())}}for(T=0;T<P.length;T++){if(I[T]===K){U=P[T];break}}return{top:U.y+c.scrollTop,left:U.x+c.scrollLeft}}this.compute=G}function x(Q){var P=new j(),O=k("#"+Q.popupId);if(O.length===0){O=k("<div/>",{id:Q.popupId});if(w.length===0){w=k("body")}w.append(O)}if(Q.followMouse){if(!O.data(u)){A.on("mousemove",M);s.on("scroll",M);O.data(u,true)}}if(Q.mouseOnToPopup){O.on({mouseenter:function L(){if(O.data(f)){if(c.activeHover){c.activeHover.data(n).cancel()}}},mouseleave:function N(){if(c.activeHover){c.activeHover.data(n).hide()}}})}function I(S){S.data(e,true);O.queue(function R(T){H(S);T()})}function H(S){var U;if(!S.data(e)){return}if(c.isTipOpen){if(!c.isClosing){K(c.activeHover)}O.delay(100).queue(function R(V){H(S);V()});return}S.trigger("powerTipPreRender");U=B(S);if(U){O.empty().append(U)}else{return}S.trigger("powerTipRender");c.activeHover=S;c.isTipOpen=true;O.data(f,Q.mouseOnToPopup);if(!Q.followMouse){G(S);c.isFixedTipOpen=true}else{M()}O.fadeIn(Q.fadeInTime,function T(){if(!c.desyncTimeout){c.desyncTimeout=setInterval(J,500)}S.trigger("powerTipOpen")})}function K(R){c.isClosing=true;c.activeHover=null;c.isTipOpen=false;c.desyncTimeout=clearInterval(c.desyncTimeout);R.data(e,false);R.data(d,false);O.fadeOut(Q.fadeOutTime,function S(){var T=new b();c.isClosing=false;c.isFixedTipOpen=false;O.removeClass();T.set("top",c.currentY+Q.offset);T.set("left",c.currentX+Q.offset);O.css(T);R.trigger("powerTipClose")})}function M(){if(!c.isFixedTipOpen&&(c.isTipOpen||(c.tipOpenImminent&&O.data(u)))){var R=O.outerWidth(),V=O.outerHeight(),U=new b(),S,T;U.set("top",c.currentY+Q.offset);U.set("left",c.currentX+Q.offset);S=m(U,R,V);if(S!==p.none){T=a(S);if(T===1){if(S===p.right){U.set("left",c.windowWidth-R)}else{if(S===p.bottom){U.set("top",c.scrollTop+c.windowHeight-V)}}}else{U.set("left",c.currentX-R-Q.offset);U.set("top",c.currentY-V-Q.offset)}}O.css(U)}}function G(S){var R,T;if(Q.smartPlacement){R=k.fn.powerTip.smartPlacementLists[Q.placement];k.each(R,function(U,W){var V=m(F(S,W),O.outerWidth(),O.outerHeight());T=W;if(V===p.none){return false}})}else{F(S,Q.placement);T=Q.placement}O.addClass(T)}function F(U,T){var R=0,S,W,V=new b();V.set("top",0);V.set("left",0);O.css(V);do{S=O.outerWidth();W=O.outerHeight();V=P.compute(U,T,S,W,Q.offset);O.css(V)}while(++R<=5&&(S!==O.outerWidth()||W!==O.outerHeight()));return V}function J(){var R=false;if(c.isTipOpen&&!c.isClosing&&!c.delayInProgress){if(c.activeHover.data(e)===false||c.activeHover.is(":disabled")){R=true}else{if(!v(c.activeHover)&&!c.activeHover.is(":focus")&&!c.activeHover.data(d)){if(O.data(f)){if(!v(O)){R=true}}else{R=true}}}if(R){K(c.activeHover)}}}this.showTip=I;this.hideTip=K;this.resetPosition=G}function q(F){return window.SVGElement&&F[0] instanceof SVGElement}function h(){if(!c.mouseTrackingActive){c.mouseTrackingActive=true;k(function H(){c.scrollLeft=s.scrollLeft();c.scrollTop=s.scrollTop();c.windowWidth=s.width();c.windowHeight=s.height()});A.on("mousemove",i);s.on({resize:function G(){c.windowWidth=s.width();c.windowHeight=s.height()},scroll:function F(){var I=s.scrollLeft(),J=s.scrollTop();if(I!==c.scrollLeft){c.currentX+=I-c.scrollLeft;c.scrollLeft=I}if(J!==c.scrollTop){c.currentY+=J-c.scrollTop;c.scrollTop=J}}})}}function i(F){c.currentX=F.pageX;c.currentY=F.pageY}function v(F){var H=F.offset(),J=F[0].getBoundingClientRect(),I=J.right-J.left,G=J.bottom-J.top;return c.currentX>=H.left&&c.currentX<=H.left+I&&c.currentY>=H.top&&c.currentY<=H.top+G}function B(I){var G=I.data(y),F=I.data(o),K=I.data(l),H,J;if(G){if(k.isFunction(G)){G=G.call(I[0])}J=G}else{if(F){if(k.isFunction(F)){F=F.call(I[0])}if(F.length>0){J=F.clone(true,true)}}else{if(K){H=k("#"+K);if(H.length>0){J=H.html()}}}}return J}function m(M,L,K){var G=c.scrollTop,J=c.scrollLeft,I=G+c.windowHeight,F=J+c.windowWidth,H=p.none;if(M.top<G||Math.abs(M.bottom-c.windowHeight)-K<G){H|=p.top}if(M.top+K>I||Math.abs(M.bottom-c.windowHeight)>I){H|=p.bottom}if(M.left<J||M.right+L>F){H|=p.left}if(M.left+L>F||M.right<J){H|=p.right}return H}function a(G){var F=0;while(G){G&=G-1;F++}return F}}));/*!
+ * jQuery UI Touch Punch 0.2.3
+ *
+ * Copyright 2011–2014, Dave Furfero
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ *
+ * Depends:
+ *  jquery.ui.widget.js
+ *  jquery.ui.mouse.js
+ */
+(function(b){b.support.touch="ontouchend" in document;if(!b.support.touch){return}var d=b.ui.mouse.prototype,f=d._mouseInit,c=d._mouseDestroy,a;function e(h,i){if(h.originalEvent.touches.length>1){return}h.preventDefault();var j=h.originalEvent.changedTouches[0],g=document.createEvent("MouseEvents");g.initMouseEvent(i,true,true,window,1,j.screenX,j.screenY,j.clientX,j.clientY,false,false,false,false,0,null);h.target.dispatchEvent(g)}d._touchStart=function(h){var g=this;if(a||!g._mouseCapture(h.originalEvent.changedTouches[0])){return}a=true;g._touchMoved=false;e(h,"mouseover");e(h,"mousemove");e(h,"mousedown")};d._touchMove=function(g){if(!a){return}this._touchMoved=true;e(g,"mousemove")};d._touchEnd=function(g){if(!a){return}e(g,"mouseup");e(g,"mouseout");if(!this._touchMoved){e(g,"click")}a=false};d._mouseInit=function(){var g=this;g.element.bind({touchstart:b.proxy(g,"_touchStart"),touchmove:b.proxy(g,"_touchMove"),touchend:b.proxy(g,"_touchEnd")});f.call(g)};d._mouseDestroy=function(){var g=this;g.element.unbind({touchstart:b.proxy(g,"_touchStart"),touchmove:b.proxy(g,"_touchMove"),touchend:b.proxy(g,"_touchEnd")});c.call(g)}})(jQuery);/*!
+ * SmartMenus jQuery Plugin - v1.0.0 - January 27, 2016
+ * http://www.smartmenus.org/
+ *
+ * Copyright Vasil Dinkov, Vadikom Web Ltd.
+ * http://vadikom.com
+ *
+ * Licensed MIT
+ */
+(function(a){if(typeof define==="function"&&define.amd){define(["jquery"],a)}else{if(typeof module==="object"&&typeof module.exports==="object"){module.exports=a(require("jquery"))}else{a(jQuery)}}}(function(a){var b=[],e=!!window.createPopup,f=false,d="ontouchstart" in window,h=false,g=window.requestAnimationFrame||function(l){return setTimeout(l,1000/60)},c=window.cancelAnimationFrame||function(l){clearTimeout(l)};function k(m){var n=".smartmenus_mouse";if(!h&&!m){var o=true,l=null;a(document).bind(i([["mousemove",function(s){var t={x:s.pageX,y:s.pageY,timeStamp:new Date().getTime()};if(l){var q=Math.abs(l.x-t.x),p=Math.abs(l.y-t.y);if((q>0||p>0)&&q<=2&&p<=2&&t.timeStamp-l.timeStamp<=300){f=true;if(o){var r=a(s.target).closest("a");if(r.is("a")){a.each(b,function(){if(a.contains(this.$root[0],r[0])){this.itemEnter({currentTarget:r[0]});return false}})}o=false}}}l=t}],[d?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut",function(p){if(j(p.originalEvent)){f=false}}]],n));h=true}else{if(h&&m){a(document).unbind(n);h=false}}}function j(l){return !/^(4|mouse)$/.test(l.pointerType)}function i(l,n){if(!n){n=""}var m={};a.each(l,function(o,p){m[p[0].split(" ").join(n+" ")+n]=p[1]});return m}a.SmartMenus=function(m,l){this.$root=a(m);this.opts=l;this.rootId="";this.accessIdPrefix="";this.$subArrow=null;this.activatedItems=[];this.visibleSubMenus=[];this.showTimeout=0;this.hideTimeout=0;this.scrollTimeout=0;this.clickActivated=false;this.focusActivated=false;this.zIndexInc=0;this.idInc=0;this.$firstLink=null;this.$firstSub=null;this.disabled=false;this.$disableOverlay=null;this.$touchScrollingSub=null;this.cssTransforms3d="perspective" in m.style||"webkitPerspective" in m.style;this.wasCollapsible=false;this.init()};a.extend(a.SmartMenus,{hideAll:function(){a.each(b,function(){this.menuHideAll()})},destroy:function(){while(b.length){b[0].destroy()}k(true)},prototype:{init:function(n){var l=this;if(!n){b.push(this);this.rootId=(new Date().getTime()+Math.random()+"").replace(/\D/g,"");this.accessIdPrefix="sm-"+this.rootId+"-";if(this.$root.hasClass("sm-rtl")){this.opts.rightToLeftSubMenus=true}var r=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).bind(i([["mouseover focusin",a.proxy(this.rootOver,this)],["mouseout focusout",a.proxy(this.rootOut,this)],["keydown",a.proxy(this.rootKeyDown,this)]],r)).delegate("a",i([["mouseenter",a.proxy(this.itemEnter,this)],["mouseleave",a.proxy(this.itemLeave,this)],["mousedown",a.proxy(this.itemDown,this)],["focus",a.proxy(this.itemFocus,this)],["blur",a.proxy(this.itemBlur,this)],["click",a.proxy(this.itemClick,this)]],r));r+=this.rootId;if(this.opts.hideOnClick){a(document).bind(i([["touchstart",a.proxy(this.docTouchStart,this)],["touchmove",a.proxy(this.docTouchMove,this)],["touchend",a.proxy(this.docTouchEnd,this)],["click",a.proxy(this.docClick,this)]],r))}a(window).bind(i([["resize orientationchange",a.proxy(this.winResize,this)]],r));if(this.opts.subIndicators){this.$subArrow=a("<span/>").addClass("sub-arrow");if(this.opts.subIndicatorsText){this.$subArrow.html(this.opts.subIndicatorsText)}}k()}this.$firstSub=this.$root.find("ul").each(function(){l.menuInit(a(this))}).eq(0);this.$firstLink=this.$root.find("a").eq(0);if(this.opts.markCurrentItem){var p=/(index|default)\.[^#\?\/]*/i,m=/#.*/,q=window.location.href.replace(p,""),o=q.replace(m,"");this.$root.find("a").each(function(){var s=this.href.replace(p,""),t=a(this);if(s==q||s==o){t.addClass("current");if(l.opts.markCurrentTree){t.parentsUntil("[data-smartmenus-id]","ul").each(function(){a(this).dataSM("parent-a").addClass("current")})}}})}this.wasCollapsible=this.isCollapsible()},destroy:function(m){if(!m){var n=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").unbind(n).undelegate(n);n+=this.rootId;a(document).unbind(n);a(window).unbind(n);if(this.opts.subIndicators){this.$subArrow=null}}this.menuHideAll();var l=this;this.$root.find("ul").each(function(){var o=a(this);if(o.dataSM("scroll-arrows")){o.dataSM("scroll-arrows").remove()}if(o.dataSM("shown-before")){if(l.opts.subMenusMinWidth||l.opts.subMenusMaxWidth){o.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap")}if(o.dataSM("scroll-arrows")){o.dataSM("scroll-arrows").remove()}o.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})}if((o.attr("id")||"").indexOf(l.accessIdPrefix)==0){o.removeAttr("id")}}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("ie-shim").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded");this.$root.find("a.has-submenu").each(function(){var o=a(this);if(o.attr("id").indexOf(l.accessIdPrefix)==0){o.removeAttr("id")}}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub");if(this.opts.subIndicators){this.$root.find("span.sub-arrow").remove()}if(this.opts.markCurrentItem){this.$root.find("a.current").removeClass("current")}if(!m){this.$root=null;this.$firstLink=null;this.$firstSub=null;if(this.$disableOverlay){this.$disableOverlay.remove();this.$disableOverlay=null}b.splice(a.inArray(this,b),1)}},disable:function(l){if(!this.disabled){this.menuHideAll();if(!l&&!this.opts.isPopup&&this.$root.is(":visible")){var m=this.$root.offset();this.$disableOverlay=a('<div class="sm-jquery-disable-overlay"/>').css({position:"absolute",top:m.top,left:m.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(true),opacity:0}).appendTo(document.body)}this.disabled=true}},docClick:function(l){if(this.$touchScrollingSub){this.$touchScrollingSub=null;return}if(this.visibleSubMenus.length&&!a.contains(this.$root[0],l.target)||a(l.target).is("a")){this.menuHideAll()}},docTouchEnd:function(m){if(!this.lastTouch){return}if(this.visibleSubMenus.length&&(this.lastTouch.x2===undefined||this.lastTouch.x1==this.lastTouch.x2)&&(this.lastTouch.y2===undefined||this.lastTouch.y1==this.lastTouch.y2)&&(!this.lastTouch.target||!a.contains(this.$root[0],this.lastTouch.target))){if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0}var l=this;this.hideTimeout=setTimeout(function(){l.menuHideAll()},350)}this.lastTouch=null},docTouchMove:function(m){if(!this.lastTouch){return}var l=m.originalEvent.touches[0];this.lastTouch.x2=l.pageX;this.lastTouch.y2=l.pageY},docTouchStart:function(m){var l=m.originalEvent.touches[0];this.lastTouch={x1:l.pageX,y1:l.pageY,target:l.target}},enable:function(){if(this.disabled){if(this.$disableOverlay){this.$disableOverlay.remove();this.$disableOverlay=null}this.disabled=false}},getClosestMenu:function(m){var l=a(m).closest("ul");while(l.dataSM("in-mega")){l=l.parent().closest("ul")}return l[0]||null},getHeight:function(l){return this.getOffset(l,true)},getOffset:function(n,l){var m;if(n.css("display")=="none"){m={position:n[0].style.position,visibility:n[0].style.visibility};n.css({position:"absolute",visibility:"hidden"}).show()}var o=n[0].getBoundingClientRect&&n[0].getBoundingClientRect(),p=o&&(l?o.height||o.bottom-o.top:o.width||o.right-o.left);if(!p&&p!==0){p=l?n[0].offsetHeight:n[0].offsetWidth}if(m){n.hide().css(m)}return p},getStartZIndex:function(l){var m=parseInt(this[l?"$root":"$firstSub"].css("z-index"));if(!l&&isNaN(m)){m=parseInt(this.$root.css("z-index"))}return !isNaN(m)?m:1},getTouchPoint:function(l){return l.touches&&l.touches[0]||l.changedTouches&&l.changedTouches[0]||l},getViewport:function(l){var m=l?"Height":"Width",o=document.documentElement["client"+m],n=window["inner"+m];if(n){o=Math.min(o,n)}return o},getViewportHeight:function(){return this.getViewport(true)},getViewportWidth:function(){return this.getViewport()},getWidth:function(l){return this.getOffset(l)},handleEvents:function(){return !this.disabled&&this.isCSSOn()},handleItemEvents:function(l){return this.handleEvents()&&!this.isLinkInMegaMenu(l)},isCollapsible:function(){return this.$firstSub.css("position")=="static"},isCSSOn:function(){return this.$firstLink.css("display")=="block"},isFixed:function(){var l=this.$root.css("position")=="fixed";if(!l){this.$root.parentsUntil("body").each(function(){if(a(this).css("position")=="fixed"){l=true;return false}})}return l},isLinkInMegaMenu:function(l){return a(this.getClosestMenu(l[0])).hasClass("mega-menu")},isTouchMode:function(){return !f||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(p,l){var n=p.closest("ul"),q=n.dataSM("level");if(q>1&&(!this.activatedItems[q-2]||this.activatedItems[q-2][0]!=n.dataSM("parent-a")[0])){var m=this;a(n.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(n).each(function(){m.itemActivate(a(this).dataSM("parent-a"))})}if(!this.isCollapsible()||l){this.menuHideSubMenus(!this.activatedItems[q-1]||this.activatedItems[q-1][0]!=p[0]?q-1:q)}this.activatedItems[q-1]=p;if(this.$root.triggerHandler("activate.smapi",p[0])===false){return}var o=p.dataSM("sub");if(o&&(this.isTouchMode()||(!this.opts.showOnClick||this.clickActivated))){this.menuShow(o)}},itemBlur:function(m){var l=a(m.currentTarget);if(!this.handleItemEvents(l)){return}this.$root.triggerHandler("blur.smapi",l[0])},itemClick:function(o){var n=a(o.currentTarget);if(!this.handleItemEvents(n)){return}if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==n.closest("ul")[0]){this.$touchScrollingSub=null;o.stopPropagation();return false}if(this.$root.triggerHandler("click.smapi",n[0])===false){return false}var p=a(o.target).is("span.sub-arrow"),m=n.dataSM("sub"),l=m?m.dataSM("level")==2:false;if(m&&!m.is(":visible")){if(this.opts.showOnClick&&l){this.clickActivated=true}this.itemActivate(n);if(m.is(":visible")){this.focusActivated=true;return false}}else{if(this.isCollapsible()&&p){this.itemActivate(n);this.menuHide(m);return false}}if(this.opts.showOnClick&&l||n.hasClass("disabled")||this.$root.triggerHandler("select.smapi",n[0])===false){return false}},itemDown:function(m){var l=a(m.currentTarget);if(!this.handleItemEvents(l)){return}l.dataSM("mousedown",true)},itemEnter:function(n){var m=a(n.currentTarget);if(!this.handleItemEvents(m)){return}if(!this.isTouchMode()){if(this.showTimeout){clearTimeout(this.showTimeout);this.showTimeout=0}var l=this;this.showTimeout=setTimeout(function(){l.itemActivate(m)},this.opts.showOnClick&&m.closest("ul").dataSM("level")==1?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",m[0])},itemFocus:function(m){var l=a(m.currentTarget);if(!this.handleItemEvents(l)){return}if(this.focusActivated&&(!this.isTouchMode()||!l.dataSM("mousedown"))&&(!this.activatedItems.length||this.activatedItems[this.activatedItems.length-1][0]!=l[0])){this.itemActivate(l,true)}this.$root.triggerHandler("focus.smapi",l[0])},itemLeave:function(m){var l=a(m.currentTarget);if(!this.handleItemEvents(l)){return}if(!this.isTouchMode()){l[0].blur();if(this.showTimeout){clearTimeout(this.showTimeout);this.showTimeout=0}}l.removeDataSM("mousedown");this.$root.triggerHandler("mouseleave.smapi",l[0])},menuHide:function(m){if(this.$root.triggerHandler("beforehide.smapi",m[0])===false){return}m.stop(true,true);if(m.css("display")!="none"){var l=function(){m.css("z-index","")};if(this.isCollapsible()){if(this.opts.collapsibleHideFunction){this.opts.collapsibleHideFunction.call(this,m,l)}else{m.hide(this.opts.collapsibleHideDuration,l)}}else{if(this.opts.hideFunction){this.opts.hideFunction.call(this,m,l)}else{m.hide(this.opts.hideDuration,l)}}if(m.dataSM("ie-shim")){m.dataSM("ie-shim").remove().css({"-webkit-transform":"",transform:""})}if(m.dataSM("scroll")){this.menuScrollStop(m);m.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).unbind(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()}m.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false");m.attr({"aria-expanded":"false","aria-hidden":"true"});var n=m.dataSM("level");this.activatedItems.splice(n-1,1);this.visibleSubMenus.splice(a.inArray(m,this.visibleSubMenus),1);this.$root.triggerHandler("hide.smapi",m[0])}},menuHideAll:function(){if(this.showTimeout){clearTimeout(this.showTimeout);this.showTimeout=0}var m=this.opts.isPopup?1:0;for(var l=this.visibleSubMenus.length-1;l>=m;l--){this.menuHide(this.visibleSubMenus[l])}if(this.opts.isPopup){this.$root.stop(true,true);if(this.$root.is(":visible")){if(this.opts.hideFunction){this.opts.hideFunction.call(this,this.$root)}else{this.$root.hide(this.opts.hideDuration)}if(this.$root.dataSM("ie-shim")){this.$root.dataSM("ie-shim").remove()}}}this.activatedItems=[];this.visibleSubMenus=[];this.clickActivated=false;this.focusActivated=false;this.zIndexInc=0;this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(n){for(var l=this.activatedItems.length-1;l>=n;l--){var m=this.activatedItems[l].dataSM("sub");if(m){this.menuHide(m)}}},menuIframeShim:function(l){if(e&&this.opts.overlapControlsInIE&&!l.dataSM("ie-shim")){l.dataSM("ie-shim",a("<iframe/>").attr({src:"javascript:0",tabindex:-9}).css({position:"absolute",top:"auto",left:"0",opacity:0,border:"0"}))}},menuInit:function(l){if(!l.dataSM("in-mega")){if(l.hasClass("mega-menu")){l.find("ul").dataSM("in-mega",true)}var q=2,m=l[0];while((m=m.parentNode.parentNode)!=this.$root[0]){q++}var n=l.prevAll("a").eq(-1);if(!n.length){n=l.prevAll().find("a").eq(-1)}n.addClass("has-submenu").dataSM("sub",l);l.dataSM("parent-a",n).dataSM("level",q).parent().dataSM("sub",l);var o=n.attr("id")||this.accessIdPrefix+(++this.idInc),p=l.attr("id")||this.accessIdPrefix+(++this.idInc);n.attr({id:o,"aria-haspopup":"true","aria-controls":p,"aria-expanded":"false"});l.attr({id:p,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"});if(this.opts.subIndicators){n[this.opts.subIndicatorsPos](this.$subArrow.clone())}}},menuPosition:function(K){var r=K.dataSM("parent-a"),D=r.closest("li"),E=D.parent(),l=K.dataSM("level"),t=this.getWidth(K),J=this.getHeight(K),u=r.offset(),o=u.left,m=u.top,q=this.getWidth(r),F=this.getHeight(r),H=a(window),v=H.scrollLeft(),s=H.scrollTop(),z=this.getViewportWidth(),L=this.getViewportHeight(),w=E.parent().is("[data-sm-horizontal-sub]")||l==2&&!E.hasClass("sm-vertical"),B=this.opts.rightToLeftSubMenus&&!D.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&D.is("[data-sm-reverse]"),p=l==2?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,n=l==2?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY,C,A;if(w){C=B?q-t-p:p;A=this.opts.bottomToTopSubMenus?-J-n:F+n}else{C=B?p-t:q-p;A=this.opts.bottomToTopSubMenus?F-n-J:n}if(this.opts.keepInViewport){var N=o+C,M=m+A;if(B&&N<v){C=w?v-N+C:q-p}else{if(!B&&N+t>v+z){C=w?v+z-t-N+C:p-t}}if(!w){if(J<L&&M+J>s+L){A+=s+L-J-M}else{if(J>=L||M<s){A+=s-M}}}if(w&&(M+J>s+L+0.49||M<s)||!w&&J>L+0.49){var G=this;if(!K.dataSM("scroll-arrows")){K.dataSM("scroll-arrows",a([a('<span class="scroll-up"><span class="scroll-up-arrow"></span></span>')[0],a('<span class="scroll-down"><span class="scroll-down-arrow"></span></span>')[0]]).bind({mouseenter:function(){K.dataSM("scroll").up=a(this).hasClass("scroll-up");G.menuScroll(K)},mouseleave:function(x){G.menuScrollStop(K);G.menuScrollOut(K,x)},"mousewheel DOMMouseScroll":function(x){x.preventDefault()}}).insertAfter(K))}var I=".smartmenus_scroll";K.dataSM("scroll",{y:this.cssTransforms3d?0:A-F,step:1,itemH:F,subH:J,arrowDownH:this.getHeight(K.dataSM("scroll-arrows").eq(1))}).bind(i([["mouseover",function(x){G.menuScrollOver(K,x)}],["mouseout",function(x){G.menuScrollOut(K,x)}],["mousewheel DOMMouseScroll",function(x){G.menuScrollMousewheel(K,x)}]],I)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:C+(parseInt(K.css("border-left-width"))||0),width:t-(parseInt(K.css("border-left-width"))||0)-(parseInt(K.css("border-right-width"))||0),zIndex:K.css("z-index")}).eq(w&&this.opts.bottomToTopSubMenus?0:1).show();if(this.isFixed()){K.css({"touch-action":"none","-ms-touch-action":"none"}).bind(i([[d?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp",function(x){G.menuScrollTouch(K,x)}]],I))}}}K.css({top:"auto",left:"0",marginLeft:C,marginTop:A-F});this.menuIframeShim(K);if(K.dataSM("ie-shim")){K.dataSM("ie-shim").css({zIndex:K.css("z-index"),width:t,height:J,marginLeft:C,marginTop:A-F})}},menuScroll:function(r,m,n){var p=r.dataSM("scroll"),q=r.dataSM("scroll-arrows"),o=p.up?p.upEnd:p.downEnd,s;if(!m&&p.momentum){p.momentum*=0.92;s=p.momentum;if(s<0.5){this.menuScrollStop(r);return}}else{s=n||(m||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(p.step))}var l=r.dataSM("level");if(this.activatedItems[l-1]&&this.activatedItems[l-1].dataSM("sub")&&this.activatedItems[l-1].dataSM("sub").is(":visible")){this.menuHideSubMenus(l-1)}p.y=p.up&&o<=p.y||!p.up&&o>=p.y?p.y:(Math.abs(o-p.y)>s?p.y+(p.up?s:-s):o);r.add(r.dataSM("ie-shim")).css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+p.y+"px, 0)",transform:"translate3d(0, "+p.y+"px, 0)"}:{marginTop:p.y});if(f&&(p.up&&p.y>p.downEnd||!p.up&&p.y<p.upEnd)){q.eq(p.up?1:0).show()}if(p.y==o){if(f){q.eq(p.up?0:1).hide()}this.menuScrollStop(r)}else{if(!m){if(this.opts.scrollAccelerate&&p.step<this.opts.scrollStep){p.step+=0.2}var t=this;this.scrollTimeout=g(function(){t.menuScroll(r)})}}},menuScrollMousewheel:function(m,n){if(this.getClosestMenu(n.target)==m[0]){n=n.originalEvent;var l=(n.wheelDelta||-n.detail)>0;if(m.dataSM("scroll-arrows").eq(l?0:1).is(":visible")){m.dataSM("scroll").up=l;this.menuScroll(m,true)}}n.preventDefault()},menuScrollOut:function(l,m){if(f){if(!/^scroll-(up|down)/.test((m.relatedTarget||"").className)&&(l[0]!=m.relatedTarget&&!a.contains(l[0],m.relatedTarget)||this.getClosestMenu(m.relatedTarget)!=l[0])){l.dataSM("scroll-arrows").css("visibility","hidden")}}},menuScrollOver:function(n,o){if(f){if(!/^scroll-(up|down)/.test(o.target.className)&&this.getClosestMenu(o.target)==n[0]){this.menuScrollRefreshData(n);var m=n.dataSM("scroll"),l=a(window).scrollTop()-n.dataSM("parent-a").offset().top-m.itemH;n.dataSM("scroll-arrows").eq(0).css("margin-top",l).end().eq(1).css("margin-top",l+this.getViewportHeight()-m.arrowDownH).end().css("visibility","visible")}}},menuScrollRefreshData:function(n){var m=n.dataSM("scroll"),l=a(window).scrollTop()-n.dataSM("parent-a").offset().top-m.itemH;if(this.cssTransforms3d){l=-(parseFloat(n.css("margin-top"))-l)}a.extend(m,{upEnd:l,downEnd:l+this.getViewportHeight()-m.subH})},menuScrollStop:function(l){if(this.scrollTimeout){c(this.scrollTimeout);this.scrollTimeout=0;l.dataSM("scroll").step=1;return true}},menuScrollTouch:function(p,q){q=q.originalEvent;if(j(q)){var m=this.getTouchPoint(q);if(this.getClosestMenu(m.target)==p[0]){var o=p.dataSM("scroll");if(/(start|down)$/i.test(q.type)){if(this.menuScrollStop(p)){q.preventDefault();this.$touchScrollingSub=p}else{this.$touchScrollingSub=null}this.menuScrollRefreshData(p);a.extend(o,{touchStartY:m.pageY,touchStartTime:q.timeStamp})}else{if(/move$/i.test(q.type)){var n=o.touchY!==undefined?o.touchY:o.touchStartY;if(n!==undefined&&n!=m.pageY){this.$touchScrollingSub=p;var l=n<m.pageY;if(o.up!==undefined&&o.up!=l){a.extend(o,{touchStartY:m.pageY,touchStartTime:q.timeStamp})}a.extend(o,{up:l,touchY:m.pageY});this.menuScroll(p,true,Math.abs(m.pageY-n))}q.preventDefault()}else{if(o.touchY!==undefined){if(o.momentum=Math.pow(Math.abs(m.pageY-o.touchStartY)/(q.timeStamp-o.touchStartTime),2)*15){this.menuScrollStop(p);this.menuScroll(p);q.preventDefault()}delete o.touchY}}}}}},menuShow:function(n){if(!n.dataSM("beforefirstshowfired")){n.dataSM("beforefirstshowfired",true);if(this.$root.triggerHandler("beforefirstshow.smapi",n[0])===false){return}}if(this.$root.triggerHandler("beforeshow.smapi",n[0])===false){return}n.dataSM("shown-before",true).stop(true,true);if(!n.is(":visible")){var m=n.dataSM("parent-a");if(this.opts.keepHighlighted||this.isCollapsible()){m.addClass("highlighted")}if(this.isCollapsible()){n.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""})}else{n.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1);if(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth){n.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap");if(this.opts.subMenusMinWidth){n.css("min-width",this.opts.subMenusMinWidth)}if(this.opts.subMenusMaxWidth){var o=this.getWidth(n);n.css("max-width",this.opts.subMenusMaxWidth);if(o>this.getWidth(n)){n.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}}}this.menuPosition(n);if(n.dataSM("ie-shim")){n.dataSM("ie-shim").insertBefore(n)}}var l=function(){n.css("overflow","")};if(this.isCollapsible()){if(this.opts.collapsibleShowFunction){this.opts.collapsibleShowFunction.call(this,n,l)}else{n.show(this.opts.collapsibleShowDuration,l)}}else{if(this.opts.showFunction){this.opts.showFunction.call(this,n,l)}else{n.show(this.opts.showDuration,l)}}m.attr("aria-expanded","true");n.attr({"aria-expanded":"true","aria-hidden":"false"});this.visibleSubMenus.push(n);this.$root.triggerHandler("show.smapi",n[0])}},popupHide:function(l){if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0}var m=this;this.hideTimeout=setTimeout(function(){m.menuHideAll()},l?1:this.opts.hideTimeout)},popupShow:function(o,n){if(!this.opts.isPopup){alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.');return}if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0}this.$root.dataSM("shown-before",true).stop(true,true);if(!this.$root.is(":visible")){this.$root.css({left:o,top:n});this.menuIframeShim(this.$root);if(this.$root.dataSM("ie-shim")){this.$root.dataSM("ie-shim").css({zIndex:this.$root.css("z-index"),width:this.getWidth(this.$root),height:this.getHeight(this.$root),left:o,top:n}).insertBefore(this.$root)}var m=this,l=function(){m.$root.css("overflow","")};if(this.opts.showFunction){this.opts.showFunction.call(this,this.$root,l)}else{this.$root.show(this.opts.showDuration,l)}this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(true);this.init(true)},rootKeyDown:function(o){if(!this.handleEvents()){return}switch(o.keyCode){case 27:var m=this.activatedItems[0];if(m){this.menuHideAll();m[0].focus();var n=m.dataSM("sub");if(n){this.menuHide(n)}}break;case 32:var l=a(o.target);if(l.is("a")&&this.handleItemEvents(l)){var n=l.dataSM("sub");if(n&&!n.is(":visible")){this.itemClick({currentTarget:o.target});o.preventDefault()}}break}},rootOut:function(m){if(!this.handleEvents()||this.isTouchMode()||m.target==this.$root[0]){return}if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0}if(!this.opts.showOnClick||!this.opts.hideOnClick){var l=this;this.hideTimeout=setTimeout(function(){l.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(l){if(!this.handleEvents()||this.isTouchMode()||l.target==this.$root[0]){return}if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0}},winResize:function(m){if(!this.handleEvents()){if(this.$disableOverlay){var n=this.$root.offset();this.$disableOverlay.css({top:n.top,left:n.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}return}if(!("onorientationchange" in window)||m.type=="orientationchange"){var l=this.isCollapsible();if(!(this.wasCollapsible&&l)){if(this.activatedItems.length){this.activatedItems[this.activatedItems.length-1][0].blur()}this.menuHideAll()}this.wasCollapsible=l}}}});a.fn.dataSM=function(l,m){if(m){return this.data(l+"_smartmenus",m)}return this.data(l+"_smartmenus")};a.fn.removeDataSM=function(l){return this.removeData(l+"_smartmenus")};a.fn.smartmenus=function(m){if(typeof m=="string"){var l=arguments,o=m;Array.prototype.shift.call(l);return this.each(function(){var p=a(this).data("smartmenus");if(p&&p[o]){p[o].apply(p,l)}})}var n=a.extend({},a.fn.smartmenus.defaults,m);return this.each(function(){new a.SmartMenus(this,n)})};a.fn.smartmenus.defaults={isPopup:false,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:true,subIndicatorsPos:"prepend",subIndicatorsText:"+",scrollStep:30,scrollAccelerate:true,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(m,l){m.fadeOut(200,l)},collapsibleShowDuration:0,collapsibleShowFunction:function(m,l){m.slideDown(200,l)},collapsibleHideDuration:0,collapsibleHideFunction:function(m,l){m.slideUp(200,l)},showOnClick:false,hideOnClick:true,noMouseOver:false,keepInViewport:true,keepHighlighted:true,markCurrentItem:false,markCurrentTree:true,rightToLeftSubMenus:false,bottomToTopSubMenus:false,overlapControlsInIE:true};return a}));
\ No newline at end of file
diff --git a/docs/rc/keras__model__arch__table_8sql__in.html b/docs/rc/keras__model__arch__table_8sql__in.html
new file mode 100644
index 0000000..ac51ab1
--- /dev/null
+++ b/docs/rc/keras__model__arch__table_8sql__in.html
@@ -0,0 +1,400 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: keras_model_arch_table.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('keras__model__arch__table_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">keras_model_arch_table.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:abe844bd378708abc2077326972057504"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="keras__model__arch__table_8sql__in.html#abe844bd378708abc2077326972057504">load_keras_model</a> (varchar keras_model_arch_table, json model_arch, bytea model_weights, text name, text description)</td></tr>
+<tr class="separator:abe844bd378708abc2077326972057504"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3c05aee1361fb9f590f1590e86ecdb66"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="keras__model__arch__table_8sql__in.html#a3c05aee1361fb9f590f1590e86ecdb66">load_keras_model</a> (varchar keras_model_arch_table, json model_arch)</td></tr>
+<tr class="separator:a3c05aee1361fb9f590f1590e86ecdb66"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0498e740cd1cd2712b20e878c6f9d0f3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="keras__model__arch__table_8sql__in.html#a0498e740cd1cd2712b20e878c6f9d0f3">load_keras_model</a> (varchar keras_model_arch_table, json model_arch, bytea model_weights)</td></tr>
+<tr class="separator:a0498e740cd1cd2712b20e878c6f9d0f3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac919b3c142e996acd71848338194aa02"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="keras__model__arch__table_8sql__in.html#ac919b3c142e996acd71848338194aa02">load_keras_model</a> (varchar keras_model_arch_table, json model_arch, bytea model_weights, text name)</td></tr>
+<tr class="separator:ac919b3c142e996acd71848338194aa02"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a51327e5814450c3c5991a2b885cf1ab2"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="keras__model__arch__table_8sql__in.html#a51327e5814450c3c5991a2b885cf1ab2">load_keras_model</a> (varchar message)</td></tr>
+<tr class="separator:a51327e5814450c3c5991a2b885cf1ab2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a024b71018a508cb2773a52240c7af121"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="keras__model__arch__table_8sql__in.html#a024b71018a508cb2773a52240c7af121">load_keras_model</a> ()</td></tr>
+<tr class="separator:a024b71018a508cb2773a52240c7af121"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a53fd46319b173ad59a1f21732c23c1f0"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="keras__model__arch__table_8sql__in.html#a53fd46319b173ad59a1f21732c23c1f0">delete_keras_model</a> (varchar keras_model_arch_table, integer model_id)</td></tr>
+<tr class="separator:a53fd46319b173ad59a1f21732c23c1f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af8840de8b579cc9e0ce826b977cf8d80"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="keras__model__arch__table_8sql__in.html#af8840de8b579cc9e0ce826b977cf8d80">delete_keras_model</a> (varchar message)</td></tr>
+<tr class="separator:af8840de8b579cc9e0ce826b977cf8d80"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab1d0a9b4830f62938129a95f4c7c5d0d"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="keras__model__arch__table_8sql__in.html#ab1d0a9b4830f62938129a95f4c7c5d0d">delete_keras_model</a> ()</td></tr>
+<tr class="separator:ab1d0a9b4830f62938129a95f4c7c5d0d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a53fd46319b173ad59a1f21732c23c1f0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a53fd46319b173ad59a1f21732c23c1f0">&#9670;&nbsp;</a></span>delete_keras_model() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void delete_keras_model </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>keras_model_arch_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>model_id</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="af8840de8b579cc9e0ce826b977cf8d80"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af8840de8b579cc9e0ce826b977cf8d80">&#9670;&nbsp;</a></span>delete_keras_model() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar delete_keras_model </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab1d0a9b4830f62938129a95f4c7c5d0d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab1d0a9b4830f62938129a95f4c7c5d0d">&#9670;&nbsp;</a></span>delete_keras_model() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar delete_keras_model </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="abe844bd378708abc2077326972057504"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abe844bd378708abc2077326972057504">&#9670;&nbsp;</a></span>load_keras_model() <span class="overload">[1/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void load_keras_model </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>keras_model_arch_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">json&#160;</td>
+          <td class="paramname"><em>model_arch</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea&#160;</td>
+          <td class="paramname"><em>model_weights</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>description</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a3c05aee1361fb9f590f1590e86ecdb66"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3c05aee1361fb9f590f1590e86ecdb66">&#9670;&nbsp;</a></span>load_keras_model() <span class="overload">[2/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void load_keras_model </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>keras_model_arch_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">json&#160;</td>
+          <td class="paramname"><em>model_arch</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a0498e740cd1cd2712b20e878c6f9d0f3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0498e740cd1cd2712b20e878c6f9d0f3">&#9670;&nbsp;</a></span>load_keras_model() <span class="overload">[3/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void load_keras_model </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>keras_model_arch_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">json&#160;</td>
+          <td class="paramname"><em>model_arch</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea&#160;</td>
+          <td class="paramname"><em>model_weights</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac919b3c142e996acd71848338194aa02"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac919b3c142e996acd71848338194aa02">&#9670;&nbsp;</a></span>load_keras_model() <span class="overload">[4/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void load_keras_model </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>keras_model_arch_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">json&#160;</td>
+          <td class="paramname"><em>model_arch</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea&#160;</td>
+          <td class="paramname"><em>model_weights</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>name</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a51327e5814450c3c5991a2b885cf1ab2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a51327e5814450c3c5991a2b885cf1ab2">&#9670;&nbsp;</a></span>load_keras_model() <span class="overload">[5/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar load_keras_model </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a024b71018a508cb2773a52240c7af121"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a024b71018a508cb2773a52240c7af121">&#9670;&nbsp;</a></span>load_keras_model() <span class="overload">[6/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar load_keras_model </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_7592ceb856cf018f9811e11407c61fda.html">deep_learning</a></li><li class="navelem"><a class="el" href="keras__model__arch__table_8sql__in.html">keras_model_arch_table.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:57 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/kmeans_8sql__in.html b/docs/rc/kmeans_8sql__in.html
new file mode 100644
index 0000000..887c24e
--- /dev/null
+++ b/docs/rc/kmeans_8sql__in.html
@@ -0,0 +1,293 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: kmeans.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('kmeans_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">kmeans.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Set of functions for k-means clustering.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:abcbeb5878d5a31f600764fbb1fbe5578"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="kmeans_8sql__in.html#abcbeb5878d5a31f600764fbb1fbe5578">internal_execute_using_kmeans_args</a> (varchar sql, float8[][], regproc, integer, float8, varchar)</td></tr>
+<tr class="separator:abcbeb5878d5a31f600764fbb1fbe5578"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4a1b8fc3dd6da4d4491927888d70e7b9"><td class="memItemLeft" align="right" valign="top">integer&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="kmeans_8sql__in.html#a4a1b8fc3dd6da4d4491927888d70e7b9">internal_compute_kmeans</a> (varchar rel_args, varchar rel_state, varchar rel_source, varchar expr_point, varchar agg_centroid)</td></tr>
+<tr class="separator:a4a1b8fc3dd6da4d4491927888d70e7b9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6e25194423cccea7a1fc58e68d5a05a8"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="kmeans_8sql__in.html#a6e25194423cccea7a1fc58e68d5a05a8">__kmeans_validate_src</a> (varchar rel_source)</td></tr>
+<tr class="separator:a6e25194423cccea7a1fc58e68d5a05a8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a02b4325792510fbdc539f8e76076e451"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="kmeans_8sql__in.html#a02b4325792510fbdc539f8e76076e451">__kmeans_validate_expr</a> (varchar rel_source, varchar expr_point)</td></tr>
+<tr class="separator:a02b4325792510fbdc539f8e76076e451"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><dl class="section see"><dt>See also</dt><dd>For a brief introduction to k-means clustering, see the module description <a class="el" href="group__grp__kmeans.html">k-Means Clustering</a>. </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="a02b4325792510fbdc539f8e76076e451"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a02b4325792510fbdc539f8e76076e451">&#9670;&nbsp;</a></span>__kmeans_validate_expr()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">boolean __kmeans_validate_expr </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>rel_source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>expr_point</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a6e25194423cccea7a1fc58e68d5a05a8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6e25194423cccea7a1fc58e68d5a05a8">&#9670;&nbsp;</a></span>__kmeans_validate_src()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void __kmeans_validate_src </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>rel_source</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a4a1b8fc3dd6da4d4491927888d70e7b9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4a1b8fc3dd6da4d4491927888d70e7b9">&#9670;&nbsp;</a></span>internal_compute_kmeans()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">integer internal_compute_kmeans </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>rel_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>rel_state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>rel_source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>expr_point</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>agg_centroid</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="abcbeb5878d5a31f600764fbb1fbe5578"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abcbeb5878d5a31f600764fbb1fbe5578">&#9670;&nbsp;</a></span>internal_execute_using_kmeans_args()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void internal_execute_using_kmeans_args </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>sql</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[][], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">regproc&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_73ccba3aa44ce35463f879b4ebbd3f46.html">kmeans</a></li><li class="navelem"><a class="el" href="kmeans_8sql__in.html">kmeans.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:57 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/knn_8sql__in.html b/docs/rc/knn_8sql__in.html
new file mode 100644
index 0000000..4893bf8
--- /dev/null
+++ b/docs/rc/knn_8sql__in.html
@@ -0,0 +1,849 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: knn.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('knn_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">knn.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Set of functions for k-nearest neighbors.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a35157e94fa61948ea5314aef292e0fea"><td class="memItemLeft" align="right" valign="top">integer&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="knn_8sql__in.html#a35157e94fa61948ea5314aef292e0fea">__knn_validate_src</a> (varchar point_source, varchar point_column_name, varchar label_column_name, varchar test_source, varchar test_column_name, varchar test_id, varchar output_table, integer k, boolean output_neighbors, varchar fn_dist)</td></tr>
+<tr class="separator:a35157e94fa61948ea5314aef292e0fea"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a687c300ef3aa00fe938a9b13fd143792"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="knn_8sql__in.html#a687c300ef3aa00fe938a9b13fd143792">knn</a> (varchar point_source, varchar point_column_name, varchar point_id, varchar label_column_name, varchar test_source, varchar test_column_name, varchar test_id, varchar output_table, integer k, boolean output_neighbors, text fn_dist, boolean weighted_avg, varchar algorithm, varchar algorithm_params)</td></tr>
+<tr class="separator:a687c300ef3aa00fe938a9b13fd143792"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac42acf0f15846a4f899b6a187c58e331"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="knn_8sql__in.html#ac42acf0f15846a4f899b6a187c58e331">knn</a> (varchar point_source, varchar point_column_name, varchar point_id, varchar label_column_name, varchar test_source, varchar test_column_name, varchar test_id, varchar output_table, integer k, boolean output_neighbors, text fn_dist, boolean weighted_avg, varchar algorithm)</td></tr>
+<tr class="separator:ac42acf0f15846a4f899b6a187c58e331"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a620b4ece3bc259eb442783f2de32aef0"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="knn_8sql__in.html#a620b4ece3bc259eb442783f2de32aef0">knn</a> (varchar point_source, varchar point_column_name, varchar point_id, varchar label_column_name, varchar test_source, varchar test_column_name, varchar test_id, varchar output_table, integer k, boolean output_neighbors, text fn_dist, boolean weighted_avg)</td></tr>
+<tr class="separator:a620b4ece3bc259eb442783f2de32aef0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8a9a0295a71263ffb66e0775e8e95d18"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="knn_8sql__in.html#a8a9a0295a71263ffb66e0775e8e95d18">knn</a> (varchar point_source, varchar point_column_name, varchar point_id, varchar label_column_name, varchar test_source, varchar test_column_name, varchar test_id, varchar output_table, integer k, boolean output_neighbors, text fn_dist)</td></tr>
+<tr class="separator:a8a9a0295a71263ffb66e0775e8e95d18"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adc1c9019d0460726b18fd165ac990a7a"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="knn_8sql__in.html#adc1c9019d0460726b18fd165ac990a7a">knn</a> (varchar point_source, varchar point_column_name, varchar point_id, varchar label_column_name, varchar test_source, varchar test_column_name, varchar test_id, varchar output_table, integer k, boolean output_neighbors)</td></tr>
+<tr class="separator:adc1c9019d0460726b18fd165ac990a7a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a51549fc4079c186114a7698ecc765358"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="knn_8sql__in.html#a51549fc4079c186114a7698ecc765358">knn</a> (varchar point_source, varchar point_column_name, varchar point_id, varchar label_column_name, varchar test_source, varchar test_column_name, varchar test_id, varchar output_table, integer k)</td></tr>
+<tr class="separator:a51549fc4079c186114a7698ecc765358"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a42cc837c6bb36c1a6131f27cd11ebe98"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="knn_8sql__in.html#a42cc837c6bb36c1a6131f27cd11ebe98">knn</a> (varchar point_source, varchar point_column_name, varchar point_id, varchar label_column_name, varchar test_source, varchar test_column_name, varchar test_id, varchar output_table)</td></tr>
+<tr class="separator:a42cc837c6bb36c1a6131f27cd11ebe98"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa50ce144a6da9dcf99730be0b91e02e3"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="knn_8sql__in.html#aa50ce144a6da9dcf99730be0b91e02e3">knn</a> (varchar message)</td></tr>
+<tr class="separator:aa50ce144a6da9dcf99730be0b91e02e3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9b92399768011dbbffe7d08d2f96ff1d"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="knn_8sql__in.html#a9b92399768011dbbffe7d08d2f96ff1d">knn</a> ()</td></tr>
+<tr class="separator:a9b92399768011dbbffe7d08d2f96ff1d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>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</p>
+<p><a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a></p>
+<p>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.</p>
+<dl class="section see"><dt>See also</dt><dd>For a brief introduction to k-nearest neighbors algorithm for regression and classification, see the module description <a class="el" href="group__grp__knn.html">k-Nearest Neighbors</a>. </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="a35157e94fa61948ea5314aef292e0fea"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a35157e94fa61948ea5314aef292e0fea">&#9670;&nbsp;</a></span>__knn_validate_src()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">integer __knn_validate_src </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>point_source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>point_column_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>label_column_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>test_source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>test_column_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>test_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>k</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>output_neighbors</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>fn_dist</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a687c300ef3aa00fe938a9b13fd143792"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a687c300ef3aa00fe938a9b13fd143792">&#9670;&nbsp;</a></span>knn() <span class="overload">[1/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar knn </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>point_source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>point_column_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>point_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>label_column_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>test_source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>test_column_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>test_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>k</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>output_neighbors</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>fn_dist</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>weighted_avg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>algorithm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>algorithm_params</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac42acf0f15846a4f899b6a187c58e331"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac42acf0f15846a4f899b6a187c58e331">&#9670;&nbsp;</a></span>knn() <span class="overload">[2/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar knn </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>point_source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>point_column_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>point_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>label_column_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>test_source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>test_column_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>test_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>k</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>output_neighbors</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>fn_dist</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>weighted_avg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>algorithm</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a620b4ece3bc259eb442783f2de32aef0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a620b4ece3bc259eb442783f2de32aef0">&#9670;&nbsp;</a></span>knn() <span class="overload">[3/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar knn </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>point_source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>point_column_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>point_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>label_column_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>test_source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>test_column_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>test_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>k</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>output_neighbors</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>fn_dist</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>weighted_avg</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8a9a0295a71263ffb66e0775e8e95d18"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8a9a0295a71263ffb66e0775e8e95d18">&#9670;&nbsp;</a></span>knn() <span class="overload">[4/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar knn </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>point_source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>point_column_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>point_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>label_column_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>test_source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>test_column_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>test_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>k</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>output_neighbors</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>fn_dist</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="adc1c9019d0460726b18fd165ac990a7a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adc1c9019d0460726b18fd165ac990a7a">&#9670;&nbsp;</a></span>knn() <span class="overload">[5/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar knn </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>point_source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>point_column_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>point_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>label_column_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>test_source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>test_column_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>test_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>k</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>output_neighbors</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a51549fc4079c186114a7698ecc765358"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a51549fc4079c186114a7698ecc765358">&#9670;&nbsp;</a></span>knn() <span class="overload">[6/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar knn </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>point_source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>point_column_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>point_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>label_column_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>test_source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>test_column_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>test_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>k</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a42cc837c6bb36c1a6131f27cd11ebe98"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a42cc837c6bb36c1a6131f27cd11ebe98">&#9670;&nbsp;</a></span>knn() <span class="overload">[7/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar knn </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>point_source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>point_column_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>point_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>label_column_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>test_source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>test_column_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>test_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa50ce144a6da9dcf99730be0b91e02e3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa50ce144a6da9dcf99730be0b91e02e3">&#9670;&nbsp;</a></span>knn() <span class="overload">[8/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar knn </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a9b92399768011dbbffe7d08d2f96ff1d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9b92399768011dbbffe7d08d2f96ff1d">&#9670;&nbsp;</a></span>knn() <span class="overload">[9/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar knn </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_b19a2d10787fafb5edd4ef1da0d2cacf.html">knn</a></li><li class="navelem"><a class="el" href="knn_8sql__in.html">knn.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:57 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/lda_8sql__in.html b/docs/rc/lda_8sql__in.html
new file mode 100644
index 0000000..88e4c2a
--- /dev/null
+++ b/docs/rc/lda_8sql__in.html
@@ -0,0 +1,1565 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: lda.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('lda_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">lda.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>SQL functions for Latent Dirichlet Allocation.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:aeb7593251a4dedb695494f65dc2d1f80"><td class="memItemLeft" align="right" valign="top">set&lt; lda_result &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lda_8sql__in.html#aeb7593251a4dedb695494f65dc2d1f80">lda_train</a> (text data_table, text model_table, text output_data_table, int4 voc_size, int4 topic_num, int4 iter_num, float8 alpha, float8 beta)</td></tr>
+<tr class="memdesc:aeb7593251a4dedb695494f65dc2d1f80"><td class="mdescLeft">&#160;</td><td class="mdescRight">This UDF provides an entry for the lda training process.  <a href="#aeb7593251a4dedb695494f65dc2d1f80">More...</a><br /></td></tr>
+<tr class="separator:aeb7593251a4dedb695494f65dc2d1f80"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac154c2e71664bdc81f7d6c9d0d491ca1"><td class="memItemLeft" align="right" valign="top">set&lt; lda_result &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lda_8sql__in.html#ac154c2e71664bdc81f7d6c9d0d491ca1">lda_train</a> (text data_table, text model_table, text output_data_table, int4 voc_size, int4 topic_num, int4 iter_num, float8 alpha, float8 beta, int4 evaluate_every, float8 perplexity_tol)</td></tr>
+<tr class="separator:ac154c2e71664bdc81f7d6c9d0d491ca1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a006d5a0963cc300a81b9fd1d0fdd98da"><td class="memItemLeft" align="right" valign="top">set&lt; lda_result &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lda_8sql__in.html#a006d5a0963cc300a81b9fd1d0fdd98da">lda_train</a> (text data_table, text model_table, text output_data_table, int4 voc_size, int4 topic_num, int4 iter_num, float8 alpha, float8 beta, int4 evaluate_every)</td></tr>
+<tr class="separator:a006d5a0963cc300a81b9fd1d0fdd98da"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af1fde06c39dd12bb9e5544997f815323"><td class="memItemLeft" align="right" valign="top">set&lt; lda_result &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lda_8sql__in.html#af1fde06c39dd12bb9e5544997f815323">lda_predict</a> (text data_table, text model_table, text output_table)</td></tr>
+<tr class="memdesc:af1fde06c39dd12bb9e5544997f815323"><td class="mdescLeft">&#160;</td><td class="mdescRight">This UDF provides an entry for the lda predicton process.  <a href="#af1fde06c39dd12bb9e5544997f815323">More...</a><br /></td></tr>
+<tr class="separator:af1fde06c39dd12bb9e5544997f815323"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaa89e30c8fd0ba41b6feee01ee195330"><td class="memItemLeft" align="right" valign="top">set&lt; lda_result &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lda_8sql__in.html#aaa89e30c8fd0ba41b6feee01ee195330">lda_predict</a> (text data_table, text model_table, text output_table, int4 iter_num)</td></tr>
+<tr class="memdesc:aaa89e30c8fd0ba41b6feee01ee195330"><td class="mdescLeft">&#160;</td><td class="mdescRight">A overloaded version which allows users to specify iter_num.  <a href="#aaa89e30c8fd0ba41b6feee01ee195330">More...</a><br /></td></tr>
+<tr class="separator:aaa89e30c8fd0ba41b6feee01ee195330"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ace20b6314e5b4e98929a98a6f05d925d"><td class="memItemLeft" align="right" valign="top">set&lt; lda_result &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lda_8sql__in.html#ace20b6314e5b4e98929a98a6f05d925d">lda_get_topic_word_count</a> (text model_table, text output_table)</td></tr>
+<tr class="memdesc:ace20b6314e5b4e98929a98a6f05d925d"><td class="mdescLeft">&#160;</td><td class="mdescRight">This UDF computes the per-topic word counts.  <a href="#ace20b6314e5b4e98929a98a6f05d925d">More...</a><br /></td></tr>
+<tr class="separator:ace20b6314e5b4e98929a98a6f05d925d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a455699e72328d6b105c61a3c9e7ae5dc"><td class="memItemLeft" align="right" valign="top">set&lt; lda_result &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lda_8sql__in.html#a455699e72328d6b105c61a3c9e7ae5dc">lda_get_word_topic_count</a> (text model_table, text output_table)</td></tr>
+<tr class="memdesc:a455699e72328d6b105c61a3c9e7ae5dc"><td class="mdescLeft">&#160;</td><td class="mdescRight">This UDF computes the per-word topic counts.  <a href="#a455699e72328d6b105c61a3c9e7ae5dc">More...</a><br /></td></tr>
+<tr class="separator:a455699e72328d6b105c61a3c9e7ae5dc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4ac16d87d50821aadcab0d75d65b3f1b"><td class="memItemLeft" align="right" valign="top">set&lt; lda_result &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lda_8sql__in.html#a4ac16d87d50821aadcab0d75d65b3f1b">lda_get_topic_desc</a> (text model_table, text vocab_table, text desc_table, int4 top_k)</td></tr>
+<tr class="memdesc:a4ac16d87d50821aadcab0d75d65b3f1b"><td class="mdescLeft">&#160;</td><td class="mdescRight">This UDF gets the description for each topic (top-k words)  <a href="#a4ac16d87d50821aadcab0d75d65b3f1b">More...</a><br /></td></tr>
+<tr class="separator:a4ac16d87d50821aadcab0d75d65b3f1b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afa13f3db33ee5ef4fef17f5daafa866e"><td class="memItemLeft" align="right" valign="top">set&lt; lda_result &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lda_8sql__in.html#afa13f3db33ee5ef4fef17f5daafa866e">lda_get_word_topic_mapping</a> (text lda_output_table, text mapping_table)</td></tr>
+<tr class="memdesc:afa13f3db33ee5ef4fef17f5daafa866e"><td class="mdescLeft">&#160;</td><td class="mdescRight">This UDF gets the wordid - topicid mapping from the lda training output table.  <a href="#afa13f3db33ee5ef4fef17f5daafa866e">More...</a><br /></td></tr>
+<tr class="separator:afa13f3db33ee5ef4fef17f5daafa866e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3cdff7ba417e1a9c1b221f23bc2aac64"><td class="memItemLeft" align="right" valign="top">int4 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lda_8sql__in.html#a3cdff7ba417e1a9c1b221f23bc2aac64">__lda_random_assign</a> (int4 word_count, int4 topic_num)</td></tr>
+<tr class="memdesc:a3cdff7ba417e1a9c1b221f23bc2aac64"><td class="mdescLeft">&#160;</td><td class="mdescRight">This UDF assigns topics to words in a document randomly.  <a href="#a3cdff7ba417e1a9c1b221f23bc2aac64">More...</a><br /></td></tr>
+<tr class="separator:a3cdff7ba417e1a9c1b221f23bc2aac64"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab2640fce837da813a3b6fff38dc713d8"><td class="memItemLeft" align="right" valign="top">int4 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lda_8sql__in.html#ab2640fce837da813a3b6fff38dc713d8">__lda_gibbs_sample</a> (int4[] words, int4[] counts, int4[] doc_topic, int8[] model, float8 alpha, float8 beta, int4 voc_size, int4 topic_num, int4 iter_num)</td></tr>
+<tr class="memdesc:ab2640fce837da813a3b6fff38dc713d8"><td class="mdescLeft">&#160;</td><td class="mdescRight">This UDF learns the topics of words in a document and is the main step of a Gibbs sampling iteration. The model parameter (including the per-word topic counts and corpus-level topic counts) is passed to this function in the first call and then transfered to the rest calls through fcinfo-&gt;flinfo-&gt;fn_extra to allow the immediate update.  <a href="#ab2640fce837da813a3b6fff38dc713d8">More...</a><br /></td></tr>
+<tr class="separator:ab2640fce837da813a3b6fff38dc713d8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad72ac6a8db5e26ef6ca8e7c2563bec94"><td class="memItemLeft" align="right" valign="top">int8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lda_8sql__in.html#ad72ac6a8db5e26ef6ca8e7c2563bec94">__lda_count_topic_sfunc</a> (int8[] state, int4[] words, int4[] counts, int4[] topic_assignment, int4 voc_size, int4 topic_num)</td></tr>
+<tr class="memdesc:ad72ac6a8db5e26ef6ca8e7c2563bec94"><td class="mdescLeft">&#160;</td><td class="mdescRight">This UDF is the sfunc for the aggregator computing the topic counts for each word and the topic count in the whole corpus. It scans the topic assignments in a document and updates the topic counts.  <a href="#ad72ac6a8db5e26ef6ca8e7c2563bec94">More...</a><br /></td></tr>
+<tr class="separator:ad72ac6a8db5e26ef6ca8e7c2563bec94"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae9987628d56799cd5fadccc92dff3110"><td class="memItemLeft" align="right" valign="top">int8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lda_8sql__in.html#ae9987628d56799cd5fadccc92dff3110">__lda_count_topic_prefunc</a> (int8[] state1, int8[] state2)</td></tr>
+<tr class="memdesc:ae9987628d56799cd5fadccc92dff3110"><td class="mdescLeft">&#160;</td><td class="mdescRight">This UDF is the prefunc for the aggregator computing the per-word topic counts.  <a href="#ae9987628d56799cd5fadccc92dff3110">More...</a><br /></td></tr>
+<tr class="separator:ae9987628d56799cd5fadccc92dff3110"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acdae83c5837155ea3663b34db4521e86"><td class="memItemLeft" align="right" valign="top">aggregate int8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lda_8sql__in.html#acdae83c5837155ea3663b34db4521e86">__lda_count_topic_agg</a> (int4[], int4[], int4[], int4, int4)</td></tr>
+<tr class="memdesc:acdae83c5837155ea3663b34db4521e86"><td class="mdescLeft">&#160;</td><td class="mdescRight">This uda computes the word topic counts by scanning and summing up topic assignments in each document.  <a href="#acdae83c5837155ea3663b34db4521e86">More...</a><br /></td></tr>
+<tr class="separator:acdae83c5837155ea3663b34db4521e86"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a25c3ef12d9808d8a38c5fd2630f3b5a9"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lda_8sql__in.html#a25c3ef12d9808d8a38c5fd2630f3b5a9">lda_get_perplexity</a> (text model_table, text output_data_table)</td></tr>
+<tr class="memdesc:a25c3ef12d9808d8a38c5fd2630f3b5a9"><td class="mdescLeft">&#160;</td><td class="mdescRight">This UDF computes the perplexity given the output data table and the model table.  <a href="#a25c3ef12d9808d8a38c5fd2630f3b5a9">More...</a><br /></td></tr>
+<tr class="separator:a25c3ef12d9808d8a38c5fd2630f3b5a9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5defc3ef61cabeaf343a2e1d9988f8da"><td class="memItemLeft" align="right" valign="top">int8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lda_8sql__in.html#a5defc3ef61cabeaf343a2e1d9988f8da">__lda_perplexity_sfunc</a> (int8[] state, int4[] words, int4[] counts, int4[] doc_topic, int8[] model, float8 alpha, float8 beta, int4 voc_size, int4 topic_num)</td></tr>
+<tr class="memdesc:a5defc3ef61cabeaf343a2e1d9988f8da"><td class="mdescLeft">&#160;</td><td class="mdescRight">This UDF is the sfunc for the aggregator computing the perpleixty.  <a href="#a5defc3ef61cabeaf343a2e1d9988f8da">More...</a><br /></td></tr>
+<tr class="separator:a5defc3ef61cabeaf343a2e1d9988f8da"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a78a90c564e975e9a170b83ddeb6bd11c"><td class="memItemLeft" align="right" valign="top">int8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lda_8sql__in.html#a78a90c564e975e9a170b83ddeb6bd11c">__lda_perplexity_prefunc</a> (int8[] state1, int8[] state2)</td></tr>
+<tr class="memdesc:a78a90c564e975e9a170b83ddeb6bd11c"><td class="mdescLeft">&#160;</td><td class="mdescRight">This UDF is the prefunc for the aggregator computing the perplexity.  <a href="#a78a90c564e975e9a170b83ddeb6bd11c">More...</a><br /></td></tr>
+<tr class="separator:a78a90c564e975e9a170b83ddeb6bd11c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abf691da12a45408203b82940644dc34e"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lda_8sql__in.html#abf691da12a45408203b82940644dc34e">__lda_perplexity_ffunc</a> (int8[] state)</td></tr>
+<tr class="memdesc:abf691da12a45408203b82940644dc34e"><td class="mdescLeft">&#160;</td><td class="mdescRight">This UDF is the finalfunc for the aggregator computing the perplexity.  <a href="#abf691da12a45408203b82940644dc34e">More...</a><br /></td></tr>
+<tr class="separator:abf691da12a45408203b82940644dc34e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa9bc2a38ba29636740deb01aad241050"><td class="memItemLeft" align="right" valign="top">aggregate int8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lda_8sql__in.html#aa9bc2a38ba29636740deb01aad241050">__lda_perplexity_agg</a> (int4[], int4[], int4[], int8[], float8, float8, int4, int4)</td></tr>
+<tr class="separator:aa9bc2a38ba29636740deb01aad241050"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0eefd7b201fda5289554b7d43366865b"><td class="memItemLeft" align="right" valign="top">int4 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lda_8sql__in.html#a0eefd7b201fda5289554b7d43366865b">__lda_check_count_ceiling</a> (int8[] arr, int4 r, int4 c)</td></tr>
+<tr class="separator:a0eefd7b201fda5289554b7d43366865b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2fcec45a37b459567ad0bbcd42c07142"><td class="memItemLeft" align="right" valign="top">set&lt; int4[]&gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lda_8sql__in.html#a2fcec45a37b459567ad0bbcd42c07142">__lda_util_unnest</a> (int8[] arr, int4 r, int4 c)</td></tr>
+<tr class="memdesc:a2fcec45a37b459567ad0bbcd42c07142"><td class="mdescLeft">&#160;</td><td class="mdescRight">Unnest a 2-D array into a set of 1-D arrays.  <a href="#a2fcec45a37b459567ad0bbcd42c07142">More...</a><br /></td></tr>
+<tr class="separator:a2fcec45a37b459567ad0bbcd42c07142"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a219c8432558301878384e5ef8aca1e3d"><td class="memItemLeft" align="right" valign="top">set&lt; int4[]&gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lda_8sql__in.html#a219c8432558301878384e5ef8aca1e3d">__lda_util_unnest_transpose</a> (int8[] arr, int4 r, int4 c)</td></tr>
+<tr class="separator:a219c8432558301878384e5ef8aca1e3d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2db0019220f10a1fca78ed77a5c2dcd5"><td class="memItemLeft" align="right" valign="top">int8 [][]&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lda_8sql__in.html#a2db0019220f10a1fca78ed77a5c2dcd5">__lda_util_transpose</a> (int8[][] matrix)</td></tr>
+<tr class="memdesc:a2db0019220f10a1fca78ed77a5c2dcd5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Transpose a 2-D array.  <a href="#a2db0019220f10a1fca78ed77a5c2dcd5">More...</a><br /></td></tr>
+<tr class="separator:a2db0019220f10a1fca78ed77a5c2dcd5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9b522ce2d080956d7fb3d5ae79195b8a"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lda_8sql__in.html#a9b522ce2d080956d7fb3d5ae79195b8a">__lda_util_norm_with_smoothing</a> (float8[] arr, float8 smooth)</td></tr>
+<tr class="memdesc:a9b522ce2d080956d7fb3d5ae79195b8a"><td class="mdescLeft">&#160;</td><td class="mdescRight">L1 normalization with smoothing.  <a href="#a9b522ce2d080956d7fb3d5ae79195b8a">More...</a><br /></td></tr>
+<tr class="separator:a9b522ce2d080956d7fb3d5ae79195b8a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa9729b6bcc20d00936b6831382747c2f"><td class="memItemLeft" align="right" valign="top">int4 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lda_8sql__in.html#aa9729b6bcc20d00936b6831382747c2f">__lda_util_index_sort</a> (float8[] arr)</td></tr>
+<tr class="memdesc:aa9729b6bcc20d00936b6831382747c2f"><td class="mdescLeft">&#160;</td><td class="mdescRight">This UDF returns the index of elements in a sorted order.  <a href="#aa9729b6bcc20d00936b6831382747c2f">More...</a><br /></td></tr>
+<tr class="separator:aa9729b6bcc20d00936b6831382747c2f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0032ed0be0c41a1b6ed08dca93f4a59f"><td class="memItemLeft" align="right" valign="top">set&lt; lda_result &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lda_8sql__in.html#a0032ed0be0c41a1b6ed08dca93f4a59f">__lda_util_norm_vocab</a> (text vocab_table, text output_vocab_table)</td></tr>
+<tr class="memdesc:a0032ed0be0c41a1b6ed08dca93f4a59f"><td class="mdescLeft">&#160;</td><td class="mdescRight">This UDF checks the vocabulary and converts non-continous wordids into continuous integers ranging from 0 to voc_size - 1.  <a href="#a0032ed0be0c41a1b6ed08dca93f4a59f">More...</a><br /></td></tr>
+<tr class="separator:a0032ed0be0c41a1b6ed08dca93f4a59f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a85990f0bc07a2ab8834301561662939e"><td class="memItemLeft" align="right" valign="top">set&lt; lda_result &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lda_8sql__in.html#a85990f0bc07a2ab8834301561662939e">__lda_util_norm_dataset</a> (text data_table, text norm_vocab_table, text output_data_table)</td></tr>
+<tr class="memdesc:a85990f0bc07a2ab8834301561662939e"><td class="mdescLeft">&#160;</td><td class="mdescRight">This UDF converts the data table according to the normalized vocabulary, and all rows with non-positive count values will be removed.  <a href="#a85990f0bc07a2ab8834301561662939e">More...</a><br /></td></tr>
+<tr class="separator:a85990f0bc07a2ab8834301561662939e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa4fd0a274f1c400014f2ea9549507436"><td class="memItemLeft" align="right" valign="top">set&lt; lda_result &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lda_8sql__in.html#aa4fd0a274f1c400014f2ea9549507436">__lda_util_conorm_data</a> (text data_table, text vocab_table, text output_data_table, text output_vocab_table)</td></tr>
+<tr class="memdesc:aa4fd0a274f1c400014f2ea9549507436"><td class="mdescLeft">&#160;</td><td class="mdescRight">This UDF extracts the list of wordids from the data table and joins it with the vocabulary table to get the list of common wordids, next it will normalize the vocabulary based on the common wordids and then normalize the data table based on the normalized vocabulary.  <a href="#aa4fd0a274f1c400014f2ea9549507436">More...</a><br /></td></tr>
+<tr class="separator:aa4fd0a274f1c400014f2ea9549507436"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3ea35eb8ae6670a07948a56b85c1710c"><td class="memItemLeft" align="right" valign="top">_pivotalr_lda_model&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lda_8sql__in.html#a3ea35eb8ae6670a07948a56b85c1710c">lda_parse_model</a> (bigint[] lda_model, integer voc_size, integer topic_num)</td></tr>
+<tr class="separator:a3ea35eb8ae6670a07948a56b85c1710c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><dl class="section date"><dt>Date</dt><dd>Dec 2012</dd></dl>
+<dl class="section see"><dt>See also</dt><dd>For an introduction to Latent Dirichlet Allocation models, see the module description <a class="el" href="group__grp__lda.html">Latent Dirichlet Allocation</a>. </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="a0eefd7b201fda5289554b7d43366865b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0eefd7b201fda5289554b7d43366865b">&#9670;&nbsp;</a></span>__lda_check_count_ceiling()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int4 [] __lda_check_count_ceiling </td>
+          <td>(</td>
+          <td class="paramtype">int8 []&#160;</td>
+          <td class="paramname"><em>arr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>c</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="acdae83c5837155ea3663b34db4521e86"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acdae83c5837155ea3663b34db4521e86">&#9670;&nbsp;</a></span>__lda_count_topic_agg()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate int8 [] __lda_count_topic_agg </td>
+          <td>(</td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">words</td><td>The unique words in the document </td></tr>
+    <tr><td class="paramname">counts</td><td>The counts of each unique words in the document </td></tr>
+    <tr><td class="paramname">topic_assignment</td><td>The topic assignments in the document </td></tr>
+    <tr><td class="paramname">voc_size</td><td>The size of vocabulary </td></tr>
+    <tr><td class="paramname">topic_num</td><td>The number of topics </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The word topic counts (a 1-d array embeding a 2-d array) </dd></dl>
+
+</div>
+</div>
+<a id="ae9987628d56799cd5fadccc92dff3110"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae9987628d56799cd5fadccc92dff3110">&#9670;&nbsp;</a></span>__lda_count_topic_prefunc()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int8 [] __lda_count_topic_prefunc </td>
+          <td>(</td>
+          <td class="paramtype">int8 []&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int8 []&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">state1</td><td>The local word topic counts </td></tr>
+    <tr><td class="paramname">state2</td><td>The local word topic counts </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The element-wise sum of two local states </dd></dl>
+
+</div>
+</div>
+<a id="ad72ac6a8db5e26ef6ca8e7c2563bec94"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad72ac6a8db5e26ef6ca8e7c2563bec94">&#9670;&nbsp;</a></span>__lda_count_topic_sfunc()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int8 [] __lda_count_topic_sfunc </td>
+          <td>(</td>
+          <td class="paramtype">int8 []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4 []&#160;</td>
+          <td class="paramname"><em>words</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4 []&#160;</td>
+          <td class="paramname"><em>counts</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4 []&#160;</td>
+          <td class="paramname"><em>topic_assignment</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>voc_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>topic_num</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">state</td><td>The topic counts </td></tr>
+    <tr><td class="paramname">words</td><td>The unique words in the document </td></tr>
+    <tr><td class="paramname">counts</td><td>The counts of each unique words in the document (sum(counts) = word_count) </td></tr>
+    <tr><td class="paramname">topic_assignment</td><td>The topic assignments in the document </td></tr>
+    <tr><td class="paramname">voc_size</td><td>The size of vocabulary </td></tr>
+    <tr><td class="paramname">topic_num</td><td>The number of topics </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The updated state </dd></dl>
+
+</div>
+</div>
+<a id="ab2640fce837da813a3b6fff38dc713d8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab2640fce837da813a3b6fff38dc713d8">&#9670;&nbsp;</a></span>__lda_gibbs_sample()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int4 [] __lda_gibbs_sample </td>
+          <td>(</td>
+          <td class="paramtype">int4 []&#160;</td>
+          <td class="paramname"><em>words</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4 []&#160;</td>
+          <td class="paramname"><em>counts</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4 []&#160;</td>
+          <td class="paramname"><em>doc_topic</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int8 []&#160;</td>
+          <td class="paramname"><em>model</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>beta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>voc_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>topic_num</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>iter_num</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">words</td><td>The set of unique words in the document </td></tr>
+    <tr><td class="paramname">counts</td><td>The counts of each unique words in the document (sum(counts) = word_count) </td></tr>
+    <tr><td class="paramname">doc_topic</td><td>The current per-doc topic counts and topic assignments </td></tr>
+    <tr><td class="paramname">model</td><td>The current model (including the per-word topic counts and the corpus-level topic counts) </td></tr>
+    <tr><td class="paramname">alpha</td><td>The Dirichlet parameter for per-document topic multinomial </td></tr>
+    <tr><td class="paramname">beta</td><td>The Dirichlet parameter for per-topic word multinomial </td></tr>
+    <tr><td class="paramname">voc_size</td><td>The size of vocabulary </td></tr>
+    <tr><td class="paramname">topic_num</td><td>The number of topics </td></tr>
+    <tr><td class="paramname">iter_num</td><td>The number of iterations </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The learned topic counts and topic assignments </dd></dl>
+
+</div>
+</div>
+<a id="aa9bc2a38ba29636740deb01aad241050"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa9bc2a38ba29636740deb01aad241050">&#9670;&nbsp;</a></span>__lda_perplexity_agg()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate int8 [] __lda_perplexity_agg </td>
+          <td>(</td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="abf691da12a45408203b82940644dc34e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abf691da12a45408203b82940644dc34e">&#9670;&nbsp;</a></span>__lda_perplexity_ffunc()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 __lda_perplexity_ffunc </td>
+          <td>(</td>
+          <td class="paramtype">int8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">state</td><td>The merged state </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The perpleixty </dd></dl>
+
+</div>
+</div>
+<a id="a78a90c564e975e9a170b83ddeb6bd11c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a78a90c564e975e9a170b83ddeb6bd11c">&#9670;&nbsp;</a></span>__lda_perplexity_prefunc()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int8 [] __lda_perplexity_prefunc </td>
+          <td>(</td>
+          <td class="paramtype">int8 []&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int8 []&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">state1</td><td>The local state </td></tr>
+    <tr><td class="paramname">state2</td><td>The local state </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The merged state </dd></dl>
+
+</div>
+</div>
+<a id="a5defc3ef61cabeaf343a2e1d9988f8da"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5defc3ef61cabeaf343a2e1d9988f8da">&#9670;&nbsp;</a></span>__lda_perplexity_sfunc()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int8 [] __lda_perplexity_sfunc </td>
+          <td>(</td>
+          <td class="paramtype">int8 []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4 []&#160;</td>
+          <td class="paramname"><em>words</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4 []&#160;</td>
+          <td class="paramname"><em>counts</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4 []&#160;</td>
+          <td class="paramname"><em>doc_topic</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int8 []&#160;</td>
+          <td class="paramname"><em>model</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>beta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>voc_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>topic_num</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">state</td><td>The cached model plus perplexity </td></tr>
+    <tr><td class="paramname">words</td><td>The unique words in the document </td></tr>
+    <tr><td class="paramname">counts</td><td>The counts of each unique words in the document </td></tr>
+    <tr><td class="paramname">doc_topic</td><td>The topic counts in the document </td></tr>
+    <tr><td class="paramname">model</td><td>The learned model </td></tr>
+    <tr><td class="paramname">alpha</td><td>The Dirichlet parameter for per-document topic multinomial </td></tr>
+    <tr><td class="paramname">beta</td><td>The Dirichlet parameter for per-topic word multinomial </td></tr>
+    <tr><td class="paramname">voc_size</td><td>The size of vocabulary </td></tr>
+    <tr><td class="paramname">topic_num</td><td>The number of topics </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The updated state </dd></dl>
+
+</div>
+</div>
+<a id="a3cdff7ba417e1a9c1b221f23bc2aac64"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3cdff7ba417e1a9c1b221f23bc2aac64">&#9670;&nbsp;</a></span>__lda_random_assign()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int4 [] __lda_random_assign </td>
+          <td>(</td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>word_count</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>topic_num</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">word_count</td><td>The number of words in the document </td></tr>
+    <tr><td class="paramname">topic_num</td><td>The number of topics (specified by the user) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The topic counts and topic assignments </dd></dl>
+
+</div>
+</div>
+<a id="aa4fd0a274f1c400014f2ea9549507436"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa4fd0a274f1c400014f2ea9549507436">&#9670;&nbsp;</a></span>__lda_util_conorm_data()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">set&lt;lda_result&gt; __lda_util_conorm_data </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>data_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>vocab_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_data_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_vocab_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">data_table</td><td>The data table to be normalized </td></tr>
+    <tr><td class="paramname">vocab_table</td><td>The vocabulary table to be normalized </td></tr>
+    <tr><td class="paramname">output_data_table</td><td>The normalized data table </td></tr>
+    <tr><td class="paramname">output_vocab_table</td><td>The normalized vocabulary table </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="aa9729b6bcc20d00936b6831382747c2f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa9729b6bcc20d00936b6831382747c2f">&#9670;&nbsp;</a></span>__lda_util_index_sort()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int4 [] __lda_util_index_sort </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>arr</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">arr</td><td>The array to be sorted </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The index of elements </dd></dl>
+
+</div>
+</div>
+<a id="a85990f0bc07a2ab8834301561662939e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a85990f0bc07a2ab8834301561662939e">&#9670;&nbsp;</a></span>__lda_util_norm_dataset()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">set&lt;lda_result&gt; __lda_util_norm_dataset </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>data_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>norm_vocab_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_data_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">data_table</td><td>The data table to be normalized </td></tr>
+    <tr><td class="paramname">vocab_table</td><td>The normalized vocabulary table </td></tr>
+    <tr><td class="paramname">output_data_table</td><td>The normalized data table </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a0032ed0be0c41a1b6ed08dca93f4a59f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0032ed0be0c41a1b6ed08dca93f4a59f">&#9670;&nbsp;</a></span>__lda_util_norm_vocab()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">set&lt;lda_result&gt; __lda_util_norm_vocab </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>vocab_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_vocab_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">vocab_table</td><td>The vocabulary table in the form of &lt;wordid::int4, word::text&gt; </td></tr>
+    <tr><td class="paramname">output_vocab_table</td><td>The regularized vocabulary table </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a9b522ce2d080956d7fb3d5ae79195b8a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9b522ce2d080956d7fb3d5ae79195b8a">&#9670;&nbsp;</a></span>__lda_util_norm_with_smoothing()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __lda_util_norm_with_smoothing </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>arr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>smooth</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">arr</td><td>The array to be normalized </td></tr>
+    <tr><td class="paramname">smooth</td><td>The smoothing parameter </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The normalized vector </dd></dl>
+
+</div>
+</div>
+<a id="a2db0019220f10a1fca78ed77a5c2dcd5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2db0019220f10a1fca78ed77a5c2dcd5">&#9670;&nbsp;</a></span>__lda_util_transpose()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int8 [][] __lda_util_transpose </td>
+          <td>(</td>
+          <td class="paramtype">int8&#160;</td>
+          <td class="paramname"><em>matrix</em>[][]</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">matrix</td><td>The input 2-D array </td></tr>
+    <tr><td class="paramname">The</td><td>transposed array </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a2fcec45a37b459567ad0bbcd42c07142"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2fcec45a37b459567ad0bbcd42c07142">&#9670;&nbsp;</a></span>__lda_util_unnest()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">set&lt;int4[]&gt; __lda_util_unnest </td>
+          <td>(</td>
+          <td class="paramtype">int8 []&#160;</td>
+          <td class="paramname"><em>arr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>c</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">arr</td><td>The 2-D array to be unnested </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The unnested 1-D arrays </dd></dl>
+
+</div>
+</div>
+<a id="a219c8432558301878384e5ef8aca1e3d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a219c8432558301878384e5ef8aca1e3d">&#9670;&nbsp;</a></span>__lda_util_unnest_transpose()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">set&lt;int4[]&gt; __lda_util_unnest_transpose </td>
+          <td>(</td>
+          <td class="paramtype">int8 []&#160;</td>
+          <td class="paramname"><em>arr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>c</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a25c3ef12d9808d8a38c5fd2630f3b5a9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a25c3ef12d9808d8a38c5fd2630f3b5a9">&#9670;&nbsp;</a></span>lda_get_perplexity()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 lda_get_perplexity </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_data_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">model_table</td><td>The model table generated by lda_train </td></tr>
+    <tr><td class="paramname">output_data_table</td><td>The output data table generated by lda_predict </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The perplexity </dd></dl>
+
+</div>
+</div>
+<a id="a4ac16d87d50821aadcab0d75d65b3f1b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4ac16d87d50821aadcab0d75d65b3f1b">&#9670;&nbsp;</a></span>lda_get_topic_desc()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">set&lt;lda_result&gt; lda_get_topic_desc </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>vocab_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>desc_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>top_k</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">model_table</td><td>The model table generated by the training process </td></tr>
+    <tr><td class="paramname">vocab_table</td><td>The vocabulary table (&lt;wordid, word&gt;) </td></tr>
+    <tr><td class="paramname">top_k</td><td>The number of top words for each topic description </td></tr>
+    <tr><td class="paramname">desc_table</td><td>The output table for storing the per-topic description </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="ace20b6314e5b4e98929a98a6f05d925d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ace20b6314e5b4e98929a98a6f05d925d">&#9670;&nbsp;</a></span>lda_get_topic_word_count()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">set&lt;lda_result&gt; lda_get_topic_word_count </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">model_table</td><td>The model table generated by the training process </td></tr>
+    <tr><td class="paramname">output_table</td><td>The output table storing the per-topic word counts </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a455699e72328d6b105c61a3c9e7ae5dc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a455699e72328d6b105c61a3c9e7ae5dc">&#9670;&nbsp;</a></span>lda_get_word_topic_count()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">set&lt;lda_result&gt; lda_get_word_topic_count </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">model_table</td><td>The model table generated by the training process </td></tr>
+    <tr><td class="paramname">dist_table</td><td>The output table storing the per-word topic counts </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="afa13f3db33ee5ef4fef17f5daafa866e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afa13f3db33ee5ef4fef17f5daafa866e">&#9670;&nbsp;</a></span>lda_get_word_topic_mapping()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">set&lt;lda_result&gt; lda_get_word_topic_mapping </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>lda_output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>mapping_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">lda_output_table</td><td>The output table from lda traning or predicting </td></tr>
+    <tr><td class="paramname">mapping_table</td><td>The result table that saves the mapping info </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a3ea35eb8ae6670a07948a56b85c1710c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3ea35eb8ae6670a07948a56b85c1710c">&#9670;&nbsp;</a></span>lda_parse_model()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">_pivotalr_lda_model lda_parse_model </td>
+          <td>(</td>
+          <td class="paramtype">bigint []&#160;</td>
+          <td class="paramname"><em>lda_model</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>voc_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>topic_num</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="af1fde06c39dd12bb9e5544997f815323"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af1fde06c39dd12bb9e5544997f815323">&#9670;&nbsp;</a></span>lda_predict() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">set&lt;lda_result&gt; lda_predict </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>data_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">data_table</td><td>Table storing the testing dataset, each row is in the form of &lt;docid, wordid, count&gt; where docid, wordid, and count are all non-negative integers. </td></tr>
+    <tr><td class="paramname">model_table</td><td>Table storing the learned models </td></tr>
+    <tr><td class="paramname">output_table</td><td>Table storing per-document topic counts and topic assignments </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section note"><dt>Note</dt><dd>default iter_num = 20 </dd></dl>
+
+</div>
+</div>
+<a id="aaa89e30c8fd0ba41b6feee01ee195330"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aaa89e30c8fd0ba41b6feee01ee195330">&#9670;&nbsp;</a></span>lda_predict() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">set&lt;lda_result&gt; lda_predict </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>data_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>iter_num</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aeb7593251a4dedb695494f65dc2d1f80"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aeb7593251a4dedb695494f65dc2d1f80">&#9670;&nbsp;</a></span>lda_train() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">set&lt;lda_result&gt; lda_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>data_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_data_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>voc_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>topic_num</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>iter_num</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>beta</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">data_table</td><td>Table storing the training dataset, each row is in the form of &lt;docid, wordid, count&gt; where docid, wordid, and count are all non-negative integers. </td></tr>
+    <tr><td class="paramname">model_table</td><td>Table storing the learned models (voc_size, topic_num, alpha, beta, per-word topic counts, and corpus-level topic counts) </td></tr>
+    <tr><td class="paramname">output_data_table</td><td>Table storing the output data table in the form of &lt;docid, wordcount, words, counts, topic_count, topic_assignment&gt; </td></tr>
+    <tr><td class="paramname">voc_size</td><td>Size of the vocabulary (Note that the wordid should be continous integers starting from 0 to voc_size -<ol type="1">
+<li>A data validation rountine will be called to validate the dataset.) </li>
+</ol>
+</td></tr>
+    <tr><td class="paramname">topic_num</td><td>Number of topics (e.g. 100) </td></tr>
+    <tr><td class="paramname">iter_num</td><td>Number of iterations (e.g. 60) </td></tr>
+    <tr><td class="paramname">alpha</td><td>Dirichlet parameter for the per-doc topic multinomial (e.g. 50/topic_num) </td></tr>
+    <tr><td class="paramname">beta</td><td>Dirichlet parameter for the per-topic word multinomial (e.g. 0.01) </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="ac154c2e71664bdc81f7d6c9d0d491ca1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac154c2e71664bdc81f7d6c9d0d491ca1">&#9670;&nbsp;</a></span>lda_train() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">set&lt;lda_result&gt; lda_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>data_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_data_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>voc_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>topic_num</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>iter_num</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>beta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>evaluate_every</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>perplexity_tol</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a006d5a0963cc300a81b9fd1d0fdd98da"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a006d5a0963cc300a81b9fd1d0fdd98da">&#9670;&nbsp;</a></span>lda_train() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">set&lt;lda_result&gt; lda_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>data_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_data_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>voc_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>topic_num</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>iter_num</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>beta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>evaluate_every</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_6ff79b0655deb26abf8f86290b84a97c.html">lda</a></li><li class="navelem"><a class="el" href="lda_8sql__in.html">lda.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:57 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/linalg_8sql__in.html b/docs/rc/linalg_8sql__in.html
new file mode 100644
index 0000000..c508b4f
--- /dev/null
+++ b/docs/rc/linalg_8sql__in.html
@@ -0,0 +1,1335 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: linalg.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('linalg_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">linalg.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>SQL functions for linear algebra.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a300300fe4b8576ba0b97b95d8dea3057"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linalg_8sql__in.html#a300300fe4b8576ba0b97b95d8dea3057">norm1</a> (float8[] x)</td></tr>
+<tr class="memdesc:a300300fe4b8576ba0b97b95d8dea3057"><td class="mdescLeft">&#160;</td><td class="mdescRight">1-norm of a vector  <a href="#a300300fe4b8576ba0b97b95d8dea3057">More...</a><br /></td></tr>
+<tr class="separator:a300300fe4b8576ba0b97b95d8dea3057"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a50fdfe30cc0edc6888a909dbb4b4c239"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linalg_8sql__in.html#a50fdfe30cc0edc6888a909dbb4b4c239">norm2</a> (float8[] x)</td></tr>
+<tr class="memdesc:a50fdfe30cc0edc6888a909dbb4b4c239"><td class="mdescLeft">&#160;</td><td class="mdescRight">2-norm of a vector  <a href="#a50fdfe30cc0edc6888a909dbb4b4c239">More...</a><br /></td></tr>
+<tr class="separator:a50fdfe30cc0edc6888a909dbb4b4c239"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a31fa9f2f5b45507c09f136464fdad1db"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linalg_8sql__in.html#a31fa9f2f5b45507c09f136464fdad1db">dist_inf_norm</a> (float8[] x, float8[] y)</td></tr>
+<tr class="memdesc:a31fa9f2f5b45507c09f136464fdad1db"><td class="mdescLeft">&#160;</td><td class="mdescRight">Infinity-norm of the difference between two vectors.  <a href="#a31fa9f2f5b45507c09f136464fdad1db">More...</a><br /></td></tr>
+<tr class="separator:a31fa9f2f5b45507c09f136464fdad1db"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad9cc156ae57bf7c0a2fe90798259105a"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linalg_8sql__in.html#ad9cc156ae57bf7c0a2fe90798259105a">dist_pnorm</a> (float8[] x, float8[] y, float8 p)</td></tr>
+<tr class="memdesc:ad9cc156ae57bf7c0a2fe90798259105a"><td class="mdescLeft">&#160;</td><td class="mdescRight">p-norm of the difference between two vectors  <a href="#ad9cc156ae57bf7c0a2fe90798259105a">More...</a><br /></td></tr>
+<tr class="separator:ad9cc156ae57bf7c0a2fe90798259105a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aad193850e79c4b9d811ca9bc53e13476"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linalg_8sql__in.html#aad193850e79c4b9d811ca9bc53e13476">dist_norm1</a> (float8[] x, float8[] y)</td></tr>
+<tr class="memdesc:aad193850e79c4b9d811ca9bc53e13476"><td class="mdescLeft">&#160;</td><td class="mdescRight">1-norm of the difference between two vectors  <a href="#aad193850e79c4b9d811ca9bc53e13476">More...</a><br /></td></tr>
+<tr class="separator:aad193850e79c4b9d811ca9bc53e13476"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa58e51526edea6ea98db30b6f250adb4"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linalg_8sql__in.html#aa58e51526edea6ea98db30b6f250adb4">dist_norm2</a> (float8[] x, float8[] y)</td></tr>
+<tr class="memdesc:aa58e51526edea6ea98db30b6f250adb4"><td class="mdescLeft">&#160;</td><td class="mdescRight">2-norm of the difference between two vectors  <a href="#aa58e51526edea6ea98db30b6f250adb4">More...</a><br /></td></tr>
+<tr class="separator:aa58e51526edea6ea98db30b6f250adb4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1782f2ba00d9f9fab20894a576079f87"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linalg_8sql__in.html#a1782f2ba00d9f9fab20894a576079f87">cosine_similarity</a> (float8[] x, float8[] y)</td></tr>
+<tr class="memdesc:a1782f2ba00d9f9fab20894a576079f87"><td class="mdescLeft">&#160;</td><td class="mdescRight">cosine similarity score between two vectors  <a href="#a1782f2ba00d9f9fab20894a576079f87">More...</a><br /></td></tr>
+<tr class="separator:a1782f2ba00d9f9fab20894a576079f87"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a00a08e69f27524f2096032214e15b668"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linalg_8sql__in.html#a00a08e69f27524f2096032214e15b668">squared_dist_norm2</a> (float8[] x, float8[] y)</td></tr>
+<tr class="memdesc:a00a08e69f27524f2096032214e15b668"><td class="mdescLeft">&#160;</td><td class="mdescRight">Squared 2-norm of the difference between two vectors.  <a href="#a00a08e69f27524f2096032214e15b668">More...</a><br /></td></tr>
+<tr class="separator:a00a08e69f27524f2096032214e15b668"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8c7b9281a72ff22caf06161701b27e84"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linalg_8sql__in.html#a8c7b9281a72ff22caf06161701b27e84">dist_angle</a> (float8[] x, float8[] y)</td></tr>
+<tr class="memdesc:a8c7b9281a72ff22caf06161701b27e84"><td class="mdescLeft">&#160;</td><td class="mdescRight">Angle between two vectors.  <a href="#a8c7b9281a72ff22caf06161701b27e84">More...</a><br /></td></tr>
+<tr class="separator:a8c7b9281a72ff22caf06161701b27e84"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afa13b4c6122b99422d666dedea136c18"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linalg_8sql__in.html#afa13b4c6122b99422d666dedea136c18">dist_tanimoto</a> (float8[] x, float8[] y)</td></tr>
+<tr class="memdesc:afa13b4c6122b99422d666dedea136c18"><td class="mdescLeft">&#160;</td><td class="mdescRight">Tanimoto distance between two vectors.  <a href="#afa13b4c6122b99422d666dedea136c18">More...</a><br /></td></tr>
+<tr class="separator:afa13b4c6122b99422d666dedea136c18"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac1397ac9f4a35b3b67c3be05b5e1a828"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linalg_8sql__in.html#ac1397ac9f4a35b3b67c3be05b5e1a828">dist_jaccard</a> (text[] x, text[] y)</td></tr>
+<tr class="memdesc:ac1397ac9f4a35b3b67c3be05b5e1a828"><td class="mdescLeft">&#160;</td><td class="mdescRight">Jaccard distance between two vectors (treated as sets)  <a href="#ac1397ac9f4a35b3b67c3be05b5e1a828">More...</a><br /></td></tr>
+<tr class="separator:ac1397ac9f4a35b3b67c3be05b5e1a828"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8239fac12096a5dc2720f6cb35b011e5"><td class="memItemLeft" align="right" valign="top">closest_column_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linalg_8sql__in.html#a8239fac12096a5dc2720f6cb35b011e5">_closest_column</a> (float8[] m, float8[] x, regproc dist, text dist_dn)</td></tr>
+<tr class="separator:a8239fac12096a5dc2720f6cb35b011e5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acf6628dfa4d73dfce65a582aa5c5a3db"><td class="memItemLeft" align="right" valign="top">closest_column_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linalg_8sql__in.html#acf6628dfa4d73dfce65a582aa5c5a3db">closest_column</a> (float8[] m, float8[] x, regproc dist=&quot;squared_dist_norm2&quot;)</td></tr>
+<tr class="memdesc:acf6628dfa4d73dfce65a582aa5c5a3db"><td class="mdescLeft">&#160;</td><td class="mdescRight">Given matrix \( M \) and vector \( \vec x \) compute the column of \( M \) that is closest to \( \vec x \).  <a href="#acf6628dfa4d73dfce65a582aa5c5a3db">More...</a><br /></td></tr>
+<tr class="separator:acf6628dfa4d73dfce65a582aa5c5a3db"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a31c8d60f9a631c27f5f91964e0108da9"><td class="memItemLeft" align="right" valign="top">closest_column_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linalg_8sql__in.html#a31c8d60f9a631c27f5f91964e0108da9">closest_column</a> (float8[] m, float8[] x)</td></tr>
+<tr class="separator:a31c8d60f9a631c27f5f91964e0108da9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a37fd07274dbc9a7f779346b8572ec989"><td class="memItemLeft" align="right" valign="top">closest_columns_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linalg_8sql__in.html#a37fd07274dbc9a7f779346b8572ec989">_closest_columns</a> (float8[] m, float8[] x, integer num, regproc dist, text dist_dn)</td></tr>
+<tr class="memdesc:a37fd07274dbc9a7f779346b8572ec989"><td class="mdescLeft">&#160;</td><td class="mdescRight">Given matrix \( M \) and vector \( \vec x \) compute the columns of \( M \) that are closest to \( \vec x \).  <a href="#a37fd07274dbc9a7f779346b8572ec989">More...</a><br /></td></tr>
+<tr class="separator:a37fd07274dbc9a7f779346b8572ec989"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad864339591086b635d12015db993b5bc"><td class="memItemLeft" align="right" valign="top">closest_columns_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linalg_8sql__in.html#ad864339591086b635d12015db993b5bc">closest_columns</a> (float8[] m, float8[] x, integer num, regproc dist)</td></tr>
+<tr class="separator:ad864339591086b635d12015db993b5bc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa5da5470cc84963a059714faa238a07d"><td class="memItemLeft" align="right" valign="top">closest_columns_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linalg_8sql__in.html#aa5da5470cc84963a059714faa238a07d">closest_columns</a> (float8[] m, float8[] x, integer num)</td></tr>
+<tr class="separator:aa5da5470cc84963a059714faa238a07d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaea269f4746f952faadffed9d9b107d7"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linalg_8sql__in.html#aaea269f4746f952faadffed9d9b107d7">avg_vector_transition</a> (float8[] state, float8[] x)</td></tr>
+<tr class="separator:aaea269f4746f952faadffed9d9b107d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5ac255c13e1f2d91274b829ff0383e44"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linalg_8sql__in.html#a5ac255c13e1f2d91274b829ff0383e44">avg_vector_merge</a> (float8[] state_left, float8[] state_right)</td></tr>
+<tr class="separator:a5ac255c13e1f2d91274b829ff0383e44"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad468b52a7caa9b47a0650d39e32d9c50"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linalg_8sql__in.html#ad468b52a7caa9b47a0650d39e32d9c50">avg_vector_final</a> (float8[] state)</td></tr>
+<tr class="separator:ad468b52a7caa9b47a0650d39e32d9c50"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1aa37f73fb1cd8d7d106aa518dd8c0b4"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linalg_8sql__in.html#a1aa37f73fb1cd8d7d106aa518dd8c0b4">avg</a> (float8[] x)</td></tr>
+<tr class="memdesc:a1aa37f73fb1cd8d7d106aa518dd8c0b4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute the average of vectors.  <a href="#a1aa37f73fb1cd8d7d106aa518dd8c0b4">More...</a><br /></td></tr>
+<tr class="separator:a1aa37f73fb1cd8d7d106aa518dd8c0b4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad5863fed5eb4813ba0044abc268d03ce"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linalg_8sql__in.html#ad5863fed5eb4813ba0044abc268d03ce">normalized_avg_vector_transition</a> (float8[] state, float8[] x)</td></tr>
+<tr class="separator:ad5863fed5eb4813ba0044abc268d03ce"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1c22ee0672d6c550f5bb966f78ce738a"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linalg_8sql__in.html#a1c22ee0672d6c550f5bb966f78ce738a">normalized_avg_vector_final</a> (float8[] state)</td></tr>
+<tr class="separator:a1c22ee0672d6c550f5bb966f78ce738a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0b04663ca206f03e66aed5ea2b4cc461"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linalg_8sql__in.html#a0b04663ca206f03e66aed5ea2b4cc461">normalized_avg</a> (float8[] x)</td></tr>
+<tr class="memdesc:a0b04663ca206f03e66aed5ea2b4cc461"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute the normalized average of vectors.  <a href="#a0b04663ca206f03e66aed5ea2b4cc461">More...</a><br /></td></tr>
+<tr class="separator:a0b04663ca206f03e66aed5ea2b4cc461"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac2d98e204b4fccab518aa20edef4ec41"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linalg_8sql__in.html#ac2d98e204b4fccab518aa20edef4ec41">matrix_agg_transition</a> (float8[] state, float8[] x)</td></tr>
+<tr class="separator:ac2d98e204b4fccab518aa20edef4ec41"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adb012de82ecdc71ac54f3498e88e59d0"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linalg_8sql__in.html#adb012de82ecdc71ac54f3498e88e59d0">matrix_agg_final</a> (float8[] state)</td></tr>
+<tr class="separator:adb012de82ecdc71ac54f3498e88e59d0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9c439706f35d6cac89f151d553a5f111"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linalg_8sql__in.html#a9c439706f35d6cac89f151d553a5f111">matrix_agg</a> (float8[] x)</td></tr>
+<tr class="memdesc:a9c439706f35d6cac89f151d553a5f111"><td class="mdescLeft">&#160;</td><td class="mdescRight">Combine vectors to a matrix.  <a href="#a9c439706f35d6cac89f151d553a5f111">More...</a><br /></td></tr>
+<tr class="separator:a9c439706f35d6cac89f151d553a5f111"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aed3a33f3d3d43a056c5ec591661d34d8"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linalg_8sql__in.html#aed3a33f3d3d43a056c5ec591661d34d8">matrix_column</a> (float8[] matrix, integer col)</td></tr>
+<tr class="memdesc:aed3a33f3d3d43a056c5ec591661d34d8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return the column of a matrix.  <a href="#aed3a33f3d3d43a056c5ec591661d34d8">More...</a><br /></td></tr>
+<tr class="separator:aed3a33f3d3d43a056c5ec591661d34d8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a21d0a134f1674f71b3e872aacc5f3789"><td class="memItemLeft" align="right" valign="top">set&lt; record &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linalg_8sql__in.html#a21d0a134f1674f71b3e872aacc5f3789">deconstruct_2d_array</a> (float8[] in_array)</td></tr>
+<tr class="memdesc:a21d0a134f1674f71b3e872aacc5f3789"><td class="mdescLeft">&#160;</td><td class="mdescRight">Construct a M-column N-row table of 2-D array.  <a href="#a21d0a134f1674f71b3e872aacc5f3789">More...</a><br /></td></tr>
+<tr class="separator:a21d0a134f1674f71b3e872aacc5f3789"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab67d0a074625d4fb90950d047dc2794e"><td class="memItemLeft" align="right" valign="top">set&lt; record &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linalg_8sql__in.html#ab67d0a074625d4fb90950d047dc2794e">__deconstruct_lower_triangle</a> (float8[] in_array)</td></tr>
+<tr class="memdesc:ab67d0a074625d4fb90950d047dc2794e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Construct a M-column M-row table of using lower triangle of 2-D array.  <a href="#ab67d0a074625d4fb90950d047dc2794e">More...</a><br /></td></tr>
+<tr class="separator:ab67d0a074625d4fb90950d047dc2794e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a71304c333a999e69ac1430c285c35181"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linalg_8sql__in.html#a71304c333a999e69ac1430c285c35181">array_to_1d</a> (float8[] in_array)</td></tr>
+<tr class="memdesc:a71304c333a999e69ac1430c285c35181"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return the input array as 1-D.  <a href="#a71304c333a999e69ac1430c285c35181">More...</a><br /></td></tr>
+<tr class="separator:a71304c333a999e69ac1430c285c35181"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0799a4ccb93a699a280861126c3e1a74"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linalg_8sql__in.html#a0799a4ccb93a699a280861126c3e1a74">array_to_2d</a> (float8[] in_array)</td></tr>
+<tr class="memdesc:a0799a4ccb93a699a280861126c3e1a74"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return A 2-D matrix that the number of rows is encoded as the first element of the input array and the number of cols second.  <a href="#a0799a4ccb93a699a280861126c3e1a74">More...</a><br /></td></tr>
+<tr class="separator:a0799a4ccb93a699a280861126c3e1a74"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abe23dd6c6963093863c2a107425f6384"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linalg_8sql__in.html#abe23dd6c6963093863c2a107425f6384">index_2d_array</a> (float8[] in_2d_array, integer index)</td></tr>
+<tr class="memdesc:abe23dd6c6963093863c2a107425f6384"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return A 1-D form of the specified row of the given 2-D array.  <a href="#abe23dd6c6963093863c2a107425f6384">More...</a><br /></td></tr>
+<tr class="separator:abe23dd6c6963093863c2a107425f6384"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af6b905fcac7746ef0ed0c36df4a1e070"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linalg_8sql__in.html#af6b905fcac7746ef0ed0c36df4a1e070">get_row</a> (float8[] in_2d_array, integer index)</td></tr>
+<tr class="memdesc:af6b905fcac7746ef0ed0c36df4a1e070"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get an indexed row of the given matrix (2-D array)  <a href="#af6b905fcac7746ef0ed0c36df4a1e070">More...</a><br /></td></tr>
+<tr class="separator:af6b905fcac7746ef0ed0c36df4a1e070"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a20f34c9e661191e5225cca7bc23252c5"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linalg_8sql__in.html#a20f34c9e661191e5225cca7bc23252c5">get_col</a> (float8[] in_2d_array, integer index)</td></tr>
+<tr class="memdesc:a20f34c9e661191e5225cca7bc23252c5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get an indexed col of the given matrix (2-D array)  <a href="#a20f34c9e661191e5225cca7bc23252c5">More...</a><br /></td></tr>
+<tr class="separator:a20f34c9e661191e5225cca7bc23252c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><dl class="section see"><dt>See also</dt><dd>For an overview of linear-algebra functions, see the module description <a class="el" href="group__grp__linalg.html">Norms and Distance Functions</a>. </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="ab67d0a074625d4fb90950d047dc2794e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab67d0a074625d4fb90950d047dc2794e">&#9670;&nbsp;</a></span>__deconstruct_lower_triangle()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">set&lt;record&gt; __deconstruct_lower_triangle </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>in_array</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">in_array</td><td>2-D array </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a8239fac12096a5dc2720f6cb35b011e5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8239fac12096a5dc2720f6cb35b011e5">&#9670;&nbsp;</a></span>_closest_column()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">closest_column_result _closest_column </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">regproc&#160;</td>
+          <td class="paramname"><em>dist</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dist_dn</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a37fd07274dbc9a7f779346b8572ec989"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a37fd07274dbc9a7f779346b8572ec989">&#9670;&nbsp;</a></span>_closest_columns()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">closest_columns_result _closest_columns </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">regproc&#160;</td>
+          <td class="paramname"><em>dist</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dist_dn</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>This function does essentially the same as <a class="el" href="linalg_8sql__in.html#acf6628dfa4d73dfce65a582aa5c5a3db">closest_column()</a>, except that it allows to specify the number of closest columns to return. The return value is a composite value:</p><ul>
+<li><code>columns_ids INTEGER[]</code> - The 0-based indices of the <code>num</code> columns of \( M \) that are closest to \( x \). In case of ties, the first such indices are returned.</li>
+<li><code>distances DOUBLE PRECISION[]</code> - The distances between the columns of \( M \) with indices in <code>columns_ids</code> and \( x \). That is, <code>distances[i]</code> contains \( \operatorname{dist}(\vec{m_j}, \vec x) \), where \( j = \) <code>columns_ids[i]</code>. </li>
+</ul>
+
+</div>
+</div>
+<a id="a71304c333a999e69ac1430c285c35181"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a71304c333a999e69ac1430c285c35181">&#9670;&nbsp;</a></span>array_to_1d()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] array_to_1d </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>in_array</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">in_array</td><td>1-D or 2-D array </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a0799a4ccb93a699a280861126c3e1a74"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0799a4ccb93a699a280861126c3e1a74">&#9670;&nbsp;</a></span>array_to_2d()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] array_to_2d </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>in_array</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">in_array</td><td>Input array with first 2 elements describing dimensions </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a1aa37f73fb1cd8d7d106aa518dd8c0b4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1aa37f73fb1cd8d7d106aa518dd8c0b4">&#9670;&nbsp;</a></span>avg()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] avg </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Given vectors \( x_1, \dots, x_n \), compute the average \( \frac 1n \sum_{i=1}^n x_i \).</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Point \( x_i \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Average \( \frac 1n \sum_{i=1}^n x_i \) </dd></dl>
+
+</div>
+</div>
+<a id="ad468b52a7caa9b47a0650d39e32d9c50"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad468b52a7caa9b47a0650d39e32d9c50">&#9670;&nbsp;</a></span>avg_vector_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] avg_vector_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5ac255c13e1f2d91274b829ff0383e44"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5ac255c13e1f2d91274b829ff0383e44">&#9670;&nbsp;</a></span>avg_vector_merge()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] avg_vector_merge </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state_left</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state_right</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aaea269f4746f952faadffed9d9b107d7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aaea269f4746f952faadffed9d9b107d7">&#9670;&nbsp;</a></span>avg_vector_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] avg_vector_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="acf6628dfa4d73dfce65a582aa5c5a3db"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acf6628dfa4d73dfce65a582aa5c5a3db">&#9670;&nbsp;</a></span>closest_column() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">closest_column_result closest_column </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">regproc&#160;</td>
+          <td class="paramname"><em>dist</em> = <code>&quot;squared_dist_norm2&quot;</code>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">M</td><td>Matrix \( M = (\vec{m_0} \dots \vec{m_{l-1}}) \in \mathbb{R}^{k \times l} \) </td></tr>
+    <tr><td class="paramname">x</td><td>Vector \( \vec x \in \mathbb R^k \) </td></tr>
+    <tr><td class="paramname">dist</td><td>The metric \( \operatorname{dist} \). This needs to be a function with signature <code>DOUBLE PRECISION[] x DOUBLE PRECISION[] -&gt; DOUBLE PRECISION</code>.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>A composite value:<ul>
+<li><code>columns_id INTEGER</code> - The 0-based index of the column of \( M \) that is closest to \( x \). In case of ties, the first such index is returned. That is, <code>columns_id</code> is the minimum element in the set \( \arg\min_{i=0,\dots,l-1} \operatorname{dist}(\vec{m_i}, \vec x) \).</li>
+<li><code>distance DOUBLE PRECISION</code> - The minimum distance between any column of \( M \) and \( x \). That is, \( \min_{i=0,\dots,l-1} \operatorname{dist}(\vec{m_i}, \vec x) \). </li>
+</ul>
+</dd></dl>
+
+</div>
+</div>
+<a id="a31c8d60f9a631c27f5f91964e0108da9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a31c8d60f9a631c27f5f91964e0108da9">&#9670;&nbsp;</a></span>closest_column() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">closest_column_result closest_column </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ad864339591086b635d12015db993b5bc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad864339591086b635d12015db993b5bc">&#9670;&nbsp;</a></span>closest_columns() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">closest_columns_result closest_columns </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">regproc&#160;</td>
+          <td class="paramname"><em>dist</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa5da5470cc84963a059714faa238a07d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa5da5470cc84963a059714faa238a07d">&#9670;&nbsp;</a></span>closest_columns() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">closest_columns_result closest_columns </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1782f2ba00d9f9fab20894a576079f87"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1782f2ba00d9f9fab20894a576079f87">&#9670;&nbsp;</a></span>cosine_similarity()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 cosine_similarity </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>y</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Vector \( \vec x = (x_1, \dots, x_n) \) </td></tr>
+    <tr><td class="paramname">y</td><td>Vector \( \vec y = (y_1, \dots, y_n) \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( \frac{\langle \vec x, \vec y \rangle} {\| \vec x \| \cdot \| \vec y \|} \) </dd></dl>
+
+</div>
+</div>
+<a id="a21d0a134f1674f71b3e872aacc5f3789"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a21d0a134f1674f71b3e872aacc5f3789">&#9670;&nbsp;</a></span>deconstruct_2d_array()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">set&lt;record&gt; deconstruct_2d_array </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>in_array</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">in_array</td><td>2-D array </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a8c7b9281a72ff22caf06161701b27e84"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8c7b9281a72ff22caf06161701b27e84">&#9670;&nbsp;</a></span>dist_angle()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 dist_angle </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>y</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Vector \( \vec x = (x_1, \dots, x_n) \) </td></tr>
+    <tr><td class="paramname">y</td><td>Vector \( \vec y = (y_1, \dots, y_n) \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( \arccos\left(\frac{\langle \vec x, \vec y \rangle} {\| \vec x \| \cdot \| \vec y \|}\right) \) </dd></dl>
+
+</div>
+</div>
+<a id="a31fa9f2f5b45507c09f136464fdad1db"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a31fa9f2f5b45507c09f136464fdad1db">&#9670;&nbsp;</a></span>dist_inf_norm()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 dist_inf_norm </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>y</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Vector \( \vec x = (x_1, \dots, x_n) \) </td></tr>
+    <tr><td class="paramname">y</td><td>Vector \( \vec y = (y_1, \dots, y_n) \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( \| x - y \|_\infty = \max_{i=1}^n \|x_i - y_i\| \) </dd></dl>
+
+</div>
+</div>
+<a id="ac1397ac9f4a35b3b67c3be05b5e1a828"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac1397ac9f4a35b3b67c3be05b5e1a828">&#9670;&nbsp;</a></span>dist_jaccard()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 dist_jaccard </td>
+          <td>(</td>
+          <td class="paramtype">text []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text []&#160;</td>
+          <td class="paramname"><em>y</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Vector \( \vec x = (x_1, \dots, x_m) \) </td></tr>
+    <tr><td class="paramname">y</td><td>Vector \( \vec y = (y_1, \dots, y_n) \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( 1 - \frac{|x \cap y|}{|x \cup y|} \) </dd></dl>
+
+</div>
+</div>
+<a id="aad193850e79c4b9d811ca9bc53e13476"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aad193850e79c4b9d811ca9bc53e13476">&#9670;&nbsp;</a></span>dist_norm1()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 dist_norm1 </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>y</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Vector \( \vec x = (x_1, \dots, x_n) \) </td></tr>
+    <tr><td class="paramname">y</td><td>Vector \( \vec y = (y_1, \dots, y_n) \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( \| x - y \|_1 = \sum_{i=1}^n |x_i - y_i| \) </dd></dl>
+
+</div>
+</div>
+<a id="aa58e51526edea6ea98db30b6f250adb4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa58e51526edea6ea98db30b6f250adb4">&#9670;&nbsp;</a></span>dist_norm2()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 dist_norm2 </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>y</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Vector \( \vec x = (x_1, \dots, x_n) \) </td></tr>
+    <tr><td class="paramname">y</td><td>Vector \( \vec y = (y_1, \dots, y_n) \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( \| x - y \|_2 = \sqrt{\sum_{i=1}^n (x_i - y_i)^2} \) </dd></dl>
+
+</div>
+</div>
+<a id="ad9cc156ae57bf7c0a2fe90798259105a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad9cc156ae57bf7c0a2fe90798259105a">&#9670;&nbsp;</a></span>dist_pnorm()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 dist_pnorm </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>p</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Vector \( \vec x = (x_1, \dots, x_n) \) </td></tr>
+    <tr><td class="paramname">y</td><td>Vector \( \vec y = (y_1, \dots, y_n) \) </td></tr>
+    <tr><td class="paramname">p</td><td>Scalar \( p &gt; 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( \| x - y \|_p = (\sum_{i=1}^n \|x_i - y_i\|^p)^{\frac{1}{p}} \) </dd></dl>
+
+</div>
+</div>
+<a id="afa13b4c6122b99422d666dedea136c18"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afa13b4c6122b99422d666dedea136c18">&#9670;&nbsp;</a></span>dist_tanimoto()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 dist_tanimoto </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>y</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Vector \( \vec x = (x_1, \dots, x_n) \) </td></tr>
+    <tr><td class="paramname">y</td><td>Vector \( \vec y = (y_1, \dots, y_n) \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( 1 - \frac{\langle \vec x, \vec y \rangle} {\| \vec x \|^2 \cdot \| \vec y \|^2 - \langle \vec x, \vec y \rangle} \) </dd></dl>
+
+</div>
+</div>
+<a id="a20f34c9e661191e5225cca7bc23252c5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a20f34c9e661191e5225cca7bc23252c5">&#9670;&nbsp;</a></span>get_col()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] get_col </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>in_2d_array</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>index</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">in_2d_array</td><td>Input 2-D array </td></tr>
+    <tr><td class="paramname">index</td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="af6b905fcac7746ef0ed0c36df4a1e070"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af6b905fcac7746ef0ed0c36df4a1e070">&#9670;&nbsp;</a></span>get_row()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] get_row </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>in_2d_array</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>index</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">in_2d_array</td><td>Input 2-D array </td></tr>
+    <tr><td class="paramname">index</td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="abe23dd6c6963093863c2a107425f6384"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abe23dd6c6963093863c2a107425f6384">&#9670;&nbsp;</a></span>index_2d_array()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] index_2d_array </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>in_2d_array</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>index</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">in_2d_array</td><td>Input 2-D array </td></tr>
+    <tr><td class="paramname">index</td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a9c439706f35d6cac89f151d553a5f111"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9c439706f35d6cac89f151d553a5f111">&#9670;&nbsp;</a></span>matrix_agg()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] matrix_agg </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Given vectors \( \vec x_1, \dots, \vec x_n \in \mathbb R^m \), return matrix \( ( \vec x_1 \dots \vec x_n ) \in \mathbb R^{m \times n}\).</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Vector \( x_i \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Matrix with columns \( x_1, \dots, x_n \) </dd></dl>
+
+</div>
+</div>
+<a id="adb012de82ecdc71ac54f3498e88e59d0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adb012de82ecdc71ac54f3498e88e59d0">&#9670;&nbsp;</a></span>matrix_agg_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] matrix_agg_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac2d98e204b4fccab518aa20edef4ec41"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac2d98e204b4fccab518aa20edef4ec41">&#9670;&nbsp;</a></span>matrix_agg_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] matrix_agg_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aed3a33f3d3d43a056c5ec591661d34d8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aed3a33f3d3d43a056c5ec591661d34d8">&#9670;&nbsp;</a></span>matrix_column()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] matrix_column </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>matrix</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>col</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">matrix</td><td>Two-dimensional matrix </td></tr>
+    <tr><td class="paramname">col</td><td>Column of the matrix to return (0-based index) </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a300300fe4b8576ba0b97b95d8dea3057"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a300300fe4b8576ba0b97b95d8dea3057">&#9670;&nbsp;</a></span>norm1()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 norm1 </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Vector \( \vec x = (x_1, \dots, x_n) \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( \| x \|_1 = \sum_{i=1}^n |x_i| \) </dd></dl>
+
+</div>
+</div>
+<a id="a50fdfe30cc0edc6888a909dbb4b4c239"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a50fdfe30cc0edc6888a909dbb4b4c239">&#9670;&nbsp;</a></span>norm2()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 norm2 </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Vector \( \vec x = (x_1, \dots, x_n) \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( \| x \|_2 = \sqrt{\sum_{i=1}^n x_i^2} \) </dd></dl>
+
+</div>
+</div>
+<a id="a0b04663ca206f03e66aed5ea2b4cc461"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0b04663ca206f03e66aed5ea2b4cc461">&#9670;&nbsp;</a></span>normalized_avg()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] normalized_avg </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Given vectors \( x_1, \dots, x_n \), define \( \widetilde{x} := \frac 1n \sum_{i=1}^n \frac{x_i}{\| x_i \|} \), and compute the normalized average \( \frac{\widetilde{x}}{\| \widetilde{x} \|} \).</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Point \( x_i \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Normalized average \( \frac{\widetilde{x}}{\| \widetilde{x} \|} \) </dd></dl>
+
+</div>
+</div>
+<a id="a1c22ee0672d6c550f5bb966f78ce738a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1c22ee0672d6c550f5bb966f78ce738a">&#9670;&nbsp;</a></span>normalized_avg_vector_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] normalized_avg_vector_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ad5863fed5eb4813ba0044abc268d03ce"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad5863fed5eb4813ba0044abc268d03ce">&#9670;&nbsp;</a></span>normalized_avg_vector_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] normalized_avg_vector_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a00a08e69f27524f2096032214e15b668"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a00a08e69f27524f2096032214e15b668">&#9670;&nbsp;</a></span>squared_dist_norm2()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 squared_dist_norm2 </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>y</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Vector \( \vec x = (x_1, \dots, x_n) \) </td></tr>
+    <tr><td class="paramname">y</td><td>Vector \( \vec y = (y_1, \dots, y_n) \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( \| x - y \|_2^2 = \sum_{i=1}^n (x_i - y_i)^2 \) </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_9e42ee0a0235722f482630aa6cc99334.html">linalg</a></li><li class="navelem"><a class="el" href="linalg_8sql__in.html">linalg.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:57 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/linear_8sql__in.html b/docs/rc/linear_8sql__in.html
new file mode 100644
index 0000000..eb3c226
--- /dev/null
+++ b/docs/rc/linear_8sql__in.html
@@ -0,0 +1,705 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: linear.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('linear_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">linear.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>SQL functions for linear regression.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ad0175a9ecc455d9679f7d251af264848"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linear_8sql__in.html#ad0175a9ecc455d9679f7d251af264848">linregr_train</a> (varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, varchar grouping_cols, boolean heteroskedasticity_option)</td></tr>
+<tr class="memdesc:ad0175a9ecc455d9679f7d251af264848"><td class="mdescLeft">&#160;</td><td class="mdescRight">Linear regression training function with grouping support.  <a href="#ad0175a9ecc455d9679f7d251af264848">More...</a><br /></td></tr>
+<tr class="separator:ad0175a9ecc455d9679f7d251af264848"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac807cf4749db37b6fc7be24c2db10d96"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linear_8sql__in.html#ac807cf4749db37b6fc7be24c2db10d96">linregr_train</a> (varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, varchar grouping_cols)</td></tr>
+<tr class="separator:ac807cf4749db37b6fc7be24c2db10d96"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a71fb4a634f3145d0369879c931e0f16e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linear_8sql__in.html#a71fb4a634f3145d0369879c931e0f16e">linregr_train</a> (varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname)</td></tr>
+<tr class="separator:a71fb4a634f3145d0369879c931e0f16e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1469685d518752784080c0b2811c9a81"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linear_8sql__in.html#a1469685d518752784080c0b2811c9a81">linregr_train</a> ()</td></tr>
+<tr class="separator:a1469685d518752784080c0b2811c9a81"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5f8e25203a2b3a9d0fd332a539972292"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linear_8sql__in.html#a5f8e25203a2b3a9d0fd332a539972292">linregr_train</a> (varchar message)</td></tr>
+<tr class="separator:a5f8e25203a2b3a9d0fd332a539972292"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa2b87a3e60272176bfa2fb859f99461a"><td class="memItemLeft" align="right" valign="top">bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linear_8sql__in.html#aa2b87a3e60272176bfa2fb859f99461a">linregr_transition</a> (bytea8 state, float8 y, float8[] x)</td></tr>
+<tr class="separator:aa2b87a3e60272176bfa2fb859f99461a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a042536820ffbad498a4e1c410f949e35"><td class="memItemLeft" align="right" valign="top">bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linear_8sql__in.html#a042536820ffbad498a4e1c410f949e35">linregr_merge_states</a> (bytea8 state1, bytea8 state2)</td></tr>
+<tr class="separator:a042536820ffbad498a4e1c410f949e35"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a28b69254ba5cd513b35ba6b17efd2c35"><td class="memItemLeft" align="right" valign="top">linregr_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linear_8sql__in.html#a28b69254ba5cd513b35ba6b17efd2c35">linregr_final</a> (bytea8 state)</td></tr>
+<tr class="separator:a28b69254ba5cd513b35ba6b17efd2c35"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4a583204053716bbece6321f5d9332b1"><td class="memItemLeft" align="right" valign="top">bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linear_8sql__in.html#a4a583204053716bbece6321f5d9332b1">hetero_linregr_transition</a> (bytea8 state, float8 y, float8[] x, float8[] coef)</td></tr>
+<tr class="separator:a4a583204053716bbece6321f5d9332b1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad10649c8460c337a285cf20f2b87d0c5"><td class="memItemLeft" align="right" valign="top">bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linear_8sql__in.html#ad10649c8460c337a285cf20f2b87d0c5">hetero_linregr_merge_states</a> (bytea8 state1, bytea8 state2)</td></tr>
+<tr class="separator:ad10649c8460c337a285cf20f2b87d0c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4b2e38f45a8e519af5947fcc2eb02829"><td class="memItemLeft" align="right" valign="top">heteroskedasticity_test_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linear_8sql__in.html#a4b2e38f45a8e519af5947fcc2eb02829">hetero_linregr_final</a> (bytea8 state)</td></tr>
+<tr class="separator:a4b2e38f45a8e519af5947fcc2eb02829"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5fcd1daa9796dccf5430929c37ea0ee9"><td class="memItemLeft" align="right" valign="top">aggregate bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linear_8sql__in.html#a5fcd1daa9796dccf5430929c37ea0ee9">linregr</a> (float8 dependentVariable, float8[] independentVariables)</td></tr>
+<tr class="memdesc:a5fcd1daa9796dccf5430929c37ea0ee9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute linear regression coefficients and diagnostic statistics.  <a href="#a5fcd1daa9796dccf5430929c37ea0ee9">More...</a><br /></td></tr>
+<tr class="separator:a5fcd1daa9796dccf5430929c37ea0ee9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6d36a88e06a31753f4045a6c4539ca10"><td class="memItemLeft" align="right" valign="top">aggregate bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linear_8sql__in.html#a6d36a88e06a31753f4045a6c4539ca10">heteroskedasticity_test_linregr</a> (float8 dependentVariable, float8[] independentVariables, float8[] olsCoefficients)</td></tr>
+<tr class="memdesc:a6d36a88e06a31753f4045a6c4539ca10"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute studentized Breuch-Pagan heteroskedasticity test for linear regression.  <a href="#a6d36a88e06a31753f4045a6c4539ca10">More...</a><br /></td></tr>
+<tr class="separator:a6d36a88e06a31753f4045a6c4539ca10"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8da0030683d5931b93e5f2bee3fd0544"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linear_8sql__in.html#a8da0030683d5931b93e5f2bee3fd0544">linregr_predict</a> (float8[] coef, float8[] col_ind_var)</td></tr>
+<tr class="memdesc:a8da0030683d5931b93e5f2bee3fd0544"><td class="mdescLeft">&#160;</td><td class="mdescRight">Predict the boolean value of a dependent variable for a specific independent variable value in a linear regression model.  <a href="#a8da0030683d5931b93e5f2bee3fd0544">More...</a><br /></td></tr>
+<tr class="separator:a8da0030683d5931b93e5f2bee3fd0544"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a98442804f12e5489dedf0ada2d8c273e"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linear_8sql__in.html#a98442804f12e5489dedf0ada2d8c273e">linregr_predict</a> (text message)</td></tr>
+<tr class="separator:a98442804f12e5489dedf0ada2d8c273e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1cf80cdbcabf4ba83b128c08bc804ca5"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="linear_8sql__in.html#a1cf80cdbcabf4ba83b128c08bc804ca5">linregr_predict</a> ()</td></tr>
+<tr class="separator:a1cf80cdbcabf4ba83b128c08bc804ca5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><dl class="section date"><dt>Date</dt><dd>January 2011</dd></dl>
+<dl class="section see"><dt>See also</dt><dd>For a brief introduction to linear regression, see the module description <a class="el" href="group__grp__linreg.html">Linear Regression</a>. </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="a4b2e38f45a8e519af5947fcc2eb02829"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4b2e38f45a8e519af5947fcc2eb02829">&#9670;&nbsp;</a></span>hetero_linregr_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">heteroskedasticity_test_result hetero_linregr_final </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ad10649c8460c337a285cf20f2b87d0c5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad10649c8460c337a285cf20f2b87d0c5">&#9670;&nbsp;</a></span>hetero_linregr_merge_states()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea8 hetero_linregr_merge_states </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a4a583204053716bbece6321f5d9332b1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4a583204053716bbece6321f5d9332b1">&#9670;&nbsp;</a></span>hetero_linregr_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea8 hetero_linregr_transition </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>coef</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a6d36a88e06a31753f4045a6c4539ca10"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6d36a88e06a31753f4045a6c4539ca10">&#9670;&nbsp;</a></span>heteroskedasticity_test_linregr()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate bytea8 heteroskedasticity_test_linregr </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>dependentVariable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>independentVariables</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>olsCoefficients</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">dependentVariable</td><td>Column containing the dependent variable </td></tr>
+    <tr><td class="paramname">independentVariables</td><td>Column containing the array of independent variables </td></tr>
+    <tr><td class="paramname">olsCoefficients</td><td>Column containing the array of the OLS coefficients (as obtained by linregr)</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section user"><dt></dt><dd>To include an intercept in the model, set one coordinate in the <code>independentVariables</code> array to 1.</dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>A composite value:<ul>
+<li><code>test_statistic FLOAT8[]</code> - Prob &gt; test_statistc</li>
+<li><code>p_value FLOAT8[]</code> - Prob &gt; test_statistc</li>
+</ul>
+</dd></dl>
+<dl class="section user"><dt>Usage</dt><dd><pre> SELECT (heteoskedasticity_test_linregr(<em>dependentVariable</em>,
+ <em>independentVariables</em>, coef)).*
+ FROM (
+   SELECT linregr(<em>dependentVariable</em>, <em>independentVariables</em>).coef
+ ) AS ols_coef, <em>sourceName</em> as src;
+</pre> </dd></dl>
+
+</div>
+</div>
+<a id="a5fcd1daa9796dccf5430929c37ea0ee9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5fcd1daa9796dccf5430929c37ea0ee9">&#9670;&nbsp;</a></span>linregr()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate bytea8 linregr </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>dependentVariable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>independentVariables</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">dependentVariable</td><td>Column containing the dependent variable </td></tr>
+    <tr><td class="paramname">independentVariables</td><td>Column containing the array of independent variables</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section user"><dt></dt><dd>To include an intercept in the model, set one coordinate in the <code>independentVariables</code> array to 1.</dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>A composite value:<ul>
+<li><code>coef FLOAT8[]</code> - Array of coefficients, \( \boldsymbol c \)</li>
+<li><code>r2 FLOAT8</code> - Coefficient of determination, \( R^2 \)</li>
+<li><code>std_err FLOAT8[]</code> - Array of standard errors, \( \mathit{se}(c_1), \dots, \mathit{se}(c_k) \)</li>
+<li><code>t_stats FLOAT8[]</code> - Array of t-statistics, \( \boldsymbol t \)</li>
+<li><code>p_values FLOAT8[]</code> - Array of p-values, \( \boldsymbol p \)</li>
+<li><code>condition_no FLOAT8</code> - The condition number of matrix \( X^T X \).</li>
+</ul>
+</dd></dl>
+<dl class="section user"><dt>Usage</dt><dd><ul>
+<li>Get vector of coefficients \( \boldsymbol c \) and all diagnostic statistics:<br />
+ <pre>SELECT (linregr(<em>dependentVariable</em>,
+        <em>independentVariables</em>)).*
+FROM <em>sourceName</em>;</pre></li>
+<li>Get vector of coefficients \( \boldsymbol c \):<br />
+ <pre>SELECT (linregr(<em>dependentVariable</em>,
+        <em>independentVariables</em>)).coef
+FROM <em>sourceName</em>;</pre></li>
+<li>Get a subset of the output columns, e.g., only the array of coefficients \( \boldsymbol c \), the coefficient of determination \( R^2 \), and the array of p-values \( \boldsymbol p \): <pre>SELECT (lr).coef, (lr).r2, (lr).p_values
+FROM (
+    SELECT linregr( <em>dependentVariable</em>,
+                    <em>independentVariables</em>) AS lr
+    FROM <em>sourceName</em>
+) AS subq;</pre> </li>
+</ul>
+</dd></dl>
+
+</div>
+</div>
+<a id="a28b69254ba5cd513b35ba6b17efd2c35"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a28b69254ba5cd513b35ba6b17efd2c35">&#9670;&nbsp;</a></span>linregr_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">linregr_result linregr_final </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a042536820ffbad498a4e1c410f949e35"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a042536820ffbad498a4e1c410f949e35">&#9670;&nbsp;</a></span>linregr_merge_states()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea8 linregr_merge_states </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8da0030683d5931b93e5f2bee3fd0544"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8da0030683d5931b93e5f2bee3fd0544">&#9670;&nbsp;</a></span>linregr_predict() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 linregr_predict </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>coef</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>col_ind_var</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">coef</td><td>Coefficients obtained by running linear regression. </td></tr>
+    <tr><td class="paramname">col_ind</td><td>Independent variable array </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>DOUBLE PRECISION Predicted value</dd></dl>
+<p>This function computes the dot product of the independent variables and the coefficients. This requires the length of the two vectors to be the same. </p>
+
+</div>
+</div>
+<a id="a98442804f12e5489dedf0ada2d8c273e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a98442804f12e5489dedf0ada2d8c273e">&#9670;&nbsp;</a></span>linregr_predict() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text linregr_predict </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1cf80cdbcabf4ba83b128c08bc804ca5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1cf80cdbcabf4ba83b128c08bc804ca5">&#9670;&nbsp;</a></span>linregr_predict() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text linregr_predict </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ad0175a9ecc455d9679f7d251af264848"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad0175a9ecc455d9679f7d251af264848">&#9670;&nbsp;</a></span>linregr_train() <span class="overload">[1/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void linregr_train </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>heteroskedasticity_option</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac807cf4749db37b6fc7be24c2db10d96"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac807cf4749db37b6fc7be24c2db10d96">&#9670;&nbsp;</a></span>linregr_train() <span class="overload">[2/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void linregr_train </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a71fb4a634f3145d0369879c931e0f16e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a71fb4a634f3145d0369879c931e0f16e">&#9670;&nbsp;</a></span>linregr_train() <span class="overload">[3/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void linregr_train </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1469685d518752784080c0b2811c9a81"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1469685d518752784080c0b2811c9a81">&#9670;&nbsp;</a></span>linregr_train() <span class="overload">[4/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar linregr_train </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5f8e25203a2b3a9d0fd332a539972292"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5f8e25203a2b3a9d0fd332a539972292">&#9670;&nbsp;</a></span>linregr_train() <span class="overload">[5/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar linregr_train </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa2b87a3e60272176bfa2fb859f99461a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa2b87a3e60272176bfa2fb859f99461a">&#9670;&nbsp;</a></span>linregr_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea8 linregr_transition </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_ac52a4b89b7b1b1591f2952b5cbd041a.html">regress</a></li><li class="navelem"><a class="el" href="linear_8sql__in.html">linear.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:57 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/lmf_8sql__in.html b/docs/rc/lmf_8sql__in.html
new file mode 100644
index 0000000..fd40a1a
--- /dev/null
+++ b/docs/rc/lmf_8sql__in.html
@@ -0,0 +1,885 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: lmf.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('lmf_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">lmf.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>SQL functions for low-rank matrix factorization.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a187574cfe85888b29d6b1658554e7507"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lmf_8sql__in.html#a187574cfe85888b29d6b1658554e7507">lmf_igd_transition</a> (float8[] state, integer row_num, integer column_num, float8 val, float8[] previous_state, integer row_dim, integer column_dim, integer max_rank, float8 stepsize, float8 scale_factor)</td></tr>
+<tr class="separator:a187574cfe85888b29d6b1658554e7507"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae3bb16a76a927e1e59420d4a8e13012f"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lmf_8sql__in.html#ae3bb16a76a927e1e59420d4a8e13012f">lmf_igd_merge</a> (float8[] state1, float8[] state2)</td></tr>
+<tr class="separator:ae3bb16a76a927e1e59420d4a8e13012f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a298f46c944cd6813b0360514bf8c9ed1"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lmf_8sql__in.html#a298f46c944cd6813b0360514bf8c9ed1">lmf_igd_final</a> (float8[] state)</td></tr>
+<tr class="separator:a298f46c944cd6813b0360514bf8c9ed1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a54d2ca2048d9a0c29d5593530b932a23"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lmf_8sql__in.html#a54d2ca2048d9a0c29d5593530b932a23">lmf_igd_step</a> (integer row_num, integer column_num, float8 val, float8[] previous_state, integer row_dim, integer column_dim, integer max_rank, float8 stepsize, float8 scale_factor)</td></tr>
+<tr class="separator:a54d2ca2048d9a0c29d5593530b932a23"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a05860ded070a214128e0b4e64c9c989e"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lmf_8sql__in.html#a05860ded070a214128e0b4e64c9c989e">internal_lmf_igd_distance</a> (float8[] state1, float8[] state2)</td></tr>
+<tr class="separator:a05860ded070a214128e0b4e64c9c989e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8dede6aa8d024f0bb9acca9a83dfd579"><td class="memItemLeft" align="right" valign="top">lmf_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lmf_8sql__in.html#a8dede6aa8d024f0bb9acca9a83dfd579">internal_lmf_igd_result</a> (float8[] state)</td></tr>
+<tr class="separator:a8dede6aa8d024f0bb9acca9a83dfd579"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aea3df2d68e7a289da928b8a584ac719e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lmf_8sql__in.html#aea3df2d68e7a289da928b8a584ac719e">internal_execute_using_lmf_igd_args</a> (varchar sql, integer, integer, integer, float8, float8, integer, float8)</td></tr>
+<tr class="separator:aea3df2d68e7a289da928b8a584ac719e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aae221f5f5b2f670a93c00202b251857d"><td class="memItemLeft" align="right" valign="top">integer&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lmf_8sql__in.html#aae221f5f5b2f670a93c00202b251857d">internal_compute_lmf_igd</a> (varchar rel_args, varchar rel_state, varchar rel_source, varchar col_row, varchar col_column, varchar col_value)</td></tr>
+<tr class="separator:aae221f5f5b2f670a93c00202b251857d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac1acb1f0e1f7008118f21c83546a4602"><td class="memItemLeft" align="right" valign="top">integer&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lmf_8sql__in.html#ac1acb1f0e1f7008118f21c83546a4602">lmf_igd_run</a> (varchar rel_output, regclass rel_source, varchar col_row, varchar col_column, varchar col_value, integer row_dim=&quot;SELECT max(col_row) FROM rel_source&quot;, integer column_dim=&quot;SELECT max(col_col) FROM rel_source&quot;, integer max_rank=20, float8 stepsize=0.01, float8 scale_factor=0.1, integer num_iterations=10, float8 tolerance=0.0001)</td></tr>
+<tr class="memdesc:ac1acb1f0e1f7008118f21c83546a4602"><td class="mdescLeft">&#160;</td><td class="mdescRight">Low-rank matrix factorization of a incomplete matrix into two factors.  <a href="#ac1acb1f0e1f7008118f21c83546a4602">More...</a><br /></td></tr>
+<tr class="separator:ac1acb1f0e1f7008118f21c83546a4602"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a917cb41e439c6786f91a27463dca0732"><td class="memItemLeft" align="right" valign="top">integer&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lmf_8sql__in.html#a917cb41e439c6786f91a27463dca0732">lmf_igd_run</a> (varchar rel_output, regclass rel_source, varchar col_row, varchar col_column, varchar col_value, integer row_dim, integer column_dim, integer max_rank, float8 stepsize, float8 scale_factor)</td></tr>
+<tr class="separator:a917cb41e439c6786f91a27463dca0732"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9b18ea9dd016d109a5c001762394e788"><td class="memItemLeft" align="right" valign="top">integer&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lmf_8sql__in.html#a9b18ea9dd016d109a5c001762394e788">lmf_igd_run</a> (varchar rel_output, regclass rel_source, varchar col_row, varchar col_column, varchar col_value, integer row_dim, integer column_dim, integer max_rank, float8 stepsize)</td></tr>
+<tr class="separator:a9b18ea9dd016d109a5c001762394e788"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0c5c2d04936ac341e8c054237266938b"><td class="memItemLeft" align="right" valign="top">integer&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lmf_8sql__in.html#a0c5c2d04936ac341e8c054237266938b">lmf_igd_run</a> (varchar rel_output, regclass rel_source, varchar col_row, varchar col_column, varchar col_value, integer row_dim, integer column_dim, integer max_rank)</td></tr>
+<tr class="separator:a0c5c2d04936ac341e8c054237266938b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acaeef70cbcad01aadbad6fbce81d42fb"><td class="memItemLeft" align="right" valign="top">integer&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lmf_8sql__in.html#acaeef70cbcad01aadbad6fbce81d42fb">lmf_igd_run</a> (varchar rel_output, regclass rel_source, varchar col_row, varchar col_column, text col_value)</td></tr>
+<tr class="separator:acaeef70cbcad01aadbad6fbce81d42fb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><dl class="section date"><dt>Date</dt><dd>June 2012</dd></dl>
+<dl class="section see"><dt>See also</dt><dd>For a brief introduction to Low-rank Matrix Factorization, see the module description <a class="el" href="group__grp__lmf.html">Low-Rank Matrix Factorization</a>. </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="aae221f5f5b2f670a93c00202b251857d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aae221f5f5b2f670a93c00202b251857d">&#9670;&nbsp;</a></span>internal_compute_lmf_igd()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">integer internal_compute_lmf_igd </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>rel_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>rel_state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>rel_source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>col_row</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>col_column</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>col_value</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aea3df2d68e7a289da928b8a584ac719e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aea3df2d68e7a289da928b8a584ac719e">&#9670;&nbsp;</a></span>internal_execute_using_lmf_igd_args()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void internal_execute_using_lmf_igd_args </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>sql</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a05860ded070a214128e0b4e64c9c989e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a05860ded070a214128e0b4e64c9c989e">&#9670;&nbsp;</a></span>internal_lmf_igd_distance()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 internal_lmf_igd_distance </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8dede6aa8d024f0bb9acca9a83dfd579"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8dede6aa8d024f0bb9acca9a83dfd579">&#9670;&nbsp;</a></span>internal_lmf_igd_result()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">lmf_result internal_lmf_igd_result </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a298f46c944cd6813b0360514bf8c9ed1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a298f46c944cd6813b0360514bf8c9ed1">&#9670;&nbsp;</a></span>lmf_igd_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] lmf_igd_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae3bb16a76a927e1e59420d4a8e13012f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae3bb16a76a927e1e59420d4a8e13012f">&#9670;&nbsp;</a></span>lmf_igd_merge()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] lmf_igd_merge </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac1acb1f0e1f7008118f21c83546a4602"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac1acb1f0e1f7008118f21c83546a4602">&#9670;&nbsp;</a></span>lmf_igd_run() <span class="overload">[1/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">integer lmf_igd_run </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>rel_output</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">regclass&#160;</td>
+          <td class="paramname"><em>rel_source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>col_row</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>col_column</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>col_value</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_dim</em> = <code>&quot;SELECT&#160;max(col_row)&#160;FROM&#160;rel_source&quot;</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>column_dim</em> = <code>&quot;SELECT&#160;max(col_col)&#160;FROM&#160;rel_source&quot;</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_rank</em> = <code>20</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>stepsize</em> = <code>0.01</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>scale_factor</em> = <code>0.1</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_iterations</em> = <code>10</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>tolerance</em> = <code>0.0001</code>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>This function takes as input the table representation of a incomplete matrix in the sparse (i, j, value) format and decomposes it into the specified set of most significant features of matrices of U and V matrix. The input matrix is expected to have dimension [1:row_dim][1:column_dim], but in sparse format.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">rel_output</td><td>Name of the table that the factors will be appended to </td></tr>
+    <tr><td class="paramname">rel_source</td><td>Name of the table/view with the source data </td></tr>
+    <tr><td class="paramname">col_row</td><td>Name of the column containing cell row number </td></tr>
+    <tr><td class="paramname">col_column</td><td>Name of the column containing cell column number </td></tr>
+    <tr><td class="paramname">col_value</td><td>Name of the column containing cell value </td></tr>
+    <tr><td class="paramname">row_dim</td><td>Maximum number of rows of input </td></tr>
+    <tr><td class="paramname">column_dim</td><td>Maximum number of columns of input </td></tr>
+    <tr><td class="paramname">max_rank</td><td>Rank of desired approximation </td></tr>
+    <tr><td class="paramname">stepsize</td><td>Hyper-parameter that decides how aggressive that the gradient steps are </td></tr>
+    <tr><td class="paramname">scale_factor</td><td>Hyper-parameter that decides scale of initial factors </td></tr>
+    <tr><td class="paramname">num_iterations</td><td>Maximum number if iterations to perform regardless of convergence </td></tr>
+    <tr><td class="paramname">tolerance</td><td>Acceptable level of error in convergence. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a917cb41e439c6786f91a27463dca0732"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a917cb41e439c6786f91a27463dca0732">&#9670;&nbsp;</a></span>lmf_igd_run() <span class="overload">[2/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">integer lmf_igd_run </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>rel_output</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">regclass&#160;</td>
+          <td class="paramname"><em>rel_source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>col_row</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>col_column</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>col_value</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>column_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_rank</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>stepsize</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>scale_factor</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a9b18ea9dd016d109a5c001762394e788"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9b18ea9dd016d109a5c001762394e788">&#9670;&nbsp;</a></span>lmf_igd_run() <span class="overload">[3/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">integer lmf_igd_run </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>rel_output</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">regclass&#160;</td>
+          <td class="paramname"><em>rel_source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>col_row</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>col_column</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>col_value</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>column_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_rank</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>stepsize</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a0c5c2d04936ac341e8c054237266938b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0c5c2d04936ac341e8c054237266938b">&#9670;&nbsp;</a></span>lmf_igd_run() <span class="overload">[4/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">integer lmf_igd_run </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>rel_output</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">regclass&#160;</td>
+          <td class="paramname"><em>rel_source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>col_row</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>col_column</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>col_value</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>column_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_rank</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="acaeef70cbcad01aadbad6fbce81d42fb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acaeef70cbcad01aadbad6fbce81d42fb">&#9670;&nbsp;</a></span>lmf_igd_run() <span class="overload">[5/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">integer lmf_igd_run </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>rel_output</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">regclass&#160;</td>
+          <td class="paramname"><em>rel_source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>col_row</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>col_column</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>col_value</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a54d2ca2048d9a0c29d5593530b932a23"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a54d2ca2048d9a0c29d5593530b932a23">&#9670;&nbsp;</a></span>lmf_igd_step()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] lmf_igd_step </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_num</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>column_num</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>val</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>previous_state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>column_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_rank</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>stepsize</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>scale_factor</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a187574cfe85888b29d6b1658554e7507"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a187574cfe85888b29d6b1658554e7507">&#9670;&nbsp;</a></span>lmf_igd_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] lmf_igd_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_num</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>column_num</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>val</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>previous_state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>column_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_rank</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>stepsize</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>scale_factor</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_93c42bb4df0f3e1302223b6dfd48c81e.html">convex</a></li><li class="navelem"><a class="el" href="lmf_8sql__in.html">lmf.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:57 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/logistic_8sql__in.html b/docs/rc/logistic_8sql__in.html
new file mode 100644
index 0000000..cd2146d
--- /dev/null
+++ b/docs/rc/logistic_8sql__in.html
@@ -0,0 +1,1283 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: logistic.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('logistic_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">logistic.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>SQL functions for logistic regression.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a874e9c5a3ebb7efab16730f85d3e8d25"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logistic_8sql__in.html#a874e9c5a3ebb7efab16730f85d3e8d25">__logregr_cg_step_transition</a> (float8[], boolean, float8[], float8[])</td></tr>
+<tr class="separator:a874e9c5a3ebb7efab16730f85d3e8d25"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa51c257177aa60df02dcf46bac43982e"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logistic_8sql__in.html#aa51c257177aa60df02dcf46bac43982e">__logregr_irls_step_transition</a> (float8[], boolean, float8[], float8[])</td></tr>
+<tr class="separator:aa51c257177aa60df02dcf46bac43982e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0f4010cefc479196d2d280514f92e5b0"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logistic_8sql__in.html#a0f4010cefc479196d2d280514f92e5b0">__logregr_igd_step_transition</a> (float8[], boolean, float8[], float8[])</td></tr>
+<tr class="separator:a0f4010cefc479196d2d280514f92e5b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae4f6142efcde3c7d72405f5daf218af7"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logistic_8sql__in.html#ae4f6142efcde3c7d72405f5daf218af7">__logregr_cg_step_merge_states</a> (float8[] state1, float8[] state2)</td></tr>
+<tr class="separator:ae4f6142efcde3c7d72405f5daf218af7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2671672fed9d07b5c8c68a63e3d99e5f"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logistic_8sql__in.html#a2671672fed9d07b5c8c68a63e3d99e5f">__logregr_irls_step_merge_states</a> (float8[] state1, float8[] state2)</td></tr>
+<tr class="separator:a2671672fed9d07b5c8c68a63e3d99e5f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2b23f6e4f9671b511d675c43b42b6544"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logistic_8sql__in.html#a2b23f6e4f9671b511d675c43b42b6544">__logregr_igd_step_merge_states</a> (float8[] state1, float8[] state2)</td></tr>
+<tr class="separator:a2b23f6e4f9671b511d675c43b42b6544"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a909ec8b38aac9dd78ed7fb52e5e5910d"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logistic_8sql__in.html#a909ec8b38aac9dd78ed7fb52e5e5910d">__logregr_cg_step_final</a> (float8[] state)</td></tr>
+<tr class="separator:a909ec8b38aac9dd78ed7fb52e5e5910d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a45fbe307010fcb5890828e35a398c0a6"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logistic_8sql__in.html#a45fbe307010fcb5890828e35a398c0a6">__logregr_irls_step_final</a> (float8[] state)</td></tr>
+<tr class="separator:a45fbe307010fcb5890828e35a398c0a6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a44b3499c913ddcc44b0b9e18e2069fed"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logistic_8sql__in.html#a44b3499c913ddcc44b0b9e18e2069fed">__logregr_igd_step_final</a> (float8[] state)</td></tr>
+<tr class="separator:a44b3499c913ddcc44b0b9e18e2069fed"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0037d0e2891dff4ec1b4e856b9ac103c"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logistic_8sql__in.html#a0037d0e2891dff4ec1b4e856b9ac103c">__logregr_cg_step</a> (boolean y, float8[] x, float8[] previous_state)</td></tr>
+<tr class="separator:a0037d0e2891dff4ec1b4e856b9ac103c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7bdf5d39836d8b8826e38a9c15a613c0"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logistic_8sql__in.html#a7bdf5d39836d8b8826e38a9c15a613c0">__logregr_irls_step</a> (boolean y, float8[] x, float8[] previous_state)</td></tr>
+<tr class="separator:a7bdf5d39836d8b8826e38a9c15a613c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a782cd8580dac58cc0a70d534dd696801"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logistic_8sql__in.html#a782cd8580dac58cc0a70d534dd696801">__logregr_igd_step</a> (boolean y, float8[] x, float8[] previous_state)</td></tr>
+<tr class="separator:a782cd8580dac58cc0a70d534dd696801"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aabc041a54449405558d8a522f0e7d995"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logistic_8sql__in.html#aabc041a54449405558d8a522f0e7d995">__logregr_cg_step_distance</a> (float8[] state1, float8[] state2)</td></tr>
+<tr class="separator:aabc041a54449405558d8a522f0e7d995"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af5fcfe75b7724e0b93901e64e3f8c1b4"><td class="memItemLeft" align="right" valign="top">__logregr_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logistic_8sql__in.html#af5fcfe75b7724e0b93901e64e3f8c1b4">__logregr_cg_result</a> (float8[] state)</td></tr>
+<tr class="separator:af5fcfe75b7724e0b93901e64e3f8c1b4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a56962d63f19d6c4672f9772f6d2b2810"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logistic_8sql__in.html#a56962d63f19d6c4672f9772f6d2b2810">__logregr_irls_step_distance</a> (float8[] state1, float8[] state2)</td></tr>
+<tr class="separator:a56962d63f19d6c4672f9772f6d2b2810"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaaf5ea72356ebae7e808b54c495bc501"><td class="memItemLeft" align="right" valign="top">__logregr_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logistic_8sql__in.html#aaaf5ea72356ebae7e808b54c495bc501">__logregr_irls_result</a> (float8[] state)</td></tr>
+<tr class="separator:aaaf5ea72356ebae7e808b54c495bc501"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a993ec0ebec0084170902c0cefc489ae8"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logistic_8sql__in.html#a993ec0ebec0084170902c0cefc489ae8">__logregr_igd_step_distance</a> (float8[] state1, float8[] state2)</td></tr>
+<tr class="separator:a993ec0ebec0084170902c0cefc489ae8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab0b377e0dc63a7d79602643a6ee827c9"><td class="memItemLeft" align="right" valign="top">__logregr_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logistic_8sql__in.html#ab0b377e0dc63a7d79602643a6ee827c9">__logregr_igd_result</a> (float8[] state)</td></tr>
+<tr class="separator:ab0b377e0dc63a7d79602643a6ee827c9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a74210a7ef513dfcbdfdd9f3b37bfe428"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logistic_8sql__in.html#a74210a7ef513dfcbdfdd9f3b37bfe428">logregr_train</a> (varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, varchar grouping_cols, integer max_iter, varchar optimizer, float8 tolerance, boolean verbose)</td></tr>
+<tr class="memdesc:a74210a7ef513dfcbdfdd9f3b37bfe428"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute logistic-regression coefficients and diagnostic statistics.  <a href="#a74210a7ef513dfcbdfdd9f3b37bfe428">More...</a><br /></td></tr>
+<tr class="separator:a74210a7ef513dfcbdfdd9f3b37bfe428"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a58dfa3dc74518179c584ae535e331a7d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logistic_8sql__in.html#a58dfa3dc74518179c584ae535e331a7d">logregr_train</a> (varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname)</td></tr>
+<tr class="separator:a58dfa3dc74518179c584ae535e331a7d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a327660873183347c9e00bdbd01983a63"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logistic_8sql__in.html#a327660873183347c9e00bdbd01983a63">logregr_train</a> (varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, varchar grouping_cols)</td></tr>
+<tr class="separator:a327660873183347c9e00bdbd01983a63"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3c217840f2fbe1dcd53ba15c4111b86a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logistic_8sql__in.html#a3c217840f2fbe1dcd53ba15c4111b86a">logregr_train</a> (varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, varchar grouping_cols, integer max_iter)</td></tr>
+<tr class="separator:a3c217840f2fbe1dcd53ba15c4111b86a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa321fe6cffa263b1eb612b15e8fb9a6d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logistic_8sql__in.html#aa321fe6cffa263b1eb612b15e8fb9a6d">logregr_train</a> (varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, varchar grouping_cols, integer max_iter, varchar optimizer)</td></tr>
+<tr class="separator:aa321fe6cffa263b1eb612b15e8fb9a6d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6b5ffd41b8b00e4c4417653250a265fb"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logistic_8sql__in.html#a6b5ffd41b8b00e4c4417653250a265fb">logregr_train</a> (varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, varchar grouping_cols, integer max_iter, varchar optimizer, float8 tolerance)</td></tr>
+<tr class="separator:a6b5ffd41b8b00e4c4417653250a265fb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3fbbdd2e6633816136d2958db9b4b6a3"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logistic_8sql__in.html#a3fbbdd2e6633816136d2958db9b4b6a3">logregr_train</a> (text message)</td></tr>
+<tr class="separator:a3fbbdd2e6633816136d2958db9b4b6a3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ada5fbc0833e802e7e6c1b489330ca15f"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logistic_8sql__in.html#ada5fbc0833e802e7e6c1b489330ca15f">logregr_train</a> ()</td></tr>
+<tr class="separator:ada5fbc0833e802e7e6c1b489330ca15f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4ded9be5c8b111dbb3109efaad83d69e"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logistic_8sql__in.html#a4ded9be5c8b111dbb3109efaad83d69e">logistic</a> (float8 x)</td></tr>
+<tr class="memdesc:a4ded9be5c8b111dbb3109efaad83d69e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Evaluate the usual logistic function in an under-/overflow-safe way.  <a href="#a4ded9be5c8b111dbb3109efaad83d69e">More...</a><br /></td></tr>
+<tr class="separator:a4ded9be5c8b111dbb3109efaad83d69e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abb60fcbfa7f13c4b62950b3ae5ee46b2"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logistic_8sql__in.html#abb60fcbfa7f13c4b62950b3ae5ee46b2">logregr_predict</a> (float8[] coef, float8[] col_ind_var)</td></tr>
+<tr class="memdesc:abb60fcbfa7f13c4b62950b3ae5ee46b2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Predict the boolean value of a dependent variable for a specific independent variable value in a logistic regression model.  <a href="#abb60fcbfa7f13c4b62950b3ae5ee46b2">More...</a><br /></td></tr>
+<tr class="separator:abb60fcbfa7f13c4b62950b3ae5ee46b2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acc8af7a39e7b0d604c2760d9d6bd0b5e"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logistic_8sql__in.html#acc8af7a39e7b0d604c2760d9d6bd0b5e">logregr_predict</a> (text message)</td></tr>
+<tr class="separator:acc8af7a39e7b0d604c2760d9d6bd0b5e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af3eae2b8acd75d4c6c4db8c79489c58f"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logistic_8sql__in.html#af3eae2b8acd75d4c6c4db8c79489c58f">logregr_predict</a> ()</td></tr>
+<tr class="separator:af3eae2b8acd75d4c6c4db8c79489c58f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acb8bcffac549a0968f6ee7c2d7f34d5e"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logistic_8sql__in.html#acb8bcffac549a0968f6ee7c2d7f34d5e">logregr_predict_prob</a> (float8[] coef, float8[] col_ind_var)</td></tr>
+<tr class="memdesc:acb8bcffac549a0968f6ee7c2d7f34d5e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute the probability of the boolean dependent variable being True for a specific independent variable iin a logistic regression model.  <a href="#acb8bcffac549a0968f6ee7c2d7f34d5e">More...</a><br /></td></tr>
+<tr class="separator:acb8bcffac549a0968f6ee7c2d7f34d5e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4db4a78e264cc4868c931f5b5cf8b414"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logistic_8sql__in.html#a4db4a78e264cc4868c931f5b5cf8b414">logregr_predict_prob</a> (text message)</td></tr>
+<tr class="separator:a4db4a78e264cc4868c931f5b5cf8b414"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a75dba5248d75cd6c5d2fb69f944ce479"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="logistic_8sql__in.html#a75dba5248d75cd6c5d2fb69f944ce479">logregr_predict_prob</a> ()</td></tr>
+<tr class="separator:a75dba5248d75cd6c5d2fb69f944ce479"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><dl class="section date"><dt>Date</dt><dd>January 2011</dd></dl>
+<dl class="section see"><dt>See also</dt><dd>For a brief introduction to <a class="el" href="logistic_8sql__in.html#a4ded9be5c8b111dbb3109efaad83d69e" title="Evaluate the usual logistic function in an under-/overflow-safe way. ">logistic</a> regression, see the module description <a class="el" href="group__grp__logreg.html">Logistic Regression</a>. </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="af5fcfe75b7724e0b93901e64e3f8c1b4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af5fcfe75b7724e0b93901e64e3f8c1b4">&#9670;&nbsp;</a></span>__logregr_cg_result()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">__logregr_result __logregr_cg_result </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a0037d0e2891dff4ec1b4e856b9ac103c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0037d0e2891dff4ec1b4e856b9ac103c">&#9670;&nbsp;</a></span>__logregr_cg_step()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] __logregr_cg_step </td>
+          <td>(</td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>previous_state</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aabc041a54449405558d8a522f0e7d995"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aabc041a54449405558d8a522f0e7d995">&#9670;&nbsp;</a></span>__logregr_cg_step_distance()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 __logregr_cg_step_distance </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a909ec8b38aac9dd78ed7fb52e5e5910d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a909ec8b38aac9dd78ed7fb52e5e5910d">&#9670;&nbsp;</a></span>__logregr_cg_step_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __logregr_cg_step_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae4f6142efcde3c7d72405f5daf218af7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae4f6142efcde3c7d72405f5daf218af7">&#9670;&nbsp;</a></span>__logregr_cg_step_merge_states()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __logregr_cg_step_merge_states </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a874e9c5a3ebb7efab16730f85d3e8d25"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a874e9c5a3ebb7efab16730f85d3e8d25">&#9670;&nbsp;</a></span>__logregr_cg_step_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __logregr_cg_step_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[]&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab0b377e0dc63a7d79602643a6ee827c9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab0b377e0dc63a7d79602643a6ee827c9">&#9670;&nbsp;</a></span>__logregr_igd_result()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">__logregr_result __logregr_igd_result </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a782cd8580dac58cc0a70d534dd696801"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a782cd8580dac58cc0a70d534dd696801">&#9670;&nbsp;</a></span>__logregr_igd_step()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] __logregr_igd_step </td>
+          <td>(</td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>previous_state</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a993ec0ebec0084170902c0cefc489ae8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a993ec0ebec0084170902c0cefc489ae8">&#9670;&nbsp;</a></span>__logregr_igd_step_distance()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 __logregr_igd_step_distance </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a44b3499c913ddcc44b0b9e18e2069fed"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a44b3499c913ddcc44b0b9e18e2069fed">&#9670;&nbsp;</a></span>__logregr_igd_step_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __logregr_igd_step_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a2b23f6e4f9671b511d675c43b42b6544"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2b23f6e4f9671b511d675c43b42b6544">&#9670;&nbsp;</a></span>__logregr_igd_step_merge_states()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __logregr_igd_step_merge_states </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a0f4010cefc479196d2d280514f92e5b0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0f4010cefc479196d2d280514f92e5b0">&#9670;&nbsp;</a></span>__logregr_igd_step_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __logregr_igd_step_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[]&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aaaf5ea72356ebae7e808b54c495bc501"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aaaf5ea72356ebae7e808b54c495bc501">&#9670;&nbsp;</a></span>__logregr_irls_result()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">__logregr_result __logregr_irls_result </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7bdf5d39836d8b8826e38a9c15a613c0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7bdf5d39836d8b8826e38a9c15a613c0">&#9670;&nbsp;</a></span>__logregr_irls_step()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] __logregr_irls_step </td>
+          <td>(</td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>previous_state</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a56962d63f19d6c4672f9772f6d2b2810"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a56962d63f19d6c4672f9772f6d2b2810">&#9670;&nbsp;</a></span>__logregr_irls_step_distance()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 __logregr_irls_step_distance </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a45fbe307010fcb5890828e35a398c0a6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a45fbe307010fcb5890828e35a398c0a6">&#9670;&nbsp;</a></span>__logregr_irls_step_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __logregr_irls_step_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a2671672fed9d07b5c8c68a63e3d99e5f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2671672fed9d07b5c8c68a63e3d99e5f">&#9670;&nbsp;</a></span>__logregr_irls_step_merge_states()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __logregr_irls_step_merge_states </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa51c257177aa60df02dcf46bac43982e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa51c257177aa60df02dcf46bac43982e">&#9670;&nbsp;</a></span>__logregr_irls_step_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __logregr_irls_step_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[]&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a4ded9be5c8b111dbb3109efaad83d69e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4ded9be5c8b111dbb3109efaad83d69e">&#9670;&nbsp;</a></span>logistic()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 logistic </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( \frac{1}{1 + \exp(-x)} \)</dd></dl>
+<p>Evaluating this expression directly can lead to under- or overflows. This function performs the evaluation in a safe manner, making use of the following observations:</p>
+<p>In order for the outcome of \( \exp(x) \) to be within the range of the minimum positive double-precision number (i.e., \( 2^{-1074} \)) and the maximum positive double-precision number (i.e., \( (1 + (1 - 2^{52})) * 2^{1023}) \), \( x \) has to be within the natural logarithm of these numbers, so roughly in between -744 and 709. However, \( 1 + \exp(x) \) will just evaluate to 1 if \( \exp(x) \) is less than the machine epsilon (i.e., \( 2^{-52} \)) or, equivalently, if \( x \) is less than the natural logarithm of that; i.e., in any case if \( x \) is less than -37. Note that taking the reciprocal of the largest double-precision number will not cause an underflow. Hence, no further checks are necessary. </p>
+
+</div>
+</div>
+<a id="abb60fcbfa7f13c4b62950b3ae5ee46b2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abb60fcbfa7f13c4b62950b3ae5ee46b2">&#9670;&nbsp;</a></span>logregr_predict() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">boolean logregr_predict </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>coef</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>col_ind_var</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">coef</td><td>Coefficients obtained by running logistic regression. </td></tr>
+    <tr><td class="paramname">col_ind</td><td>Independent variable array </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Boolean value of the dependent variable</dd></dl>
+<p>This function computes the dot product of the independent variables and the coefficients. This requires the length of the two vectors to be the same. </p>
+
+</div>
+</div>
+<a id="acc8af7a39e7b0d604c2760d9d6bd0b5e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acc8af7a39e7b0d604c2760d9d6bd0b5e">&#9670;&nbsp;</a></span>logregr_predict() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text logregr_predict </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="af3eae2b8acd75d4c6c4db8c79489c58f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af3eae2b8acd75d4c6c4db8c79489c58f">&#9670;&nbsp;</a></span>logregr_predict() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text logregr_predict </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="acb8bcffac549a0968f6ee7c2d7f34d5e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acb8bcffac549a0968f6ee7c2d7f34d5e">&#9670;&nbsp;</a></span>logregr_predict_prob() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 logregr_predict_prob </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>coef</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>col_ind_var</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">coef</td><td>Coefficients obtained by running logistic regression. </td></tr>
+    <tr><td class="paramname">col_ind</td><td>Independent variable array </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Probability value of the dependent variable being True</dd></dl>
+<p>This function computes the dot product of the independent variables and the coefficients, hence requires the length of the two vectors to be the same. </p>
+
+</div>
+</div>
+<a id="a4db4a78e264cc4868c931f5b5cf8b414"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4db4a78e264cc4868c931f5b5cf8b414">&#9670;&nbsp;</a></span>logregr_predict_prob() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text logregr_predict_prob </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a75dba5248d75cd6c5d2fb69f944ce479"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a75dba5248d75cd6c5d2fb69f944ce479">&#9670;&nbsp;</a></span>logregr_predict_prob() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text logregr_predict_prob </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a74210a7ef513dfcbdfdd9f3b37bfe428"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a74210a7ef513dfcbdfdd9f3b37bfe428">&#9670;&nbsp;</a></span>logregr_train() <span class="overload">[1/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void logregr_train </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_iter</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>optimizer</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>tolerance</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>verbose</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>To include an intercept in the model, set one coordinate in the <code>independentVariables</code> array to 1.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">source_table</td><td>Name of the source relation containing the training data </td></tr>
+    <tr><td class="paramname">out_table</td><td>Name of the output relation to store the model results <pre class="fragment">              Columns of the output relation are as follows:
+               - &lt;tt&gt;coef FLOAT8[]&lt;/tt&gt; - Array of coefficients, \form#79
+               - &lt;tt&gt;log_likelihood FLOAT8&lt;/tt&gt; - Log-likelihood \form#80
+               - &lt;tt&gt;std_err FLOAT8[]&lt;/tt&gt; - Array of standard errors,
+</pre> \( \mathit{se}(c_1), \dots, \mathit{se}(c_k) \)<ul>
+<li><code>z_stats FLOAT8[]</code> - Array of Wald z-statistics, \( \boldsymbol z \)</li>
+<li><code>p_values FLOAT8[]</code> - Array of Wald p-values, \( \boldsymbol p \)</li>
+<li><code>odds_ratios FLOAT8[]</code>: Array of odds ratios, \( \mathit{odds}(c_1), \dots, \mathit{odds}(c_k) \)</li>
+<li><code>condition_no FLOAT8</code> - The condition number of matrix \( X^T A X \) during the iteration immediately <em>preceding</em> convergence (i.e., \( A \) is computed using the coefficients of the previous iteration) </li>
+</ul>
+</td></tr>
+    <tr><td class="paramname">dependent_varname</td><td>Name of the dependent column (of type BOOLEAN) </td></tr>
+    <tr><td class="paramname">independent_varname</td><td>Name of the independent column (of type DOUBLE PRECISION[]) </td></tr>
+    <tr><td class="paramname">grouping_col</td><td>Comma delimited list of column names to group-by </td></tr>
+    <tr><td class="paramname">max_iter</td><td>The maximum number of iterations </td></tr>
+    <tr><td class="paramname">optimizer</td><td>The optimizer to use (either <code>'irls'</code>/<code>'newton'</code> for iteratively reweighted least squares or <code>'cg'</code> for conjugent gradient) </td></tr>
+    <tr><td class="paramname">tolerance</td><td>The difference between log-likelihood values in successive iterations that should indicate convergence. This value should be non-negative and a zero value here disables the convergence criterion, and execution will only stop after <code>maxNumIterations</code> iterations. </td></tr>
+    <tr><td class="paramname">verbose</td><td>If true, any error or warning message will be printed to the console (irrespective of the 'client_min_messages' set by server). If false, no error/warning message is printed to console.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section user"><dt>Usage</dt><dd><ul>
+<li>Get vector of coefficients \( \boldsymbol c \) and all diagnostic statistics:<br />
+ <pre>SELECT logregr_train('<em>sourceName</em>', '<em>outName</em>'
+          '<em>dependentVariable</em>', '<em>independentVariables</em>');
+         SELECT * from outName;
+   </pre></li>
+<li>Get vector of coefficients \( \boldsymbol c \):<br />
+ <pre>SELECT coef from outName;</pre></li>
+<li>Get a subset of the output columns, e.g., only the array of coefficients \( \boldsymbol c \), the log-likelihood of determination \( l(\boldsymbol c) \), and the array of p-values \( \boldsymbol p \): <pre>SELECT coef, log_likelihood, p_values FROM outName;</pre></li>
+</ul>
+</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function starts an iterative algorithm. It is not an aggregate function. Source, output, and column names have to be passed as strings (due to limitations of the SQL syntax). </dd></dl>
+
+</div>
+</div>
+<a id="a58dfa3dc74518179c584ae535e331a7d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a58dfa3dc74518179c584ae535e331a7d">&#9670;&nbsp;</a></span>logregr_train() <span class="overload">[2/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void logregr_train </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a327660873183347c9e00bdbd01983a63"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a327660873183347c9e00bdbd01983a63">&#9670;&nbsp;</a></span>logregr_train() <span class="overload">[3/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void logregr_train </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a3c217840f2fbe1dcd53ba15c4111b86a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3c217840f2fbe1dcd53ba15c4111b86a">&#9670;&nbsp;</a></span>logregr_train() <span class="overload">[4/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void logregr_train </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_iter</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa321fe6cffa263b1eb612b15e8fb9a6d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa321fe6cffa263b1eb612b15e8fb9a6d">&#9670;&nbsp;</a></span>logregr_train() <span class="overload">[5/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void logregr_train </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_iter</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>optimizer</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a6b5ffd41b8b00e4c4417653250a265fb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6b5ffd41b8b00e4c4417653250a265fb">&#9670;&nbsp;</a></span>logregr_train() <span class="overload">[6/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void logregr_train </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_iter</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>optimizer</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>tolerance</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a3fbbdd2e6633816136d2958db9b4b6a3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3fbbdd2e6633816136d2958db9b4b6a3">&#9670;&nbsp;</a></span>logregr_train() <span class="overload">[7/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text logregr_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ada5fbc0833e802e7e6c1b489330ca15f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ada5fbc0833e802e7e6c1b489330ca15f">&#9670;&nbsp;</a></span>logregr_train() <span class="overload">[8/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text logregr_train </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_ac52a4b89b7b1b1591f2952b5cbd041a.html">regress</a></li><li class="navelem"><a class="el" href="logistic_8sql__in.html">logistic.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:57 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/madlib.png b/docs/rc/madlib.png
new file mode 100644
index 0000000..be014c6
--- /dev/null
+++ b/docs/rc/madlib.png
Binary files differ
diff --git a/docs/rc/madlib__keras_8sql__in.html b/docs/rc/madlib__keras_8sql__in.html
new file mode 100644
index 0000000..fcfed0e
--- /dev/null
+++ b/docs/rc/madlib__keras_8sql__in.html
@@ -0,0 +1,2131 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: madlib_keras.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('madlib__keras_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">madlib_keras.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>SQL functions for distributed deep learning with keras.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a2277a353d16623515fe4488b43fadaaa"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="madlib__keras_8sql__in.html#a2277a353d16623515fe4488b43fadaaa">madlib_keras_fit</a> (varchar source_table, varchar model, varchar model_arch_table, integer model_id, varchar compile_params, varchar fit_params, integer num_iterations, boolean use_gpus, varchar validation_table, integer metrics_compute_frequency, boolean warm_start, varchar name, varchar description)</td></tr>
+<tr class="separator:a2277a353d16623515fe4488b43fadaaa"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7348b5bba0f2873350ed3d59a740ed12"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="madlib__keras_8sql__in.html#a7348b5bba0f2873350ed3d59a740ed12">madlib_keras_fit</a> (varchar source_table, varchar model, varchar model_arch_table, integer model_id, varchar compile_params, varchar fit_params, integer num_iterations, boolean use_gpus, varchar validation_table, integer metrics_compute_frequency, boolean warm_start, varchar name)</td></tr>
+<tr class="separator:a7348b5bba0f2873350ed3d59a740ed12"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1ef596b705f1531d3863fbe3d7cbd9ab"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="madlib__keras_8sql__in.html#a1ef596b705f1531d3863fbe3d7cbd9ab">madlib_keras_fit</a> (varchar source_table, varchar model, varchar model_arch_table, integer model_id, varchar compile_params, varchar fit_params, integer num_iterations, boolean use_gpus, varchar validation_table, integer metrics_compute_frequency, boolean warm_start)</td></tr>
+<tr class="separator:a1ef596b705f1531d3863fbe3d7cbd9ab"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8c2226dd73ed52ae99b20b1599458c52"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="madlib__keras_8sql__in.html#a8c2226dd73ed52ae99b20b1599458c52">madlib_keras_fit</a> (varchar source_table, varchar model, varchar model_arch_table, integer model_id, varchar compile_params, varchar fit_params, integer num_iterations, boolean use_gpus, varchar validation_table, integer metrics_compute_frequency)</td></tr>
+<tr class="separator:a8c2226dd73ed52ae99b20b1599458c52"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4b7dae7a619db29d119cd416352d5242"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="madlib__keras_8sql__in.html#a4b7dae7a619db29d119cd416352d5242">madlib_keras_fit</a> (varchar source_table, varchar model, varchar model_arch_table, integer model_id, varchar compile_params, varchar fit_params, integer num_iterations, boolean use_gpus, varchar validation_table)</td></tr>
+<tr class="separator:a4b7dae7a619db29d119cd416352d5242"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a02b249fc761d06858544368f73ad4552"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="madlib__keras_8sql__in.html#a02b249fc761d06858544368f73ad4552">madlib_keras_fit</a> (varchar source_table, varchar model, varchar model_arch_table, integer model_id, varchar compile_params, varchar fit_params, integer num_iterations, boolean use_gpus)</td></tr>
+<tr class="separator:a02b249fc761d06858544368f73ad4552"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ade193e83d63f5f55a2aa3c01ca203dea"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="madlib__keras_8sql__in.html#ade193e83d63f5f55a2aa3c01ca203dea">madlib_keras_fit</a> (varchar source_table, varchar model, varchar model_arch_table, integer model_id, varchar compile_params, varchar fit_params, integer num_iterations)</td></tr>
+<tr class="separator:ade193e83d63f5f55a2aa3c01ca203dea"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a850f8c8fcfe7b4999aebee849252f703"><td class="memItemLeft" align="right" valign="top">bytea&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="madlib__keras_8sql__in.html#a850f8c8fcfe7b4999aebee849252f703">fit_transition</a> (bytea state, bytea dependent_var, bytea independent_var, integer[] dependent_var_shape, integer[] independent_var_shape, text model_architecture, text compile_params, text fit_params, integer dist_key, integer[] dist_key_mapping, integer current_seg_id, integer segments_per_host, integer[] images_per_seg, boolean use_gpus, integer[] accessible_gpus_for_seg, bytea prev_serialized_weights, boolean is_final_iteration)</td></tr>
+<tr class="separator:a850f8c8fcfe7b4999aebee849252f703"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acb0ec519bd8ee5ed964d092ca1654e6a"><td class="memItemLeft" align="right" valign="top">bytea&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="madlib__keras_8sql__in.html#acb0ec519bd8ee5ed964d092ca1654e6a">fit_merge</a> (bytea state1, bytea state2)</td></tr>
+<tr class="separator:acb0ec519bd8ee5ed964d092ca1654e6a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afed0955ca706593416484f91c9248c3c"><td class="memItemLeft" align="right" valign="top">bytea&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="madlib__keras_8sql__in.html#afed0955ca706593416484f91c9248c3c">fit_final</a> (bytea state)</td></tr>
+<tr class="separator:afed0955ca706593416484f91c9248c3c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae1f24820d99f9536085b2c20bc0bfd58"><td class="memItemLeft" align="right" valign="top">aggregate bytea&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="madlib__keras_8sql__in.html#ae1f24820d99f9536085b2c20bc0bfd58">fit_step</a> (bytea, bytea, integer[], integer[], text, text, text, integer, integer[], integer, integer, integer[], boolean, integer[], bytea, boolean)</td></tr>
+<tr class="separator:ae1f24820d99f9536085b2c20bc0bfd58"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adcc77d0ebdd3164d57745713ae47419c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="madlib__keras_8sql__in.html#adcc77d0ebdd3164d57745713ae47419c">madlib_keras_predict</a> (varchar model_table, varchar test_table, varchar id_col, varchar independent_varname, varchar output_table, varchar pred_type, boolean use_gpus, integer mst_key)</td></tr>
+<tr class="separator:adcc77d0ebdd3164d57745713ae47419c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a98620f248df8129f83bbcc1df0f47780"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="madlib__keras_8sql__in.html#a98620f248df8129f83bbcc1df0f47780">madlib_keras_predict</a> (varchar model_table, varchar test_table, varchar id_col, varchar independent_varname, varchar output_table, varchar pred_type, boolean use_gpus)</td></tr>
+<tr class="separator:a98620f248df8129f83bbcc1df0f47780"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac45dd3c88be4d8e6b7fdfd6548918a7c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="madlib__keras_8sql__in.html#ac45dd3c88be4d8e6b7fdfd6548918a7c">madlib_keras_predict</a> (varchar model_table, varchar test_table, varchar id_col, varchar independent_varname, varchar output_table, varchar pred_type)</td></tr>
+<tr class="separator:ac45dd3c88be4d8e6b7fdfd6548918a7c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a93155e5285e2f1b2b095b90d370fea42"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="madlib__keras_8sql__in.html#a93155e5285e2f1b2b095b90d370fea42">madlib_keras_predict</a> (varchar model_table, varchar test_table, varchar id_col, varchar independent_varname, varchar output_table)</td></tr>
+<tr class="separator:a93155e5285e2f1b2b095b90d370fea42"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a96f46662a481884788f6b33f522136ba"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="madlib__keras_8sql__in.html#a96f46662a481884788f6b33f522136ba">internal_keras_predict</a> (real[] independent_var, text model_architecture, bytea model_weights, boolean is_response, float8 normalizing_const, integer current_seg_id, integer[] seg_ids, integer[] images_per_seg, boolean use_gpus, integer gpus_per_host, integer segments_per_host)</td></tr>
+<tr class="separator:a96f46662a481884788f6b33f522136ba"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a20dfc5a72a13e7647b69c7b21fe37f8d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="madlib__keras_8sql__in.html#a20dfc5a72a13e7647b69c7b21fe37f8d">madlib_keras_predict_byom</a> (varchar model_arch_table, integer model_id, varchar test_table, varchar id_col, varchar independent_varname, varchar output_table, varchar pred_type, boolean use_gpus, text[] class_values, float8 normalizing_const)</td></tr>
+<tr class="separator:a20dfc5a72a13e7647b69c7b21fe37f8d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0d01c29f03a76f9bb71c7dc9f3a15cf1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="madlib__keras_8sql__in.html#a0d01c29f03a76f9bb71c7dc9f3a15cf1">madlib_keras_predict_byom</a> (varchar model_arch_table, integer model_id, varchar test_table, varchar id_col, varchar independent_varname, varchar output_table, varchar pred_type, boolean use_gpus, text[] class_values)</td></tr>
+<tr class="separator:a0d01c29f03a76f9bb71c7dc9f3a15cf1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7066fd8ef56abcb8bb058e4aaa9f5722"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="madlib__keras_8sql__in.html#a7066fd8ef56abcb8bb058e4aaa9f5722">madlib_keras_predict_byom</a> (varchar model_arch_table, integer model_id, varchar test_table, varchar id_col, varchar independent_varname, varchar output_table, varchar pred_type, boolean use_gpus)</td></tr>
+<tr class="separator:a7066fd8ef56abcb8bb058e4aaa9f5722"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1785160cada96aa687dde8cce118ebb3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="madlib__keras_8sql__in.html#a1785160cada96aa687dde8cce118ebb3">madlib_keras_predict_byom</a> (varchar model_arch_table, integer model_id, varchar test_table, varchar id_col, varchar independent_varname, varchar output_table, varchar pred_type)</td></tr>
+<tr class="separator:a1785160cada96aa687dde8cce118ebb3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acc0251a671b2b9b2e597428ebc41253f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="madlib__keras_8sql__in.html#acc0251a671b2b9b2e597428ebc41253f">madlib_keras_predict_byom</a> (varchar model_arch_table, integer model_id, varchar test_table, varchar id_col, varchar independent_varname, varchar output_table)</td></tr>
+<tr class="separator:acc0251a671b2b9b2e597428ebc41253f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adfd96adf2b42c0fda3d7fcbde3c980de"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="madlib__keras_8sql__in.html#adfd96adf2b42c0fda3d7fcbde3c980de">madlib_keras_evaluate</a> (varchar model_table, varchar test_table, varchar output_table, boolean use_gpus, integer mst_key)</td></tr>
+<tr class="separator:adfd96adf2b42c0fda3d7fcbde3c980de"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acc8a3dd6d66f2ee42051bff16fdbb6f2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="madlib__keras_8sql__in.html#acc8a3dd6d66f2ee42051bff16fdbb6f2">madlib_keras_evaluate</a> (varchar model_table, varchar test_table, varchar output_table, boolean use_gpus)</td></tr>
+<tr class="separator:acc8a3dd6d66f2ee42051bff16fdbb6f2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a379574acd7e9ac62900ae24322934554"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="madlib__keras_8sql__in.html#a379574acd7e9ac62900ae24322934554">madlib_keras_evaluate</a> (varchar model_table, varchar test_table, varchar output_table)</td></tr>
+<tr class="separator:a379574acd7e9ac62900ae24322934554"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a05ede18786181c1673176940e79e4dce"><td class="memItemLeft" align="right" valign="top">real [3]&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="madlib__keras_8sql__in.html#a05ede18786181c1673176940e79e4dce">internal_keras_eval_transition</a> (real[3] state, bytea dependent_var, bytea independent_var, integer[] dependent_var_shape, integer[] independent_var_shape, text model_architecture, bytea serialized_weights, text compile_params, integer dist_key, integer[] dist_key_mapping, integer current_seg_id, integer segments_per_host, integer[] images_per_seg, boolean use_gpus, integer[] accessible_gpus_for_seg, boolean is_final_iteration)</td></tr>
+<tr class="separator:a05ede18786181c1673176940e79e4dce"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aba484f65a2ecdf6005e441cc27e8da09"><td class="memItemLeft" align="right" valign="top">real [3]&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="madlib__keras_8sql__in.html#aba484f65a2ecdf6005e441cc27e8da09">internal_keras_eval_merge</a> (real[3] state1, real[3] state2)</td></tr>
+<tr class="separator:aba484f65a2ecdf6005e441cc27e8da09"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a43bdec57230522681fb6d39cc826f7ba"><td class="memItemLeft" align="right" valign="top">real [2]&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="madlib__keras_8sql__in.html#a43bdec57230522681fb6d39cc826f7ba">internal_keras_eval_final</a> (real[3] state)</td></tr>
+<tr class="separator:a43bdec57230522681fb6d39cc826f7ba"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad2d44bbeae0b0a466853228a740c2599"><td class="memItemLeft" align="right" valign="top">aggregate real [2]&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="madlib__keras_8sql__in.html#ad2d44bbeae0b0a466853228a740c2599">internal_keras_evaluate</a> (bytea, bytea, integer[], integer[], text, bytea, text, integer, integer[], integer, integer, integer[], boolean, integer[], boolean)</td></tr>
+<tr class="separator:ad2d44bbeae0b0a466853228a740c2599"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a255b2d1c5c446ee47162b8ba5cb3f834"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="madlib__keras_8sql__in.html#a255b2d1c5c446ee47162b8ba5cb3f834">madlib_keras_fit</a> (varchar message)</td></tr>
+<tr class="separator:a255b2d1c5c446ee47162b8ba5cb3f834"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a28e4824dd3daf1a0e6187517dd97b73f"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="madlib__keras_8sql__in.html#a28e4824dd3daf1a0e6187517dd97b73f">madlib_keras_fit</a> ()</td></tr>
+<tr class="separator:a28e4824dd3daf1a0e6187517dd97b73f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a43d52c0c82dd7a5f484077e1f8226bad"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="madlib__keras_8sql__in.html#a43d52c0c82dd7a5f484077e1f8226bad">madlib_keras_evaluate</a> (varchar message)</td></tr>
+<tr class="separator:a43d52c0c82dd7a5f484077e1f8226bad"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a60d92087e0229cc5ac4ce38dd3f0c754"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="madlib__keras_8sql__in.html#a60d92087e0229cc5ac4ce38dd3f0c754">madlib_keras_evaluate</a> ()</td></tr>
+<tr class="separator:a60d92087e0229cc5ac4ce38dd3f0c754"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a37ff677efafc788a222aceca98fefa10"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="madlib__keras_8sql__in.html#a37ff677efafc788a222aceca98fefa10">madlib_keras_predict</a> (varchar message)</td></tr>
+<tr class="separator:a37ff677efafc788a222aceca98fefa10"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a855673cb0170e2d71fd95c627bdd35ba"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="madlib__keras_8sql__in.html#a855673cb0170e2d71fd95c627bdd35ba">madlib_keras_predict</a> ()</td></tr>
+<tr class="separator:a855673cb0170e2d71fd95c627bdd35ba"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>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</p>
+<p><a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a></p>
+<p>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.</p>
+<dl class="section date"><dt>Date</dt><dd>June 2019 </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="afed0955ca706593416484f91c9248c3c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afed0955ca706593416484f91c9248c3c">&#9670;&nbsp;</a></span>fit_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea fit_final </td>
+          <td>(</td>
+          <td class="paramtype">bytea&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="acb0ec519bd8ee5ed964d092ca1654e6a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acb0ec519bd8ee5ed964d092ca1654e6a">&#9670;&nbsp;</a></span>fit_merge()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea fit_merge </td>
+          <td>(</td>
+          <td class="paramtype">bytea&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae1f24820d99f9536085b2c20bc0bfd58"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae1f24820d99f9536085b2c20bc0bfd58">&#9670;&nbsp;</a></span>fit_step()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate bytea fit_step </td>
+          <td>(</td>
+          <td class="paramtype">bytea&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a850f8c8fcfe7b4999aebee849252f703"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a850f8c8fcfe7b4999aebee849252f703">&#9670;&nbsp;</a></span>fit_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea fit_transition </td>
+          <td>(</td>
+          <td class="paramtype">bytea&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea&#160;</td>
+          <td class="paramname"><em>dependent_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea&#160;</td>
+          <td class="paramname"><em>independent_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>dependent_var_shape</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>independent_var_shape</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>model_architecture</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>compile_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>fit_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>dist_key</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>dist_key_mapping</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>current_seg_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>segments_per_host</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>images_per_seg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>use_gpus</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>accessible_gpus_for_seg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea&#160;</td>
+          <td class="paramname"><em>prev_serialized_weights</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>is_final_iteration</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a43bdec57230522681fb6d39cc826f7ba"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a43bdec57230522681fb6d39cc826f7ba">&#9670;&nbsp;</a></span>internal_keras_eval_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">real [2] internal_keras_eval_final </td>
+          <td>(</td>
+          <td class="paramtype">real&#160;</td>
+          <td class="paramname"><em>state</em>[3]</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aba484f65a2ecdf6005e441cc27e8da09"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aba484f65a2ecdf6005e441cc27e8da09">&#9670;&nbsp;</a></span>internal_keras_eval_merge()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">real [3] internal_keras_eval_merge </td>
+          <td>(</td>
+          <td class="paramtype">real&#160;</td>
+          <td class="paramname"><em>state1</em>[3], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">real&#160;</td>
+          <td class="paramname"><em>state2</em>[3]&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a05ede18786181c1673176940e79e4dce"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a05ede18786181c1673176940e79e4dce">&#9670;&nbsp;</a></span>internal_keras_eval_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">real [3] internal_keras_eval_transition </td>
+          <td>(</td>
+          <td class="paramtype">real&#160;</td>
+          <td class="paramname"><em>state</em>[3], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea&#160;</td>
+          <td class="paramname"><em>dependent_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea&#160;</td>
+          <td class="paramname"><em>independent_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>dependent_var_shape</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>independent_var_shape</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>model_architecture</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea&#160;</td>
+          <td class="paramname"><em>serialized_weights</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>compile_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>dist_key</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>dist_key_mapping</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>current_seg_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>segments_per_host</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>images_per_seg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>use_gpus</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>accessible_gpus_for_seg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>is_final_iteration</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ad2d44bbeae0b0a466853228a740c2599"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad2d44bbeae0b0a466853228a740c2599">&#9670;&nbsp;</a></span>internal_keras_evaluate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate real [2] internal_keras_evaluate </td>
+          <td>(</td>
+          <td class="paramtype">bytea&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a96f46662a481884788f6b33f522136ba"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a96f46662a481884788f6b33f522136ba">&#9670;&nbsp;</a></span>internal_keras_predict()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] internal_keras_predict </td>
+          <td>(</td>
+          <td class="paramtype">real []&#160;</td>
+          <td class="paramname"><em>independent_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>model_architecture</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea&#160;</td>
+          <td class="paramname"><em>model_weights</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>is_response</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>normalizing_const</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>current_seg_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>seg_ids</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>images_per_seg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>use_gpus</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>gpus_per_host</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>segments_per_host</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="adfd96adf2b42c0fda3d7fcbde3c980de"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adfd96adf2b42c0fda3d7fcbde3c980de">&#9670;&nbsp;</a></span>madlib_keras_evaluate() <span class="overload">[1/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void madlib_keras_evaluate </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>test_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>use_gpus</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>mst_key</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="acc8a3dd6d66f2ee42051bff16fdbb6f2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acc8a3dd6d66f2ee42051bff16fdbb6f2">&#9670;&nbsp;</a></span>madlib_keras_evaluate() <span class="overload">[2/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void madlib_keras_evaluate </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>test_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>use_gpus</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a379574acd7e9ac62900ae24322934554"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a379574acd7e9ac62900ae24322934554">&#9670;&nbsp;</a></span>madlib_keras_evaluate() <span class="overload">[3/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void madlib_keras_evaluate </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>test_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a43d52c0c82dd7a5f484077e1f8226bad"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a43d52c0c82dd7a5f484077e1f8226bad">&#9670;&nbsp;</a></span>madlib_keras_evaluate() <span class="overload">[4/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar madlib_keras_evaluate </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a60d92087e0229cc5ac4ce38dd3f0c754"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a60d92087e0229cc5ac4ce38dd3f0c754">&#9670;&nbsp;</a></span>madlib_keras_evaluate() <span class="overload">[5/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar madlib_keras_evaluate </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a2277a353d16623515fe4488b43fadaaa"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2277a353d16623515fe4488b43fadaaa">&#9670;&nbsp;</a></span>madlib_keras_fit() <span class="overload">[1/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void madlib_keras_fit </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model_arch_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>model_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>compile_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>fit_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_iterations</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>use_gpus</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>validation_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>metrics_compute_frequency</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>warm_start</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>description</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7348b5bba0f2873350ed3d59a740ed12"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7348b5bba0f2873350ed3d59a740ed12">&#9670;&nbsp;</a></span>madlib_keras_fit() <span class="overload">[2/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void madlib_keras_fit </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model_arch_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>model_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>compile_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>fit_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_iterations</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>use_gpus</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>validation_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>metrics_compute_frequency</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>warm_start</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>name</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1ef596b705f1531d3863fbe3d7cbd9ab"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1ef596b705f1531d3863fbe3d7cbd9ab">&#9670;&nbsp;</a></span>madlib_keras_fit() <span class="overload">[3/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void madlib_keras_fit </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model_arch_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>model_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>compile_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>fit_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_iterations</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>use_gpus</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>validation_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>metrics_compute_frequency</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>warm_start</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8c2226dd73ed52ae99b20b1599458c52"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8c2226dd73ed52ae99b20b1599458c52">&#9670;&nbsp;</a></span>madlib_keras_fit() <span class="overload">[4/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void madlib_keras_fit </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model_arch_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>model_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>compile_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>fit_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_iterations</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>use_gpus</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>validation_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>metrics_compute_frequency</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a4b7dae7a619db29d119cd416352d5242"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4b7dae7a619db29d119cd416352d5242">&#9670;&nbsp;</a></span>madlib_keras_fit() <span class="overload">[5/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void madlib_keras_fit </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model_arch_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>model_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>compile_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>fit_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_iterations</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>use_gpus</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>validation_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a02b249fc761d06858544368f73ad4552"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a02b249fc761d06858544368f73ad4552">&#9670;&nbsp;</a></span>madlib_keras_fit() <span class="overload">[6/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void madlib_keras_fit </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model_arch_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>model_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>compile_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>fit_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_iterations</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>use_gpus</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ade193e83d63f5f55a2aa3c01ca203dea"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ade193e83d63f5f55a2aa3c01ca203dea">&#9670;&nbsp;</a></span>madlib_keras_fit() <span class="overload">[7/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void madlib_keras_fit </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model_arch_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>model_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>compile_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>fit_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_iterations</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a255b2d1c5c446ee47162b8ba5cb3f834"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a255b2d1c5c446ee47162b8ba5cb3f834">&#9670;&nbsp;</a></span>madlib_keras_fit() <span class="overload">[8/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar madlib_keras_fit </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a28e4824dd3daf1a0e6187517dd97b73f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a28e4824dd3daf1a0e6187517dd97b73f">&#9670;&nbsp;</a></span>madlib_keras_fit() <span class="overload">[9/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar madlib_keras_fit </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="adcc77d0ebdd3164d57745713ae47419c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adcc77d0ebdd3164d57745713ae47419c">&#9670;&nbsp;</a></span>madlib_keras_predict() <span class="overload">[1/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void madlib_keras_predict </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>test_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>id_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>pred_type</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>use_gpus</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>mst_key</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a98620f248df8129f83bbcc1df0f47780"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a98620f248df8129f83bbcc1df0f47780">&#9670;&nbsp;</a></span>madlib_keras_predict() <span class="overload">[2/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void madlib_keras_predict </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>test_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>id_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>pred_type</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>use_gpus</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac45dd3c88be4d8e6b7fdfd6548918a7c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac45dd3c88be4d8e6b7fdfd6548918a7c">&#9670;&nbsp;</a></span>madlib_keras_predict() <span class="overload">[3/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void madlib_keras_predict </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>test_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>id_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>pred_type</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a93155e5285e2f1b2b095b90d370fea42"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a93155e5285e2f1b2b095b90d370fea42">&#9670;&nbsp;</a></span>madlib_keras_predict() <span class="overload">[4/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void madlib_keras_predict </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>test_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>id_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a37ff677efafc788a222aceca98fefa10"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a37ff677efafc788a222aceca98fefa10">&#9670;&nbsp;</a></span>madlib_keras_predict() <span class="overload">[5/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar madlib_keras_predict </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a855673cb0170e2d71fd95c627bdd35ba"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a855673cb0170e2d71fd95c627bdd35ba">&#9670;&nbsp;</a></span>madlib_keras_predict() <span class="overload">[6/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar madlib_keras_predict </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a20dfc5a72a13e7647b69c7b21fe37f8d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a20dfc5a72a13e7647b69c7b21fe37f8d">&#9670;&nbsp;</a></span>madlib_keras_predict_byom() <span class="overload">[1/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void madlib_keras_predict_byom </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model_arch_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>model_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>test_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>id_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>pred_type</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>use_gpus</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text []&#160;</td>
+          <td class="paramname"><em>class_values</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>normalizing_const</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a0d01c29f03a76f9bb71c7dc9f3a15cf1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0d01c29f03a76f9bb71c7dc9f3a15cf1">&#9670;&nbsp;</a></span>madlib_keras_predict_byom() <span class="overload">[2/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void madlib_keras_predict_byom </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model_arch_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>model_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>test_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>id_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>pred_type</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>use_gpus</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text []&#160;</td>
+          <td class="paramname"><em>class_values</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7066fd8ef56abcb8bb058e4aaa9f5722"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7066fd8ef56abcb8bb058e4aaa9f5722">&#9670;&nbsp;</a></span>madlib_keras_predict_byom() <span class="overload">[3/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void madlib_keras_predict_byom </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model_arch_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>model_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>test_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>id_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>pred_type</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>use_gpus</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1785160cada96aa687dde8cce118ebb3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1785160cada96aa687dde8cce118ebb3">&#9670;&nbsp;</a></span>madlib_keras_predict_byom() <span class="overload">[4/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void madlib_keras_predict_byom </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model_arch_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>model_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>test_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>id_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>pred_type</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="acc0251a671b2b9b2e597428ebc41253f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acc0251a671b2b9b2e597428ebc41253f">&#9670;&nbsp;</a></span>madlib_keras_predict_byom() <span class="overload">[5/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void madlib_keras_predict_byom </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model_arch_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>model_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>test_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>id_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_7592ceb856cf018f9811e11407c61fda.html">deep_learning</a></li><li class="navelem"><a class="el" href="madlib__keras_8sql__in.html">madlib_keras.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:57 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/madlib__keras__fit__multiple__model_8sql__in.html b/docs/rc/madlib__keras__fit__multiple__model_8sql__in.html
new file mode 100644
index 0000000..5d63876
--- /dev/null
+++ b/docs/rc/madlib__keras__fit__multiple__model_8sql__in.html
@@ -0,0 +1,748 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: madlib_keras_fit_multiple_model.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('madlib__keras__fit__multiple__model_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">madlib_keras_fit_multiple_model.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ab62d8e8a4e8d221b7baa4da6a214c286"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="madlib__keras__fit__multiple__model_8sql__in.html#ab62d8e8a4e8d221b7baa4da6a214c286">madlib_keras_fit_multiple_model</a> (varchar source_table, varchar model_output_table, varchar model_selection_table, integer num_iterations, boolean use_gpus, varchar validation_table, integer metrics_compute_frequency, boolean warm_start, varchar name, varchar description)</td></tr>
+<tr class="separator:ab62d8e8a4e8d221b7baa4da6a214c286"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3c71501e03430c229df4c47e2ad5c318"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="madlib__keras__fit__multiple__model_8sql__in.html#a3c71501e03430c229df4c47e2ad5c318">madlib_keras_fit_multiple_model</a> (varchar source_table, varchar model_output_table, varchar model_selection_table, integer num_iterations, boolean use_gpus, varchar validation_table, integer metrics_compute_frequency, boolean warm_start, varchar name)</td></tr>
+<tr class="separator:a3c71501e03430c229df4c47e2ad5c318"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5d9f7b628c0caead39bc511ed04e470b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="madlib__keras__fit__multiple__model_8sql__in.html#a5d9f7b628c0caead39bc511ed04e470b">madlib_keras_fit_multiple_model</a> (varchar source_table, varchar model_output_table, varchar model_selection_table, integer num_iterations, boolean use_gpus, varchar validation_table, integer metrics_compute_frequency, boolean warm_start)</td></tr>
+<tr class="separator:a5d9f7b628c0caead39bc511ed04e470b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9d9b5dfa99c0d20cfbd1f04c0ecb05b9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="madlib__keras__fit__multiple__model_8sql__in.html#a9d9b5dfa99c0d20cfbd1f04c0ecb05b9">madlib_keras_fit_multiple_model</a> (varchar source_table, varchar model_output_table, varchar model_selection_table, integer num_iterations, boolean use_gpus, varchar validation_table, integer metrics_compute_frequency)</td></tr>
+<tr class="separator:a9d9b5dfa99c0d20cfbd1f04c0ecb05b9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a422a56ee0e279690699651f01124b131"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="madlib__keras__fit__multiple__model_8sql__in.html#a422a56ee0e279690699651f01124b131">madlib_keras_fit_multiple_model</a> (varchar source_table, varchar model_output_table, varchar model_selection_table, integer num_iterations, boolean use_gpus, varchar validation_table)</td></tr>
+<tr class="separator:a422a56ee0e279690699651f01124b131"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adde872404cf7683bd78d64399f65013b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="madlib__keras__fit__multiple__model_8sql__in.html#adde872404cf7683bd78d64399f65013b">madlib_keras_fit_multiple_model</a> (varchar source_table, varchar model_output_table, varchar model_selection_table, integer num_iterations, boolean use_gpus)</td></tr>
+<tr class="separator:adde872404cf7683bd78d64399f65013b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac2b3f256c5cefe8e2760d93a586fcd95"><td class="memItemLeft" align="right" valign="top">bytea&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="madlib__keras__fit__multiple__model_8sql__in.html#ac2b3f256c5cefe8e2760d93a586fcd95">fit_transition_multiple_model</a> (bytea state, bytea dependent_var, bytea independent_var, integer[] dependent_var_shape, integer[] independent_var_shape, text model_architecture, text compile_params, text fit_params, integer dist_key, integer[] dist_key_mapping, integer current_seg_id, integer segments_per_host, integer[] images_per_seg, boolean use_gpus, integer[] accessible_gpus_for_seg, bytea prev_serialized_weights, boolean is_final_iteration)</td></tr>
+<tr class="separator:ac2b3f256c5cefe8e2760d93a586fcd95"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a99721919cc2d29c4caf92a73c2c00790"><td class="memItemLeft" align="right" valign="top">aggregate bytea&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="madlib__keras__fit__multiple__model_8sql__in.html#a99721919cc2d29c4caf92a73c2c00790">fit_step_multiple_model</a> (bytea, bytea, integer[], integer[], text, text, text, integer, integer[], integer, integer, integer[], boolean, integer[], bytea, boolean)</td></tr>
+<tr class="separator:a99721919cc2d29c4caf92a73c2c00790"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a99721919cc2d29c4caf92a73c2c00790"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a99721919cc2d29c4caf92a73c2c00790">&#9670;&nbsp;</a></span>fit_step_multiple_model()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate bytea fit_step_multiple_model </td>
+          <td>(</td>
+          <td class="paramtype">bytea&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac2b3f256c5cefe8e2760d93a586fcd95"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac2b3f256c5cefe8e2760d93a586fcd95">&#9670;&nbsp;</a></span>fit_transition_multiple_model()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea fit_transition_multiple_model </td>
+          <td>(</td>
+          <td class="paramtype">bytea&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea&#160;</td>
+          <td class="paramname"><em>dependent_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea&#160;</td>
+          <td class="paramname"><em>independent_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>dependent_var_shape</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>independent_var_shape</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>model_architecture</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>compile_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>fit_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>dist_key</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>dist_key_mapping</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>current_seg_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>segments_per_host</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>images_per_seg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>use_gpus</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>accessible_gpus_for_seg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea&#160;</td>
+          <td class="paramname"><em>prev_serialized_weights</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>is_final_iteration</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab62d8e8a4e8d221b7baa4da6a214c286"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab62d8e8a4e8d221b7baa4da6a214c286">&#9670;&nbsp;</a></span>madlib_keras_fit_multiple_model() <span class="overload">[1/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void madlib_keras_fit_multiple_model </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model_output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model_selection_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_iterations</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>use_gpus</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>validation_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>metrics_compute_frequency</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>warm_start</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>description</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a3c71501e03430c229df4c47e2ad5c318"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3c71501e03430c229df4c47e2ad5c318">&#9670;&nbsp;</a></span>madlib_keras_fit_multiple_model() <span class="overload">[2/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void madlib_keras_fit_multiple_model </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model_output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model_selection_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_iterations</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>use_gpus</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>validation_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>metrics_compute_frequency</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>warm_start</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>name</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5d9f7b628c0caead39bc511ed04e470b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5d9f7b628c0caead39bc511ed04e470b">&#9670;&nbsp;</a></span>madlib_keras_fit_multiple_model() <span class="overload">[3/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void madlib_keras_fit_multiple_model </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model_output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model_selection_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_iterations</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>use_gpus</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>validation_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>metrics_compute_frequency</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>warm_start</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a9d9b5dfa99c0d20cfbd1f04c0ecb05b9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9d9b5dfa99c0d20cfbd1f04c0ecb05b9">&#9670;&nbsp;</a></span>madlib_keras_fit_multiple_model() <span class="overload">[4/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void madlib_keras_fit_multiple_model </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model_output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model_selection_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_iterations</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>use_gpus</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>validation_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>metrics_compute_frequency</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a422a56ee0e279690699651f01124b131"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a422a56ee0e279690699651f01124b131">&#9670;&nbsp;</a></span>madlib_keras_fit_multiple_model() <span class="overload">[5/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void madlib_keras_fit_multiple_model </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model_output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model_selection_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_iterations</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>use_gpus</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>validation_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="adde872404cf7683bd78d64399f65013b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adde872404cf7683bd78d64399f65013b">&#9670;&nbsp;</a></span>madlib_keras_fit_multiple_model() <span class="overload">[6/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void madlib_keras_fit_multiple_model </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model_output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model_selection_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_iterations</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>use_gpus</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_7592ceb856cf018f9811e11407c61fda.html">deep_learning</a></li><li class="navelem"><a class="el" href="madlib__keras__fit__multiple__model_8sql__in.html">madlib_keras_fit_multiple_model.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:57 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/madlib__keras__gpu__info_8sql__in.html b/docs/rc/madlib__keras__gpu__info_8sql__in.html
new file mode 100644
index 0000000..ea4cf76
--- /dev/null
+++ b/docs/rc/madlib__keras__gpu__info_8sql__in.html
@@ -0,0 +1,251 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: madlib_keras_gpu_info.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('madlib__keras__gpu__info_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">madlib_keras_gpu_info.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>SQL functions for GPU configuration.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a7b7f9bc2d5da543f271d55372d4f6aa8"><td class="memItemLeft" align="right" valign="top">text []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="madlib__keras__gpu__info_8sql__in.html#a7b7f9bc2d5da543f271d55372d4f6aa8">gpu_info_tensorflow</a> ()</td></tr>
+<tr class="separator:a7b7f9bc2d5da543f271d55372d4f6aa8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0e7a037e393213b2cad2c0ea8f620454"><td class="memItemLeft" align="right" valign="top">text []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="madlib__keras__gpu__info_8sql__in.html#a0e7a037e393213b2cad2c0ea8f620454">gpu_info_nvidia</a> ()</td></tr>
+<tr class="separator:a0e7a037e393213b2cad2c0ea8f620454"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6137bdc8ae8450e34402b2284e433163"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="madlib__keras__gpu__info_8sql__in.html#a6137bdc8ae8450e34402b2284e433163">gpu_configuration</a> (text output_table, text source)</td></tr>
+<tr class="separator:a6137bdc8ae8450e34402b2284e433163"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a496956346dde3d405321002d57029032"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="madlib__keras__gpu__info_8sql__in.html#a496956346dde3d405321002d57029032">gpu_configuration</a> (text output_table)</td></tr>
+<tr class="separator:a496956346dde3d405321002d57029032"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8d7384850308ee00dcd099d78a6b0ce0"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="madlib__keras__gpu__info_8sql__in.html#a8d7384850308ee00dcd099d78a6b0ce0">gpu_configuration</a> ()</td></tr>
+<tr class="separator:a8d7384850308ee00dcd099d78a6b0ce0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>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</p>
+<p><a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a></p>
+<p>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.</p>
+<dl class="section date"><dt>Date</dt><dd>Nov 2019 </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="a6137bdc8ae8450e34402b2284e433163"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6137bdc8ae8450e34402b2284e433163">&#9670;&nbsp;</a></span>gpu_configuration() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void gpu_configuration </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a496956346dde3d405321002d57029032"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a496956346dde3d405321002d57029032">&#9670;&nbsp;</a></span>gpu_configuration() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void gpu_configuration </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8d7384850308ee00dcd099d78a6b0ce0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8d7384850308ee00dcd099d78a6b0ce0">&#9670;&nbsp;</a></span>gpu_configuration() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar gpu_configuration </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a0e7a037e393213b2cad2c0ea8f620454"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0e7a037e393213b2cad2c0ea8f620454">&#9670;&nbsp;</a></span>gpu_info_nvidia()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text [] gpu_info_nvidia </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7b7f9bc2d5da543f271d55372d4f6aa8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7b7f9bc2d5da543f271d55372d4f6aa8">&#9670;&nbsp;</a></span>gpu_info_tensorflow()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text [] gpu_info_tensorflow </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_7592ceb856cf018f9811e11407c61fda.html">deep_learning</a></li><li class="navelem"><a class="el" href="madlib__keras__gpu__info_8sql__in.html">madlib_keras_gpu_info.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:57 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/madlib__keras__model__selection_8sql__in.html b/docs/rc/madlib__keras__model__selection_8sql__in.html
new file mode 100644
index 0000000..ec2d26f
--- /dev/null
+++ b/docs/rc/madlib__keras__model__selection_8sql__in.html
@@ -0,0 +1,192 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: madlib_keras_model_selection.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('madlib__keras__model__selection_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">madlib_keras_model_selection.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>SQL functions for model hopper distributed training.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a34e35b3e0adcac558b422d9483421065"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="madlib__keras__model__selection_8sql__in.html#a34e35b3e0adcac558b422d9483421065">load_model_selection_table</a> (varchar model_arch_table, varchar model_selection_table, integer[] model_id_list, varchar[] compile_params_list, varchar[] fit_params_list)</td></tr>
+<tr class="separator:a34e35b3e0adcac558b422d9483421065"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>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</p>
+<p><a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a></p>
+<p>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.</p>
+<dl class="section date"><dt>Date</dt><dd>August 2019 </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="a34e35b3e0adcac558b422d9483421065"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a34e35b3e0adcac558b422d9483421065">&#9670;&nbsp;</a></span>load_model_selection_table()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void load_model_selection_table </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model_arch_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model_selection_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>model_id_list</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar []&#160;</td>
+          <td class="paramname"><em>compile_params_list</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar []&#160;</td>
+          <td class="paramname"><em>fit_params_list</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_7592ceb856cf018f9811e11407c61fda.html">deep_learning</a></li><li class="navelem"><a class="el" href="madlib__keras__model__selection_8sql__in.html">madlib_keras_model_selection.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:57 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/madlib_extra.css b/docs/rc/madlib_extra.css
new file mode 100644
index 0000000..bbc884d
--- /dev/null
+++ b/docs/rc/madlib_extra.css
@@ -0,0 +1,156 @@
+/* MADlib CSS customizations */
+
+/* Indent paragraphs in the main text, but not in framed boxes */
+div.contents > p, div.contents > pre, div.contents > ul, div.contents > div.fragment, dd {
+    margin-left: 20px;
+}
+
+/* Increase spacing between titled paragraphs in the main text, but not in
+   framed boxes */
+div.contents > dl {
+    margin-top: 2em;
+}
+
+/* Increase spacing between list items in the main text */
+div.contents li {
+    margin-top: 1em;
+}
+
+/* No automtic line wrapping at white spaces in <pre> or \verbatim
+   environments. */
+pre.fragment {
+    word-wrap: normal;
+}
+
+/* Distinguish backgrounds for syntax, example commands, and results */
+pre.syntax {
+        border: 1px solid #999999;
+        color: #00004D;
+        background-color: #CBD4E7;
+        padding: 4px 6px;
+        margin: 4px 8px 4px 2px;
+        overflow: auto;
+        word-wrap: normal;
+        font-size:  9pt;
+        line-height: 125%;
+        font-family: monospace, fixed;
+        font-size: 105%;
+}
+
+pre.example {
+        border: 1px solid #999999;
+        background-color: #E8E8E8;
+        padding: 4px 6px;
+        margin: 4px 8px 4px 2px;
+        overflow: auto;
+        word-wrap: normal;
+        font-size:  9pt;
+        line-height: 125%;
+        font-family: monospace, fixed;
+        font-size: 105%;
+}
+
+pre.result {
+        border: 1px solid #999999;
+        background-color: #FFFFCC;
+        padding: 4px 6px;
+        margin: 4px 8px 4px 2px;
+        overflow: auto;
+        word-wrap: normal;
+        font-size:  9pt;
+        line-height: 125%;
+        font-family: monospace, fixed;
+        font-size: 105%;
+}
+
+
+/* No padding for paragraph headers (in its infinite wisdom, doxygen uses <dl>
+   environments for that) */
+dl {
+    padding-left: 0;
+    margin-top: 1em;
+}
+
+/* Increase the font size for paragraph headers */
+dt {
+    font-size: 120%;
+    margin-bottom: 1em;
+}
+
+/* The first column should align with normal text. So we cannot use
+   border-spacing. */
+table.params {
+    border-spacing: 0;
+}
+
+/* Add some padding instead of border-spacing */
+td.paramname {
+    padding: 1px 1em 1px 0;
+}
+
+/* We move the bar a out of the text frame, so that the text aligns well with
+   the rest. Note: margin-left + border-width-left + padding-left = 0 */
+/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug
+{
+    margin-left: -6px;
+    padding-left: 2px;
+}
+*/
+
+/* Style parameter lists formatted with definition lists. */
+dl.arglist {
+  margin-left: 40px;
+  margin-top: 0px;
+}
+
+dl.arglist dt {
+  font-size: 100%;
+  font-weight: bold;
+  color: #00004D;
+  margin-bottom: 0px;
+}
+
+div.toc {
+    background-color: #FFF5B8;
+}
+
+/* Increase font size for toc.li from 10px to 14px */
+div.toc li {
+        font: 14px/1.4 Verdana,DejaVu Sans,Geneva,sans-serif;
+        margin-top: 5px;
+        padding-left: 10px;
+        padding-top: 2px;
+}
+
+
+div.versionlist li.head {
+  font: 12px/1.2 Verdana, DejaVu Sans, Geneva, sans-serif;
+  display: inline;
+  margin-right: 10px;
+}
+
+div.versionlist ul {
+  display: inline;
+  align: right;
+}
+
+div.versionlist li {
+  font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif;
+  display: inline;
+  margin-right: 10px;
+}
+
+/* Table style for output table columns and descriptions */
+table.output {
+  border: 0;
+  margin-left: 20px;
+}
+
+.output th {
+  text-align: right;
+  vertical-align: top;
+  padding-right: 15px;
+  font-weight: normal;
+  color: #354C7B;
+ }
+
diff --git a/docs/rc/mainpage_8dox.html b/docs/rc/mainpage_8dox.html
new file mode 100644
index 0000000..8d1cd14
--- /dev/null
+++ b/docs/rc/mainpage_8dox.html
@@ -0,0 +1,129 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: mainpage.dox File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('mainpage_8dox.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">mainpage.dox File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="mainpage_8dox.html">mainpage.dox</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:57 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/marginal_8sql__in.html b/docs/rc/marginal_8sql__in.html
new file mode 100644
index 0000000..a336806
--- /dev/null
+++ b/docs/rc/marginal_8sql__in.html
@@ -0,0 +1,2712 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: marginal.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('marginal_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">marginal.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>SQL functions for linear regression.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a2115a795562bc2928c3858fc55104c4b"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#a2115a795562bc2928c3858fc55104c4b">marginal_logregr_step_transition</a> (float8[] state, boolean y, float8[] x, float8[] coef)</td></tr>
+<tr class="separator:a2115a795562bc2928c3858fc55104c4b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae44a992f8bd650b5c1f0c2ffae7bb542"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#ae44a992f8bd650b5c1f0c2ffae7bb542">marginal_logregr_step_merge_states</a> (float8[] state1, float8[] state2)</td></tr>
+<tr class="separator:ae44a992f8bd650b5c1f0c2ffae7bb542"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac4e06a28a76651de70768457575bb9e0"><td class="memItemLeft" align="right" valign="top">marginal_logregr_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#ac4e06a28a76651de70768457575bb9e0">marginal_logregr_step_final</a> (float8[] state)</td></tr>
+<tr class="separator:ac4e06a28a76651de70768457575bb9e0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3286b644d2d51a8f2874896dc1b5d925"><td class="memItemLeft" align="right" valign="top">aggregate marginal_logregr_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#a3286b644d2d51a8f2874896dc1b5d925">marginal_logregr</a> (boolean dependentVariable, float8[] independentVariables, float8[] coef)</td></tr>
+<tr class="memdesc:a3286b644d2d51a8f2874896dc1b5d925"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute marginal effects for logistic regression.  <a href="#a3286b644d2d51a8f2874896dc1b5d925">More...</a><br /></td></tr>
+<tr class="separator:a3286b644d2d51a8f2874896dc1b5d925"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9517d679ee4209126895445cbed51fe3"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#a9517d679ee4209126895445cbed51fe3">margins_logregr</a> (varchar message)</td></tr>
+<tr class="separator:a9517d679ee4209126895445cbed51fe3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a63aba4148ce9bfcafea81d08e3797a1f"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#a63aba4148ce9bfcafea81d08e3797a1f">margins_logregr</a> ()</td></tr>
+<tr class="separator:a63aba4148ce9bfcafea81d08e3797a1f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a99dd17e30e4fcc2f39da4e671406bcea"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#a99dd17e30e4fcc2f39da4e671406bcea">margins_logregr</a> (varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, varchar grouping_cols, integer[] marginal_vars, integer max_iter, varchar optimizer, float8 tolerance, boolean verbose_mode)</td></tr>
+<tr class="memdesc:a99dd17e30e4fcc2f39da4e671406bcea"><td class="mdescLeft">&#160;</td><td class="mdescRight">A wrapper function for the various marginal regression analyzes.  <a href="#a99dd17e30e4fcc2f39da4e671406bcea">More...</a><br /></td></tr>
+<tr class="separator:a99dd17e30e4fcc2f39da4e671406bcea"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4e0b284b130524ff36b44281fa9e3fb9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#a4e0b284b130524ff36b44281fa9e3fb9">margins_logregr</a> (varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable)</td></tr>
+<tr class="memdesc:a4e0b284b130524ff36b44281fa9e3fb9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Marginal effects with default variables.  <a href="#a4e0b284b130524ff36b44281fa9e3fb9">More...</a><br /></td></tr>
+<tr class="separator:a4e0b284b130524ff36b44281fa9e3fb9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af520629d3624d30cdcdbce247d89ac7d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#af520629d3624d30cdcdbce247d89ac7d">margins_logregr</a> (varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable, varchar grouping_cols)</td></tr>
+<tr class="memdesc:af520629d3624d30cdcdbce247d89ac7d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Marginal effects with default variable_names.  <a href="#af520629d3624d30cdcdbce247d89ac7d">More...</a><br /></td></tr>
+<tr class="separator:af520629d3624d30cdcdbce247d89ac7d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae84af4141c1730d7299210ad5005ffe6"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#ae84af4141c1730d7299210ad5005ffe6">margins_logregr</a> (varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable, varchar grouping_cols, integer[] marginal_vars)</td></tr>
+<tr class="memdesc:ae84af4141c1730d7299210ad5005ffe6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Marginal effects with default variable_names.  <a href="#ae84af4141c1730d7299210ad5005ffe6">More...</a><br /></td></tr>
+<tr class="separator:ae84af4141c1730d7299210ad5005ffe6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7ad0356ba6d3edec11d4ee6904ff8588"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#a7ad0356ba6d3edec11d4ee6904ff8588">margins_logregr</a> (varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable, varchar grouping_cols, integer[] marginal_vars, integer max_iter)</td></tr>
+<tr class="memdesc:a7ad0356ba6d3edec11d4ee6904ff8588"><td class="mdescLeft">&#160;</td><td class="mdescRight">Marginal effects with default variable_names.  <a href="#a7ad0356ba6d3edec11d4ee6904ff8588">More...</a><br /></td></tr>
+<tr class="separator:a7ad0356ba6d3edec11d4ee6904ff8588"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9a9ff25e0ce2220f14e6514a84e71d8a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#a9a9ff25e0ce2220f14e6514a84e71d8a">margins_logregr</a> (varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable, varchar grouping_cols, integer[] marginal_vars, integer max_iter, varchar optimizer)</td></tr>
+<tr class="memdesc:a9a9ff25e0ce2220f14e6514a84e71d8a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Marginal effects with default variable_names.  <a href="#a9a9ff25e0ce2220f14e6514a84e71d8a">More...</a><br /></td></tr>
+<tr class="separator:a9a9ff25e0ce2220f14e6514a84e71d8a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2018fd008c71953a32057d34de54acfc"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#a2018fd008c71953a32057d34de54acfc">margins_logregr</a> (varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable, varchar grouping_cols, integer[] marginal_vars, integer max_iter, varchar optimizer, float8 tolerance)</td></tr>
+<tr class="memdesc:a2018fd008c71953a32057d34de54acfc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Marginal effects with default variable_names.  <a href="#a2018fd008c71953a32057d34de54acfc">More...</a><br /></td></tr>
+<tr class="separator:a2018fd008c71953a32057d34de54acfc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7b8a7cf298ea51fc16de975e2503615a"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#a7b8a7cf298ea51fc16de975e2503615a">mlogregr_marginal_step_transition</a> (float8[] state, integer y, integer num_categories, integer ref_category, float8[] x, float8[] coef)</td></tr>
+<tr class="separator:a7b8a7cf298ea51fc16de975e2503615a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a82ac74fd7aec70b7596bc2b4776742fa"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#a82ac74fd7aec70b7596bc2b4776742fa">mlogregr_marginal_step_merge_states</a> (float8[] state1, float8[] state2)</td></tr>
+<tr class="separator:a82ac74fd7aec70b7596bc2b4776742fa"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad80d7df29226a2529f9f80607f2a983e"><td class="memItemLeft" align="right" valign="top">marginal_mlogregr_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#ad80d7df29226a2529f9f80607f2a983e">mlogregr_marginal_step_final</a> (float8[] state)</td></tr>
+<tr class="separator:ad80d7df29226a2529f9f80607f2a983e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaf0b3cc34b99d4b47334bdde2d139b81"><td class="memItemLeft" align="right" valign="top">aggregate marginal_mlogregr_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#aaf0b3cc34b99d4b47334bdde2d139b81">marginal_mlogregr</a> (integer dependentVariable, integer num_categories, integer ref_category, float8[] independentVariables, float8[] coef)</td></tr>
+<tr class="memdesc:aaf0b3cc34b99d4b47334bdde2d139b81"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute marginal effects for multinomial logistic regression.  <a href="#aaf0b3cc34b99d4b47334bdde2d139b81">More...</a><br /></td></tr>
+<tr class="separator:aaf0b3cc34b99d4b47334bdde2d139b81"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae39ad0e1beca060fd153dba35901a4e7"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#ae39ad0e1beca060fd153dba35901a4e7">margins_mlogregr</a> (varchar message)</td></tr>
+<tr class="separator:ae39ad0e1beca060fd153dba35901a4e7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1e152bdb5c5ac347b5621350a396a33f"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#a1e152bdb5c5ac347b5621350a396a33f">margins_mlogregr</a> ()</td></tr>
+<tr class="separator:a1e152bdb5c5ac347b5621350a396a33f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aedeea68ce9db3c1ad1ce90219bb02fa0"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#aedeea68ce9db3c1ad1ce90219bb02fa0">margins_mlogregr</a> (varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, integer ref_category, varchar grouping_cols, integer[] marginal_vars, varchar optimizer_params, boolean verbose_mode)</td></tr>
+<tr class="memdesc:aedeea68ce9db3c1ad1ce90219bb02fa0"><td class="mdescLeft">&#160;</td><td class="mdescRight">A wrapper function for the various marginal multinomial regression.  <a href="#aedeea68ce9db3c1ad1ce90219bb02fa0">More...</a><br /></td></tr>
+<tr class="separator:aedeea68ce9db3c1ad1ce90219bb02fa0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2837cc6b3ea201682db76102cace3d0e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#a2837cc6b3ea201682db76102cace3d0e">margins_mlogregr</a> (varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, integer ref_category, varchar grouping_cols, integer[] marginal_vars, varchar optimizer_params)</td></tr>
+<tr class="memdesc:a2837cc6b3ea201682db76102cace3d0e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Marginal effects with default variable_names.  <a href="#a2837cc6b3ea201682db76102cace3d0e">More...</a><br /></td></tr>
+<tr class="separator:a2837cc6b3ea201682db76102cace3d0e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a79e7c2ad06348e95afea81d4b6c6c9f7"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#a79e7c2ad06348e95afea81d4b6c6c9f7">margins_mlogregr</a> (varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, integer ref_category, varchar grouping_cols, integer[] marginal_vars, integer max_iter, varchar optimizer, float8 tolerance, boolean verbose_mode)</td></tr>
+<tr class="separator:a79e7c2ad06348e95afea81d4b6c6c9f7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0827f2605803847a34e26f31b24529ca"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#a0827f2605803847a34e26f31b24529ca">margins_mlogregr</a> (varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable, integer ref_category, varchar grouping_cols, integer[] marginal_vars, integer max_iter)</td></tr>
+<tr class="memdesc:a0827f2605803847a34e26f31b24529ca"><td class="mdescLeft">&#160;</td><td class="mdescRight">Marginal effects with default variable_names.  <a href="#a0827f2605803847a34e26f31b24529ca">More...</a><br /></td></tr>
+<tr class="separator:a0827f2605803847a34e26f31b24529ca"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a80368510f0bcf8633b017b82c9744ce7"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#a80368510f0bcf8633b017b82c9744ce7">margins_mlogregr</a> (varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable, integer ref_category, varchar grouping_cols, integer[] marginal_vars, integer max_iter, varchar optimizer)</td></tr>
+<tr class="memdesc:a80368510f0bcf8633b017b82c9744ce7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Marginal effects with default variable_names.  <a href="#a80368510f0bcf8633b017b82c9744ce7">More...</a><br /></td></tr>
+<tr class="separator:a80368510f0bcf8633b017b82c9744ce7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afaa380d3b7ce111d6a81b5b0fa7483f3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#afaa380d3b7ce111d6a81b5b0fa7483f3">margins_mlogregr</a> (varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable, integer ref_category, varchar grouping_cols, integer[] marginal_vars, integer max_iter, varchar optimizer, float8 tolerance)</td></tr>
+<tr class="memdesc:afaa380d3b7ce111d6a81b5b0fa7483f3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Marginal effects with default variable_names.  <a href="#afaa380d3b7ce111d6a81b5b0fa7483f3">More...</a><br /></td></tr>
+<tr class="separator:afaa380d3b7ce111d6a81b5b0fa7483f3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a90bd35d3bb7a3f94feeeb08f9ead8a55"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#a90bd35d3bb7a3f94feeeb08f9ead8a55">margins_mlogregr</a> (varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable)</td></tr>
+<tr class="memdesc:a90bd35d3bb7a3f94feeeb08f9ead8a55"><td class="mdescLeft">&#160;</td><td class="mdescRight">Marginal effects with default variables.  <a href="#a90bd35d3bb7a3f94feeeb08f9ead8a55">More...</a><br /></td></tr>
+<tr class="separator:a90bd35d3bb7a3f94feeeb08f9ead8a55"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af0ef176b7f0d0c518d3a16182ac6117d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#af0ef176b7f0d0c518d3a16182ac6117d">margins_mlogregr</a> (varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable, integer ref_category)</td></tr>
+<tr class="memdesc:af0ef176b7f0d0c518d3a16182ac6117d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Marginal effects with default variables.  <a href="#af0ef176b7f0d0c518d3a16182ac6117d">More...</a><br /></td></tr>
+<tr class="separator:af0ef176b7f0d0c518d3a16182ac6117d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7e66918e0fcd02f8492347604474a29a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#a7e66918e0fcd02f8492347604474a29a">margins_mlogregr</a> (varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable, integer ref_category, varchar grouping_cols)</td></tr>
+<tr class="memdesc:a7e66918e0fcd02f8492347604474a29a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Marginal effects with default variable_names.  <a href="#a7e66918e0fcd02f8492347604474a29a">More...</a><br /></td></tr>
+<tr class="separator:a7e66918e0fcd02f8492347604474a29a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8311df1f591cff8d30ca8df816c0cfca"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#a8311df1f591cff8d30ca8df816c0cfca">margins_mlogregr</a> (varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable, integer ref_category, varchar grouping_cols, integer[] marginal_vars)</td></tr>
+<tr class="memdesc:a8311df1f591cff8d30ca8df816c0cfca"><td class="mdescLeft">&#160;</td><td class="mdescRight">Marginal effects with default variable_names.  <a href="#a8311df1f591cff8d30ca8df816c0cfca">More...</a><br /></td></tr>
+<tr class="separator:a8311df1f591cff8d30ca8df816c0cfca"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa4edc871f05eb57354a82a16f85e0ee7"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#aa4edc871f05eb57354a82a16f85e0ee7">__sub_array</a> (float8[] value_array, integer[] index_array)</td></tr>
+<tr class="separator:aa4edc871f05eb57354a82a16f85e0ee7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6f238f587436d904d2206e7edb795bb1"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#a6f238f587436d904d2206e7edb795bb1">__margins_linregr_int_transition</a> (float8[] state, float8[] x, float8[] coef, float8[] vcov, float8[] derivative)</td></tr>
+<tr class="separator:a6f238f587436d904d2206e7edb795bb1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0db48e48baea1ab56841e5b57083d939"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#a0db48e48baea1ab56841e5b57083d939">__margins_linregr_int_merge</a> (float8[] state1, float8[] state2)</td></tr>
+<tr class="separator:a0db48e48baea1ab56841e5b57083d939"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a946260ec369f98b5b8d584d3e63fcf80"><td class="memItemLeft" align="right" valign="top">margins_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#a946260ec369f98b5b8d584d3e63fcf80">__margins_linregr_int_final</a> (float8[] state)</td></tr>
+<tr class="separator:a946260ec369f98b5b8d584d3e63fcf80"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a228e94d07a25adef545e7f1948648b68"><td class="memItemLeft" align="right" valign="top">aggregate margins_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#a228e94d07a25adef545e7f1948648b68">__margins_int_linregr_agg</a> (float8[] independentVariables, float8[] coef, float8[] vcov, float8[] derivative_matrix)</td></tr>
+<tr class="memdesc:a228e94d07a25adef545e7f1948648b68"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute marginal effects for linear regression.  <a href="#a228e94d07a25adef545e7f1948648b68">More...</a><br /></td></tr>
+<tr class="separator:a228e94d07a25adef545e7f1948648b68"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5aaf126f78c5eb0f4c7eaae3ebb53f13"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#a5aaf126f78c5eb0f4c7eaae3ebb53f13">__margins_logregr_int_transition</a> (float8[] state, float8[] x, float8[] coef, float8[] vcov, float8[] basis_indices, float8[] derivative, float8[] categorical_indices, float8[] x_set, float8[] x_unset)</td></tr>
+<tr class="separator:a5aaf126f78c5eb0f4c7eaae3ebb53f13"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7899421c84eaf701949c7e430dc3eb15"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#a7899421c84eaf701949c7e430dc3eb15">__margins_logregr_int_merge</a> (float8[] state1, float8[] state2)</td></tr>
+<tr class="separator:a7899421c84eaf701949c7e430dc3eb15"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7ffb6d8dd35dce6deef315458a4f85cd"><td class="memItemLeft" align="right" valign="top">margins_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#a7ffb6d8dd35dce6deef315458a4f85cd">__margins_logregr_int_final</a> (float8[] state)</td></tr>
+<tr class="separator:a7ffb6d8dd35dce6deef315458a4f85cd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa419eeb4ee78982d5ce8e3fe102f28c3"><td class="memItemLeft" align="right" valign="top">aggregate margins_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#aa419eeb4ee78982d5ce8e3fe102f28c3">__margins_int_logregr_agg</a> (float8[] independentVariables, float8[] coef, float8[] vcov, float8[] basis_indices, float8[] derivative_matrix, float8[] categorical_indices, float8[] x_set, float8[] x_unset)</td></tr>
+<tr class="memdesc:aa419eeb4ee78982d5ce8e3fe102f28c3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute marginal effects for logistic regression.  <a href="#aa419eeb4ee78982d5ce8e3fe102f28c3">More...</a><br /></td></tr>
+<tr class="separator:aa419eeb4ee78982d5ce8e3fe102f28c3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ade4ae58316e82c1de75f65f383043532"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#ade4ae58316e82c1de75f65f383043532">__margins_mlogregr_int_transition</a> (float8[] state, float8[] x, float8[] coef, float8[] vcov, float8[] basis_indices, float8[] derivative_matrix, float8[] categorical_indices, float8[] x_set, float8[] x_unset)</td></tr>
+<tr class="separator:ade4ae58316e82c1de75f65f383043532"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8c1e7d827ee07f3f6532cdd12a4e1d29"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#a8c1e7d827ee07f3f6532cdd12a4e1d29">__margins_mlogregr_int_merge</a> (float8[] state1, float8[] state2)</td></tr>
+<tr class="separator:a8c1e7d827ee07f3f6532cdd12a4e1d29"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a64e8f06dc5425379065f12eacb95ad05"><td class="memItemLeft" align="right" valign="top">margins_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#a64e8f06dc5425379065f12eacb95ad05">__margins_mlogregr_int_final</a> (float8[] state)</td></tr>
+<tr class="separator:a64e8f06dc5425379065f12eacb95ad05"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a56aec1f2d980a739df09e09ca52b34f4"><td class="memItemLeft" align="right" valign="top">aggregate margins_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#a56aec1f2d980a739df09e09ca52b34f4">__margins_int_mlogregr_agg</a> (float8[] independentVariables, float8[] coef, float8[] vcov, float8[] basis_indices, float8[] derivative_matrix, float8[] categorical_indices, float8[] x_set, float8[] x_unset)</td></tr>
+<tr class="memdesc:a56aec1f2d980a739df09e09ca52b34f4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute marginal effects for multinomial logistic regression.  <a href="#a56aec1f2d980a739df09e09ca52b34f4">More...</a><br /></td></tr>
+<tr class="separator:a56aec1f2d980a739df09e09ca52b34f4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af82b77209159da1b8bc75b39cc8abd98"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#af82b77209159da1b8bc75b39cc8abd98">__margins_coxph_int_transition</a> (float8[] state, float8[] x, float8[] coef, float8[] vcov, float8[] basis_indices, float8[] derivative_matrix, float8[] categorical_indices, float8[] x_set, float8[] x_unset)</td></tr>
+<tr class="separator:af82b77209159da1b8bc75b39cc8abd98"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a153bcc3884fa16399fa608442259d32d"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#a153bcc3884fa16399fa608442259d32d">__margins_coxph_int_merge</a> (float8[] state1, float8[] state2)</td></tr>
+<tr class="separator:a153bcc3884fa16399fa608442259d32d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3d8c5567fd111b9d10b49d61006f35bf"><td class="memItemLeft" align="right" valign="top">margins_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#a3d8c5567fd111b9d10b49d61006f35bf">__margins_coxph_int_final</a> (float8[] state)</td></tr>
+<tr class="separator:a3d8c5567fd111b9d10b49d61006f35bf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5f270ce35e107912d5ea4e9efd075318"><td class="memItemLeft" align="right" valign="top">margins_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#a5f270ce35e107912d5ea4e9efd075318">__margins_compute_stats</a> (float8[] marginal_effects, float8[] std_err)</td></tr>
+<tr class="separator:a5f270ce35e107912d5ea4e9efd075318"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa44a5bf9ba69ba5e87ebf1f5f4a297db"><td class="memItemLeft" align="right" valign="top">aggregate margins_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#aa44a5bf9ba69ba5e87ebf1f5f4a297db">__margins_int_coxph_agg</a> (float8[] independentVariables, float8[] coef, float8[] vcov, float8[] basis_indices, float8[] derivative_matrix, float8[] categorical_indices, float8[] x_set, float8[] x_unset)</td></tr>
+<tr class="memdesc:aa44a5bf9ba69ba5e87ebf1f5f4a297db"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute marginal effects for multinomial logistic regression.  <a href="#aa44a5bf9ba69ba5e87ebf1f5f4a297db">More...</a><br /></td></tr>
+<tr class="separator:aa44a5bf9ba69ba5e87ebf1f5f4a297db"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a36fcae5245ca31517723fce38b183c90"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#a36fcae5245ca31517723fce38b183c90">margins</a> (varchar model_table, varchar out_table, varchar x_design, varchar source_table, varchar marginal_vars)</td></tr>
+<tr class="memdesc:a36fcae5245ca31517723fce38b183c90"><td class="mdescLeft">&#160;</td><td class="mdescRight">Marginal effects with default variable_names.  <a href="#a36fcae5245ca31517723fce38b183c90">More...</a><br /></td></tr>
+<tr class="separator:a36fcae5245ca31517723fce38b183c90"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a632bc9f9bf73c40fe6bf3b1778eee91a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#a632bc9f9bf73c40fe6bf3b1778eee91a">margins</a> (varchar model_table, varchar out_table, varchar x_design, varchar source_table)</td></tr>
+<tr class="separator:a632bc9f9bf73c40fe6bf3b1778eee91a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6d002a5934d6bc614925ffcf67f24a99"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#a6d002a5934d6bc614925ffcf67f24a99">margins</a> (varchar model_table, varchar out_table, varchar x_design)</td></tr>
+<tr class="separator:a6d002a5934d6bc614925ffcf67f24a99"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abd29ce2c3931dfbe5fc7e882114b8c68"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#abd29ce2c3931dfbe5fc7e882114b8c68">margins</a> (varchar model_table, varchar out_table)</td></tr>
+<tr class="separator:abd29ce2c3931dfbe5fc7e882114b8c68"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a14c96eee91746c4693d1775ff3ee8158"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#a14c96eee91746c4693d1775ff3ee8158">margins</a> (varchar message)</td></tr>
+<tr class="separator:a14c96eee91746c4693d1775ff3ee8158"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9c7042e5a4dca342e745c89f72f4a650"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="marginal_8sql__in.html#a9c7042e5a4dca342e745c89f72f4a650">margins</a> ()</td></tr>
+<tr class="separator:a9c7042e5a4dca342e745c89f72f4a650"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><dl class="section date"><dt>Date</dt><dd>January 2011</dd></dl>
+<dl class="section see"><dt>See also</dt><dd>Calculates marginal effects for various regression models. </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="a5f270ce35e107912d5ea4e9efd075318"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5f270ce35e107912d5ea4e9efd075318">&#9670;&nbsp;</a></span>__margins_compute_stats()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">margins_result __margins_compute_stats </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>marginal_effects</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>std_err</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a3d8c5567fd111b9d10b49d61006f35bf"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3d8c5567fd111b9d10b49d61006f35bf">&#9670;&nbsp;</a></span>__margins_coxph_int_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">margins_result __margins_coxph_int_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a153bcc3884fa16399fa608442259d32d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a153bcc3884fa16399fa608442259d32d">&#9670;&nbsp;</a></span>__margins_coxph_int_merge()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __margins_coxph_int_merge </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="af82b77209159da1b8bc75b39cc8abd98"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af82b77209159da1b8bc75b39cc8abd98">&#9670;&nbsp;</a></span>__margins_coxph_int_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __margins_coxph_int_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>coef</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>vcov</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>basis_indices</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>derivative_matrix</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>categorical_indices</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x_set</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x_unset</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa44a5bf9ba69ba5e87ebf1f5f4a297db"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa44a5bf9ba69ba5e87ebf1f5f4a297db">&#9670;&nbsp;</a></span>__margins_int_coxph_agg()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate margins_result __margins_int_coxph_agg </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>independentVariables</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>coef</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>vcov</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>basis_indices</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>derivative_matrix</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>categorical_indices</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x_set</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x_unset</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">dependentVariable</td><td>Column containing the dependent variable </td></tr>
+    <tr><td class="paramname">independentVariables</td><td>Column containing the array of independent variables </td></tr>
+    <tr><td class="paramname">coef</td><td>Column containing the array of the coefficients (as obtained by logregr)</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>A composite value:<ul>
+<li><code>margins FLOAT8[] </code> - Array of marginal effects</li>
+<li><code>std_err FLOAT8[]</code> - Array of standard-errors (calculated by the delta method),</li>
+<li><code>z_stats FLOAT8[]</code> - Array of z-statistics</li>
+<li><code>p_values FLOAT8[]</code> - Array of p-values</li>
+</ul>
+</dd></dl>
+<dl class="section user"><dt>Usage</dt><dd><ul>
+<li>Get all the diagnostic statistics:<br />
+</li>
+</ul>
+</dd></dl>
+
+</div>
+</div>
+<a id="a228e94d07a25adef545e7f1948648b68"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a228e94d07a25adef545e7f1948648b68">&#9670;&nbsp;</a></span>__margins_int_linregr_agg()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate margins_result __margins_int_linregr_agg </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>independentVariables</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>coef</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>vcov</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>derivative_matrix</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">independentVariables</td><td>Column containing the array of independent variables </td></tr>
+    <tr><td class="paramname">coef</td><td>Column containing the array of the coefficients (as obtained by logregr)</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>A composite value:<ul>
+<li><code>margins FLOAT8[] </code> - Array of marginal effects</li>
+<li><code>std_err FLOAT8[]</code> - Array of standard-errors (calculated by the delta method),</li>
+<li><code>z_stats FLOAT8[]</code> - Array of z-statistics</li>
+<li><code>p_values FLOAT8[]</code> - Array of p-values * </li>
+</ul>
+</dd></dl>
+
+</div>
+</div>
+<a id="aa419eeb4ee78982d5ce8e3fe102f28c3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa419eeb4ee78982d5ce8e3fe102f28c3">&#9670;&nbsp;</a></span>__margins_int_logregr_agg()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate margins_result __margins_int_logregr_agg </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>independentVariables</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>coef</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>vcov</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>basis_indices</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>derivative_matrix</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>categorical_indices</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x_set</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x_unset</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">dependentVariable</td><td>Column containing the dependent variable </td></tr>
+    <tr><td class="paramname">independentVariables</td><td>Column containing the array of independent variables </td></tr>
+    <tr><td class="paramname">coef</td><td>Column containing the array of the coefficients (as obtained by logregr)</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>A composite value:<ul>
+<li><code>margins FLOAT8[] </code> - Array of marginal effects</li>
+<li><code>std_err FLOAT8[]</code> - Array of standard-errors (calculated by the delta method),</li>
+<li><code>z_stats FLOAT8[]</code> - Array of z-statistics</li>
+<li><code>p_values FLOAT8[]</code> - Array of p-values</li>
+</ul>
+</dd></dl>
+<dl class="section user"><dt>Usage</dt><dd><ul>
+<li>Get all the diagnostic statistics:<br />
+</li>
+</ul>
+</dd></dl>
+
+</div>
+</div>
+<a id="a56aec1f2d980a739df09e09ca52b34f4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a56aec1f2d980a739df09e09ca52b34f4">&#9670;&nbsp;</a></span>__margins_int_mlogregr_agg()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate margins_result __margins_int_mlogregr_agg </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>independentVariables</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>coef</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>vcov</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>basis_indices</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>derivative_matrix</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>categorical_indices</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x_set</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x_unset</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">dependentVariable</td><td>Column containing the dependent variable </td></tr>
+    <tr><td class="paramname">independentVariables</td><td>Column containing the array of independent variables </td></tr>
+    <tr><td class="paramname">coef</td><td>Column containing the array of the coefficients (as obtained by logregr)</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>A composite value:<ul>
+<li><code>margins FLOAT8[] </code> - Array of marginal effects</li>
+<li><code>std_err FLOAT8[]</code> - Array of standard-errors (calculated by the delta method),</li>
+<li><code>z_stats FLOAT8[]</code> - Array of z-statistics</li>
+<li><code>p_values FLOAT8[]</code> - Array of p-values</li>
+</ul>
+</dd></dl>
+<dl class="section user"><dt>Usage</dt><dd><ul>
+<li>Get all the diagnostic statistics:<br />
+</li>
+</ul>
+</dd></dl>
+
+</div>
+</div>
+<a id="a946260ec369f98b5b8d584d3e63fcf80"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a946260ec369f98b5b8d584d3e63fcf80">&#9670;&nbsp;</a></span>__margins_linregr_int_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">margins_result __margins_linregr_int_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a0db48e48baea1ab56841e5b57083d939"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0db48e48baea1ab56841e5b57083d939">&#9670;&nbsp;</a></span>__margins_linregr_int_merge()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __margins_linregr_int_merge </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a6f238f587436d904d2206e7edb795bb1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6f238f587436d904d2206e7edb795bb1">&#9670;&nbsp;</a></span>__margins_linregr_int_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __margins_linregr_int_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>coef</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>vcov</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>derivative</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7ffb6d8dd35dce6deef315458a4f85cd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7ffb6d8dd35dce6deef315458a4f85cd">&#9670;&nbsp;</a></span>__margins_logregr_int_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">margins_result __margins_logregr_int_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7899421c84eaf701949c7e430dc3eb15"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7899421c84eaf701949c7e430dc3eb15">&#9670;&nbsp;</a></span>__margins_logregr_int_merge()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __margins_logregr_int_merge </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5aaf126f78c5eb0f4c7eaae3ebb53f13"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5aaf126f78c5eb0f4c7eaae3ebb53f13">&#9670;&nbsp;</a></span>__margins_logregr_int_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __margins_logregr_int_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>coef</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>vcov</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>basis_indices</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>derivative</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>categorical_indices</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x_set</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x_unset</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a64e8f06dc5425379065f12eacb95ad05"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a64e8f06dc5425379065f12eacb95ad05">&#9670;&nbsp;</a></span>__margins_mlogregr_int_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">margins_result __margins_mlogregr_int_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8c1e7d827ee07f3f6532cdd12a4e1d29"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8c1e7d827ee07f3f6532cdd12a4e1d29">&#9670;&nbsp;</a></span>__margins_mlogregr_int_merge()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __margins_mlogregr_int_merge </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ade4ae58316e82c1de75f65f383043532"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ade4ae58316e82c1de75f65f383043532">&#9670;&nbsp;</a></span>__margins_mlogregr_int_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __margins_mlogregr_int_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>coef</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>vcov</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>basis_indices</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>derivative_matrix</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>categorical_indices</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x_set</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x_unset</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa4edc871f05eb57354a82a16f85e0ee7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa4edc871f05eb57354a82a16f85e0ee7">&#9670;&nbsp;</a></span>__sub_array()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __sub_array </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>value_array</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>index_array</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a3286b644d2d51a8f2874896dc1b5d925"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3286b644d2d51a8f2874896dc1b5d925">&#9670;&nbsp;</a></span>marginal_logregr()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate marginal_logregr_result marginal_logregr </td>
+          <td>(</td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>dependentVariable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>independentVariables</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>coef</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">dependentVariable</td><td>Column containing the dependent variable </td></tr>
+    <tr><td class="paramname">independentVariables</td><td>Column containing the array of independent variables </td></tr>
+    <tr><td class="paramname">coef</td><td>Column containing the array of the coefficients (as obtained by logregr)</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section user"><dt></dt><dd>To include an intercept in the model, set one coordinate in the <code>independentVariables</code> array to 1.</dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>A composite value:<ul>
+<li><code>margins FLOAT8[] </code> - Array of marginal effects</li>
+<li><code>coefFLOAT8[] </code> - The coefficients for the regression</li>
+<li><code>std_err FLOAT8[]</code> - Array of standard-errors (calculated by the delta method),</li>
+<li><code>z_stats FLOAT8[]</code> - Array of z-statistics</li>
+<li><code>p_values FLOAT8[]</code> - Array of p-values</li>
+</ul>
+</dd></dl>
+<dl class="section user"><dt>Usage</dt><dd><ul>
+<li>Get all the diagnostic statistics:<br />
+ <pre> SELECT marginal_logregr(<em>dependentVariable</em>,
+ <em>independentVariables</em>, coef)
+ FROM <em>dataTable</em>;
+</pre> </li>
+</ul>
+</dd></dl>
+
+</div>
+</div>
+<a id="ac4e06a28a76651de70768457575bb9e0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac4e06a28a76651de70768457575bb9e0">&#9670;&nbsp;</a></span>marginal_logregr_step_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">marginal_logregr_result marginal_logregr_step_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae44a992f8bd650b5c1f0c2ffae7bb542"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae44a992f8bd650b5c1f0c2ffae7bb542">&#9670;&nbsp;</a></span>marginal_logregr_step_merge_states()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] marginal_logregr_step_merge_states </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a2115a795562bc2928c3858fc55104c4b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2115a795562bc2928c3858fc55104c4b">&#9670;&nbsp;</a></span>marginal_logregr_step_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] marginal_logregr_step_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>coef</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aaf0b3cc34b99d4b47334bdde2d139b81"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aaf0b3cc34b99d4b47334bdde2d139b81">&#9670;&nbsp;</a></span>marginal_mlogregr()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate marginal_mlogregr_result marginal_mlogregr </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>dependentVariable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_categories</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>ref_category</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>independentVariables</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>coef</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">dependentVariable</td><td>Column containing the dependent variable </td></tr>
+    <tr><td class="paramname">independentVariables</td><td>Column containing the array of independent variables </td></tr>
+    <tr><td class="paramname">num_categories</td><td>Number of categories </td></tr>
+    <tr><td class="paramname">ref_category</td><td>Reference category </td></tr>
+    <tr><td class="paramname">coef</td><td>Column containing the array of the coefficients (as obtained by mlogregr)</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section user"><dt></dt><dd>To include an intercept in the model, set one coordinate in the <code>independentVariables</code> array to 1.</dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>A composite value:<ul>
+<li><code>margins FLOAT8[] </code> - Array of marginal effects</li>
+<li><code>coef FLOAT8[] </code> - The coefficients for the regression</li>
+<li><code>std_err FLOAT8[]</code> - Array of standard-errors (using the delta method),</li>
+<li><code>z_stats FLOAT8[]</code> - Array of z-statistics</li>
+<li><code>p_values FLOAT8[]</code> - Array of p-values</li>
+</ul>
+</dd></dl>
+<dl class="section user"><dt>Usage</dt><dd><ul>
+<li>Get all the diagnostic statistics:<br />
+ <pre> SELECT marginal_mlogregr(<em>dependentVariable</em>,
+ <em>independentVariables</em>, coef)
+ FROM <em>dataTable</em>;
+</pre> </li>
+</ul>
+</dd></dl>
+
+</div>
+</div>
+<a id="a36fcae5245ca31517723fce38b183c90"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a36fcae5245ca31517723fce38b183c90">&#9670;&nbsp;</a></span>margins() <span class="overload">[1/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void margins </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>x_design</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>marginal_vars</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a632bc9f9bf73c40fe6bf3b1778eee91a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a632bc9f9bf73c40fe6bf3b1778eee91a">&#9670;&nbsp;</a></span>margins() <span class="overload">[2/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void margins </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>x_design</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a6d002a5934d6bc614925ffcf67f24a99"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6d002a5934d6bc614925ffcf67f24a99">&#9670;&nbsp;</a></span>margins() <span class="overload">[3/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void margins </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>x_design</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="abd29ce2c3931dfbe5fc7e882114b8c68"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abd29ce2c3931dfbe5fc7e882114b8c68">&#9670;&nbsp;</a></span>margins() <span class="overload">[4/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void margins </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a14c96eee91746c4693d1775ff3ee8158"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a14c96eee91746c4693d1775ff3ee8158">&#9670;&nbsp;</a></span>margins() <span class="overload">[5/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar margins </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a9c7042e5a4dca342e745c89f72f4a650"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9c7042e5a4dca342e745c89f72f4a650">&#9670;&nbsp;</a></span>margins() <span class="overload">[6/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar margins </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a9517d679ee4209126895445cbed51fe3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9517d679ee4209126895445cbed51fe3">&#9670;&nbsp;</a></span>margins_logregr() <span class="overload">[1/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar margins_logregr </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a63aba4148ce9bfcafea81d08e3797a1f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a63aba4148ce9bfcafea81d08e3797a1f">&#9670;&nbsp;</a></span>margins_logregr() <span class="overload">[2/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar margins_logregr </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a99dd17e30e4fcc2f39da4e671406bcea"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a99dd17e30e4fcc2f39da4e671406bcea">&#9670;&nbsp;</a></span>margins_logregr() <span class="overload">[3/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void margins_logregr </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>marginal_vars</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_iter</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>optimizer</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>tolerance</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>verbose_mode</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">source_table</td><td>String identifying the input table </td></tr>
+    <tr><td class="paramname">out_table</td><td>String identifying the output table to be created </td></tr>
+    <tr><td class="paramname">dependent_varname</td><td>Column containing the dependent variable </td></tr>
+    <tr><td class="paramname">independent_varname</td><td>Column containing the array of independent variables </td></tr>
+    <tr><td class="paramname">grouping_cols</td><td>Set of columns to group by. </td></tr>
+    <tr><td class="paramname">marginal_vars</td><td>Subset of independent variables to calculate marginal effects for. </td></tr>
+    <tr><td class="paramname">max_iter</td><td>Maximum number of iterations </td></tr>
+    <tr><td class="paramname">optimizer</td><td>Optimizer to be used (newton/irls, cg or idg) </td></tr>
+    <tr><td class="paramname">tolerance</td><td>Resiual tolerance </td></tr>
+    <tr><td class="paramname">verbose_mode</td><td>Verbose mode (on/off)</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section user"><dt></dt><dd>To include an intercept in the model, set one coordinate in the <code>independentVariables</code> array to 1.</dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>void</dd></dl>
+<dl class="section user"><dt>Usage</dt><dd>For function summary information. Run sql&gt; select margins_logregr('help'); OR sql&gt; select <a class="el" href="marginal_8sql__in.html#a9517d679ee4209126895445cbed51fe3">margins_logregr()</a>; OR sql&gt; select margins_logregr('?'); For function usage information. Run sql&gt; select margins_logregr('usage');<ul>
+<li>Compute the coefficients, and the get the marginal diagnostic statistics: <pre>
+  select margins_logregr(source_table, out_table, dependentVariable, independentVariables);
+ </pre> </li>
+</ul>
+</dd></dl>
+
+</div>
+</div>
+<a id="a4e0b284b130524ff36b44281fa9e3fb9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4e0b284b130524ff36b44281fa9e3fb9">&#9670;&nbsp;</a></span>margins_logregr() <span class="overload">[4/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void margins_logregr </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_variable</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="af520629d3624d30cdcdbce247d89ac7d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af520629d3624d30cdcdbce247d89ac7d">&#9670;&nbsp;</a></span>margins_logregr() <span class="overload">[5/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void margins_logregr </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae84af4141c1730d7299210ad5005ffe6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae84af4141c1730d7299210ad5005ffe6">&#9670;&nbsp;</a></span>margins_logregr() <span class="overload">[6/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void margins_logregr </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>marginal_vars</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7ad0356ba6d3edec11d4ee6904ff8588"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7ad0356ba6d3edec11d4ee6904ff8588">&#9670;&nbsp;</a></span>margins_logregr() <span class="overload">[7/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void margins_logregr </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>marginal_vars</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_iter</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a9a9ff25e0ce2220f14e6514a84e71d8a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9a9ff25e0ce2220f14e6514a84e71d8a">&#9670;&nbsp;</a></span>margins_logregr() <span class="overload">[8/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void margins_logregr </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>marginal_vars</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_iter</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>optimizer</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a2018fd008c71953a32057d34de54acfc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2018fd008c71953a32057d34de54acfc">&#9670;&nbsp;</a></span>margins_logregr() <span class="overload">[9/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void margins_logregr </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>marginal_vars</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_iter</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>optimizer</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>tolerance</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae39ad0e1beca060fd153dba35901a4e7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae39ad0e1beca060fd153dba35901a4e7">&#9670;&nbsp;</a></span>margins_mlogregr() <span class="overload">[1/12]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar margins_mlogregr </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1e152bdb5c5ac347b5621350a396a33f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1e152bdb5c5ac347b5621350a396a33f">&#9670;&nbsp;</a></span>margins_mlogregr() <span class="overload">[2/12]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar margins_mlogregr </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aedeea68ce9db3c1ad1ce90219bb02fa0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aedeea68ce9db3c1ad1ce90219bb02fa0">&#9670;&nbsp;</a></span>margins_mlogregr() <span class="overload">[3/12]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void margins_mlogregr </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>ref_category</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>marginal_vars</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>optimizer_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>verbose_mode</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">source_table</td><td>String identifying the input table </td></tr>
+    <tr><td class="paramname">out_table</td><td>String identifying the output table to be created </td></tr>
+    <tr><td class="paramname">dependent_varname</td><td>Column containing the dependent variable </td></tr>
+    <tr><td class="paramname">independent_varname</td><td>Column containing the array of independent variables </td></tr>
+    <tr><td class="paramname">ref_category</td><td>Reference category for the multinomial logistic regression </td></tr>
+    <tr><td class="paramname">grouping_cols</td><td>Set of columns to group by. </td></tr>
+    <tr><td class="paramname">marginal_vars</td><td>Subset of independent variables to calculate marginal effects for. </td></tr>
+    <tr><td class="paramname">max_iter</td><td>Maximum number of iterations </td></tr>
+    <tr><td class="paramname">optimizer</td><td>Optimizer to be used (newton/irls, cg or idg) </td></tr>
+    <tr><td class="paramname">tolerance</td><td>Resiual tolerance </td></tr>
+    <tr><td class="paramname">verbose_mode</td><td>Verbose mode (on/off)</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section user"><dt></dt><dd>To include an intercept in the model, set one coordinate in the <code>independentVariables</code> array to 1.</dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>void</dd></dl>
+<dl class="section user"><dt>Usage</dt><dd>For function summary information. Run sql&gt; select margins_mlogregr('help'); OR sql&gt; select <a class="el" href="marginal_8sql__in.html#ae39ad0e1beca060fd153dba35901a4e7">margins_mlogregr()</a>; OR sql&gt; select margins_mlogregr('?'); For function usage information. Run sql&gt; select margins_mlogregr('usage'); </dd></dl>
+
+</div>
+</div>
+<a id="a2837cc6b3ea201682db76102cace3d0e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2837cc6b3ea201682db76102cace3d0e">&#9670;&nbsp;</a></span>margins_mlogregr() <span class="overload">[4/12]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void margins_mlogregr </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>ref_category</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>marginal_vars</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>optimizer_params</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a79e7c2ad06348e95afea81d4b6c6c9f7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a79e7c2ad06348e95afea81d4b6c6c9f7">&#9670;&nbsp;</a></span>margins_mlogregr() <span class="overload">[5/12]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void margins_mlogregr </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>ref_category</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>marginal_vars</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_iter</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>optimizer</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>tolerance</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>verbose_mode</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a0827f2605803847a34e26f31b24529ca"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0827f2605803847a34e26f31b24529ca">&#9670;&nbsp;</a></span>margins_mlogregr() <span class="overload">[6/12]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void margins_mlogregr </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>ref_category</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>marginal_vars</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_iter</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a80368510f0bcf8633b017b82c9744ce7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a80368510f0bcf8633b017b82c9744ce7">&#9670;&nbsp;</a></span>margins_mlogregr() <span class="overload">[7/12]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void margins_mlogregr </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>ref_category</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>marginal_vars</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_iter</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>optimizer</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="afaa380d3b7ce111d6a81b5b0fa7483f3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afaa380d3b7ce111d6a81b5b0fa7483f3">&#9670;&nbsp;</a></span>margins_mlogregr() <span class="overload">[8/12]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void margins_mlogregr </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>ref_category</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>marginal_vars</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_iter</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>optimizer</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>tolerance</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a90bd35d3bb7a3f94feeeb08f9ead8a55"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a90bd35d3bb7a3f94feeeb08f9ead8a55">&#9670;&nbsp;</a></span>margins_mlogregr() <span class="overload">[9/12]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void margins_mlogregr </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_variable</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="af0ef176b7f0d0c518d3a16182ac6117d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af0ef176b7f0d0c518d3a16182ac6117d">&#9670;&nbsp;</a></span>margins_mlogregr() <span class="overload">[10/12]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void margins_mlogregr </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>ref_category</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7e66918e0fcd02f8492347604474a29a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7e66918e0fcd02f8492347604474a29a">&#9670;&nbsp;</a></span>margins_mlogregr() <span class="overload">[11/12]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void margins_mlogregr </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>ref_category</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8311df1f591cff8d30ca8df816c0cfca"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8311df1f591cff8d30ca8df816c0cfca">&#9670;&nbsp;</a></span>margins_mlogregr() <span class="overload">[12/12]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void margins_mlogregr </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>ref_category</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>marginal_vars</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ad80d7df29226a2529f9f80607f2a983e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad80d7df29226a2529f9f80607f2a983e">&#9670;&nbsp;</a></span>mlogregr_marginal_step_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">marginal_mlogregr_result mlogregr_marginal_step_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a82ac74fd7aec70b7596bc2b4776742fa"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a82ac74fd7aec70b7596bc2b4776742fa">&#9670;&nbsp;</a></span>mlogregr_marginal_step_merge_states()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] mlogregr_marginal_step_merge_states </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7b8a7cf298ea51fc16de975e2503615a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7b8a7cf298ea51fc16de975e2503615a">&#9670;&nbsp;</a></span>mlogregr_marginal_step_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] mlogregr_marginal_step_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_categories</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>ref_category</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>coef</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_ac52a4b89b7b1b1591f2952b5cbd041a.html">regress</a></li><li class="navelem"><a class="el" href="marginal_8sql__in.html">marginal.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:57 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/matrix__ops_8sql__in.html b/docs/rc/matrix__ops_8sql__in.html
new file mode 100644
index 0000000..031c498
--- /dev/null
+++ b/docs/rc/matrix__ops_8sql__in.html
@@ -0,0 +1,6331 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: matrix_ops.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('matrix__ops_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">matrix_ops.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Implementation of matrix operations in SQL.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a0535b01f414f5d61153abca8b3cd94fa"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a0535b01f414f5d61153abca8b3cd94fa">matrix_info</a> (text message)</td></tr>
+<tr class="separator:a0535b01f414f5d61153abca8b3cd94fa"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a94c1c4f3fb88bb80344d53ee2cc3c981"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a94c1c4f3fb88bb80344d53ee2cc3c981">matrix_info</a> ()</td></tr>
+<tr class="separator:a94c1c4f3fb88bb80344d53ee2cc3c981"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a83e1d5e2c8cd598084c6d21fdce83ae7"><td class="memItemLeft" align="right" valign="top">matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a83e1d5e2c8cd598084c6d21fdce83ae7">matrix_mult</a> (text matrix_a, text a_args, text matrix_b, text b_args, text matrix_out, text out_args)</td></tr>
+<tr class="memdesc:a83e1d5e2c8cd598084c6d21fdce83ae7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Multiplies two matrices. It requires that all the values are NON-NULL. This is the sparse representation of the matrix where the matrix elements are indexed by the row and column index.  <a href="#a83e1d5e2c8cd598084c6d21fdce83ae7">More...</a><br /></td></tr>
+<tr class="separator:a83e1d5e2c8cd598084c6d21fdce83ae7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aea1f8c6538b189a29c24b56f5af496b8"><td class="memItemLeft" align="right" valign="top">matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#aea1f8c6538b189a29c24b56f5af496b8">matrix_mult</a> (text matrix_a, text a_args, text matrix_b, text b_args, text matrix_out)</td></tr>
+<tr class="separator:aea1f8c6538b189a29c24b56f5af496b8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a43a2702360817f94ecf9b3ba9a984548"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a43a2702360817f94ecf9b3ba9a984548">matrix_mult</a> (text message)</td></tr>
+<tr class="separator:a43a2702360817f94ecf9b3ba9a984548"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad89a88acce449ee27ba9d3a73950c2d7"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#ad89a88acce449ee27ba9d3a73950c2d7">matrix_mult</a> ()</td></tr>
+<tr class="separator:ad89a88acce449ee27ba9d3a73950c2d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aad615ae2da39bf15c8032eacb8330a74"><td class="memItemLeft" align="right" valign="top">integer []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#aad615ae2da39bf15c8032eacb8330a74">matrix_ndims</a> (text matrix_in, text in_args, boolean is_block)</td></tr>
+<tr class="memdesc:aad615ae2da39bf15c8032eacb8330a74"><td class="mdescLeft">&#160;</td><td class="mdescRight">get the ndims of a matrix in an array format  <a href="#aad615ae2da39bf15c8032eacb8330a74">More...</a><br /></td></tr>
+<tr class="separator:aad615ae2da39bf15c8032eacb8330a74"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a563239e2948ed428ae62df73912c8cda"><td class="memItemLeft" align="right" valign="top">integer []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a563239e2948ed428ae62df73912c8cda">matrix_ndims</a> (text matrix_in, text in_args)</td></tr>
+<tr class="separator:a563239e2948ed428ae62df73912c8cda"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a198a59b704931cbe35edd1ffdccf025b"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a198a59b704931cbe35edd1ffdccf025b">matrix_ndims</a> (text message)</td></tr>
+<tr class="separator:a198a59b704931cbe35edd1ffdccf025b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac502592b54ed6d09d8e16eb7993672fb"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#ac502592b54ed6d09d8e16eb7993672fb">matrix_ndims</a> ()</td></tr>
+<tr class="separator:ac502592b54ed6d09d8e16eb7993672fb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1cbb83dad451e7c36033c0f3df0a22e0"><td class="memItemLeft" align="right" valign="top">matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a1cbb83dad451e7c36033c0f3df0a22e0">matrix_add</a> (text matrix_a, text a_args, text matrix_b, text b_args, text matrix_out, text out_args)</td></tr>
+<tr class="memdesc:a1cbb83dad451e7c36033c0f3df0a22e0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Adds two matrices. It requires that all the values are NON-NULL. This is the sparse representation of the matrix where the matrix elements are indexed by the row and column index.  <a href="#a1cbb83dad451e7c36033c0f3df0a22e0">More...</a><br /></td></tr>
+<tr class="separator:a1cbb83dad451e7c36033c0f3df0a22e0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a41caa30da3fe15625e33782884ca6060"><td class="memItemLeft" align="right" valign="top">matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a41caa30da3fe15625e33782884ca6060">matrix_add</a> (text matrix_a, text a_args, text matrix_b, text b_args, text matrix_out)</td></tr>
+<tr class="separator:a41caa30da3fe15625e33782884ca6060"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af305d7f198954d3dabf1b47578ad8d81"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#af305d7f198954d3dabf1b47578ad8d81">matrix_add</a> (text message)</td></tr>
+<tr class="separator:af305d7f198954d3dabf1b47578ad8d81"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a68b950ef082b7f0545ba1a926c9afe35"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a68b950ef082b7f0545ba1a926c9afe35">matrix_add</a> ()</td></tr>
+<tr class="separator:a68b950ef082b7f0545ba1a926c9afe35"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa9b1f1554e98d3ab8f04d203f99fd651"><td class="memItemLeft" align="right" valign="top">matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#aa9b1f1554e98d3ab8f04d203f99fd651">matrix_sub</a> (text matrix_a, text a_args, text matrix_b, text b_args, text matrix_out, text out_args)</td></tr>
+<tr class="memdesc:aa9b1f1554e98d3ab8f04d203f99fd651"><td class="mdescLeft">&#160;</td><td class="mdescRight">Subs two matrices. It requires that all the values are NON-NULL. This is the sparse representation of the matrix where the matrix elements are indexed by the row and column id.  <a href="#aa9b1f1554e98d3ab8f04d203f99fd651">More...</a><br /></td></tr>
+<tr class="separator:aa9b1f1554e98d3ab8f04d203f99fd651"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2a8806e11141e8cc5a3fa0c6b1b9e62a"><td class="memItemLeft" align="right" valign="top">matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a2a8806e11141e8cc5a3fa0c6b1b9e62a">matrix_sub</a> (text matrix_a, text a_args, text matrix_b, text b_args, text matrix_out)</td></tr>
+<tr class="separator:a2a8806e11141e8cc5a3fa0c6b1b9e62a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a66d586c0126a95e43ecad7d3efbcce69"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a66d586c0126a95e43ecad7d3efbcce69">matrix_sub</a> (text message)</td></tr>
+<tr class="separator:a66d586c0126a95e43ecad7d3efbcce69"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a41d7286b1a57206f999e064bf3745407"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a41d7286b1a57206f999e064bf3745407">matrix_sub</a> ()</td></tr>
+<tr class="separator:a41d7286b1a57206f999e064bf3745407"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a61fef136d511ac92153223f590ee596f"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a61fef136d511ac92153223f590ee596f">matrix_extract_row</a> (text matrix_in, text in_args, integer index)</td></tr>
+<tr class="memdesc:a61fef136d511ac92153223f590ee596f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Extract row from matrix given row index. It requires that all the values are NON-NULL. This is the dense or sparse representation of the matrix where the matrix elements are indexed by row id for dense and by the row and column id for sparse.  <a href="#a61fef136d511ac92153223f590ee596f">More...</a><br /></td></tr>
+<tr class="separator:a61fef136d511ac92153223f590ee596f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0b8c0815933d4d39a6ea7bc7fe951552"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a0b8c0815933d4d39a6ea7bc7fe951552">matrix_extract_row</a> (text message)</td></tr>
+<tr class="separator:a0b8c0815933d4d39a6ea7bc7fe951552"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a65963c0f5721af6f785f65083152c64c"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a65963c0f5721af6f785f65083152c64c">matrix_extract_row</a> ()</td></tr>
+<tr class="separator:a65963c0f5721af6f785f65083152c64c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1f3b0f7a3bbbab7b22f8ae545cf46255"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a1f3b0f7a3bbbab7b22f8ae545cf46255">matrix_extract_col</a> (text matrix_in, text in_args, integer index)</td></tr>
+<tr class="memdesc:a1f3b0f7a3bbbab7b22f8ae545cf46255"><td class="mdescLeft">&#160;</td><td class="mdescRight">Extract column from matrix given column index. It requires that all the values are NON-NULL. This is the dense or sparse representation of the matrix where the matrix elements are indexed by row id for dense and by the row and column id for sparse.  <a href="#a1f3b0f7a3bbbab7b22f8ae545cf46255">More...</a><br /></td></tr>
+<tr class="separator:a1f3b0f7a3bbbab7b22f8ae545cf46255"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1c5371cb5bc60dc48ba4a6cee805c30d"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a1c5371cb5bc60dc48ba4a6cee805c30d">matrix_extract_col</a> (text message)</td></tr>
+<tr class="separator:a1c5371cb5bc60dc48ba4a6cee805c30d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a98a695c4cf03ae60c654013ec08fdfe8"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a98a695c4cf03ae60c654013ec08fdfe8">matrix_extract_col</a> ()</td></tr>
+<tr class="separator:a98a695c4cf03ae60c654013ec08fdfe8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2f88aa4f4a8e479276c927048e1814f2"><td class="memItemLeft" align="right" valign="top">matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a2f88aa4f4a8e479276c927048e1814f2">matrix_zeros</a> (integer row_dim, integer col_dim, text matrix_out, text out_args)</td></tr>
+<tr class="memdesc:a2f88aa4f4a8e479276c927048e1814f2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initializes matrix with zeros. It requires that all the values are NON-NULL.  <a href="#a2f88aa4f4a8e479276c927048e1814f2">More...</a><br /></td></tr>
+<tr class="separator:a2f88aa4f4a8e479276c927048e1814f2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a94d6e419cbf5a1809e7c4cd788adf025"><td class="memItemLeft" align="right" valign="top">matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a94d6e419cbf5a1809e7c4cd788adf025">matrix_zeros</a> (integer row_dim, integer col_dim, text matrix_out)</td></tr>
+<tr class="separator:a94d6e419cbf5a1809e7c4cd788adf025"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a733fd716b4b996f1a6ffca967496d899"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a733fd716b4b996f1a6ffca967496d899">matrix_zeros</a> (text message)</td></tr>
+<tr class="separator:a733fd716b4b996f1a6ffca967496d899"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaed270402933fd463479858f893b4357"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#aaed270402933fd463479858f893b4357">matrix_zeros</a> ()</td></tr>
+<tr class="separator:aaed270402933fd463479858f893b4357"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6aefe99d73608495150c1ac46cc9bcd6"><td class="memItemLeft" align="right" valign="top">matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a6aefe99d73608495150c1ac46cc9bcd6">matrix_max</a> (text matrix_in, text in_args, integer dim, text matrix_out, boolean fetch_index)</td></tr>
+<tr class="memdesc:a6aefe99d73608495150c1ac46cc9bcd6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get max value along dimension from matrix. Also returns corresponding index if set fetch_index. It requires that all the values are NON-NULL. This is the dense or sparse representation of the matrix where the matrix elements are indexed by row id for dense and by the row and column id for sparse.  <a href="#a6aefe99d73608495150c1ac46cc9bcd6">More...</a><br /></td></tr>
+<tr class="separator:a6aefe99d73608495150c1ac46cc9bcd6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a738a759b0397a3a652ba76c5e2aea9a9"><td class="memItemLeft" align="right" valign="top">matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a738a759b0397a3a652ba76c5e2aea9a9">matrix_max</a> (text matrix_in, text in_args, integer dim, text matrix_out)</td></tr>
+<tr class="separator:a738a759b0397a3a652ba76c5e2aea9a9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad5101b99f8112074e95c76f008081741"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#ad5101b99f8112074e95c76f008081741">matrix_max</a> (text message)</td></tr>
+<tr class="separator:ad5101b99f8112074e95c76f008081741"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3f47e137a229cc32670461dee5fa3c7a"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a3f47e137a229cc32670461dee5fa3c7a">matrix_max</a> ()</td></tr>
+<tr class="separator:a3f47e137a229cc32670461dee5fa3c7a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa27d69d09f5eb456eb326d4b5eda1a2a"><td class="memItemLeft" align="right" valign="top">matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#aa27d69d09f5eb456eb326d4b5eda1a2a">matrix_min</a> (text matrix_in, text in_args, integer dim, text matrix_out, boolean fetch_index)</td></tr>
+<tr class="memdesc:aa27d69d09f5eb456eb326d4b5eda1a2a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get min value along dimension from matrix. Also returns corresponding index if set fetch_index. It requires that all the values are NON-NULL. This is the dense or sparse representation of the matrix where the matrix elements are indexed by row id for dense and by the row and column id for sparse.  <a href="#aa27d69d09f5eb456eb326d4b5eda1a2a">More...</a><br /></td></tr>
+<tr class="separator:aa27d69d09f5eb456eb326d4b5eda1a2a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6647bd00e4b853c2d7fbc9175f087ab9"><td class="memItemLeft" align="right" valign="top">matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a6647bd00e4b853c2d7fbc9175f087ab9">matrix_min</a> (text matrix_in, text in_args, integer dim, text matrix_out)</td></tr>
+<tr class="separator:a6647bd00e4b853c2d7fbc9175f087ab9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7d2aee81366873b11104a5d4fe1e4c36"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a7d2aee81366873b11104a5d4fe1e4c36">matrix_min</a> (text message)</td></tr>
+<tr class="separator:a7d2aee81366873b11104a5d4fe1e4c36"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad777bc84ac4691172a90133825ce5301"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#ad777bc84ac4691172a90133825ce5301">matrix_min</a> ()</td></tr>
+<tr class="separator:ad777bc84ac4691172a90133825ce5301"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af03096b43d66e3a3448885e8d6643244"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#af03096b43d66e3a3448885e8d6643244">matrix_sum</a> (text matrix_in, text in_args, integer dim)</td></tr>
+<tr class="memdesc:af03096b43d66e3a3448885e8d6643244"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculate sum along dimension for matrix. It requires that all the values are NON-NULL. This is the sparse representation of the matrix where the matrix elements are indexed by the row and column id.  <a href="#af03096b43d66e3a3448885e8d6643244">More...</a><br /></td></tr>
+<tr class="separator:af03096b43d66e3a3448885e8d6643244"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6006396999fd192910197e40a0655179"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a6006396999fd192910197e40a0655179">matrix_sum</a> (text matrix_in, text in_args)</td></tr>
+<tr class="separator:a6006396999fd192910197e40a0655179"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2ce9cf659cd15d6c765ff8cd11b26a2f"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a2ce9cf659cd15d6c765ff8cd11b26a2f">matrix_sum</a> (text message)</td></tr>
+<tr class="separator:a2ce9cf659cd15d6c765ff8cd11b26a2f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a73a54a0e80047b8b9e5df2c4b635c155"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a73a54a0e80047b8b9e5df2c4b635c155">matrix_sum</a> ()</td></tr>
+<tr class="separator:a73a54a0e80047b8b9e5df2c4b635c155"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aff618caaa8e3edc1b3f2465d04598a9d"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#aff618caaa8e3edc1b3f2465d04598a9d">matrix_mean</a> (text matrix_in, text in_args, integer dim)</td></tr>
+<tr class="memdesc:aff618caaa8e3edc1b3f2465d04598a9d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculate mean along dimension for matrix. It requires that all the values are NON-NULL. This is the sparse representation of the matrix where the matrix elements are indexed by the row and column id.  <a href="#aff618caaa8e3edc1b3f2465d04598a9d">More...</a><br /></td></tr>
+<tr class="separator:aff618caaa8e3edc1b3f2465d04598a9d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a21d94d92c4545bccb58234e8ee0bed2a"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a21d94d92c4545bccb58234e8ee0bed2a">matrix_mean</a> (text matrix_in, text in_args)</td></tr>
+<tr class="separator:a21d94d92c4545bccb58234e8ee0bed2a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae703f1bf36c4ff0771253db03d2cd7d2"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#ae703f1bf36c4ff0771253db03d2cd7d2">matrix_mean</a> (text message)</td></tr>
+<tr class="separator:ae703f1bf36c4ff0771253db03d2cd7d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aef727e104b1c64c790bf0913caf78152"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#aef727e104b1c64c790bf0913caf78152">matrix_mean</a> ()</td></tr>
+<tr class="separator:aef727e104b1c64c790bf0913caf78152"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa41d97528365f8e161e5e821165a6e0d"><td class="memItemLeft" align="right" valign="top">matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#aa41d97528365f8e161e5e821165a6e0d">matrix_scalar_mult</a> (text matrix_in, text in_args, float8 scalar, text matrix_out, text out_args)</td></tr>
+<tr class="memdesc:aa41d97528365f8e161e5e821165a6e0d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Multiplies one matrix with scalar. It requires that all the values are NON-NULL. This is the sparse representation of the matrix where the matrix elements are indexed by the row and column id.  <a href="#aa41d97528365f8e161e5e821165a6e0d">More...</a><br /></td></tr>
+<tr class="separator:aa41d97528365f8e161e5e821165a6e0d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0c8518f032d9f6af692dabde9f4e2051"><td class="memItemLeft" align="right" valign="top">matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a0c8518f032d9f6af692dabde9f4e2051">matrix_scalar_mult</a> (text matrix_in, text in_args, float8 scalar, text matrix_out)</td></tr>
+<tr class="separator:a0c8518f032d9f6af692dabde9f4e2051"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6993220fd6f4d2c85514a05c966c0334"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a6993220fd6f4d2c85514a05c966c0334">matrix_scalar_mult</a> (text message)</td></tr>
+<tr class="separator:a6993220fd6f4d2c85514a05c966c0334"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a48baae4d5938c7afdf160a84d43de399"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a48baae4d5938c7afdf160a84d43de399">matrix_scalar_mult</a> ()</td></tr>
+<tr class="separator:a48baae4d5938c7afdf160a84d43de399"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5060836ec7418a8ec7141740d709db5a"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a5060836ec7418a8ec7141740d709db5a">matrix_vec_mult</a> (text matrix_in, text in_args, float8[] vector)</td></tr>
+<tr class="memdesc:a5060836ec7418a8ec7141740d709db5a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Multiplies one matrix with vector. It requires that all the values are NON-NULL. This is the sparse representation of the matrix where the matrix elements are indexed by the row and column id.  <a href="#a5060836ec7418a8ec7141740d709db5a">More...</a><br /></td></tr>
+<tr class="separator:a5060836ec7418a8ec7141740d709db5a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a43ac21377c0932229f36fd4f11cedb2a"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a43ac21377c0932229f36fd4f11cedb2a">matrix_vec_mult</a> (text message)</td></tr>
+<tr class="separator:a43ac21377c0932229f36fd4f11cedb2a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a738b55e4fa41b7b8ef650e47ba85fad7"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a738b55e4fa41b7b8ef650e47ba85fad7">matrix_vec_mult</a> ()</td></tr>
+<tr class="separator:a738b55e4fa41b7b8ef650e47ba85fad7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa93181583456a1f23c3665c051742173"><td class="memItemLeft" align="right" valign="top">matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#aa93181583456a1f23c3665c051742173">matrix_elem_mult</a> (text matrix_a, text a_args, text matrix_b, text b_args, text matrix_out, text out_args)</td></tr>
+<tr class="memdesc:aa93181583456a1f23c3665c051742173"><td class="mdescLeft">&#160;</td><td class="mdescRight">Multiplies two matrices by element. It requires that all the values are NON-NULL. This is the sparse representation of the matrix where the matrix elements are indexed by the row and column id.  <a href="#aa93181583456a1f23c3665c051742173">More...</a><br /></td></tr>
+<tr class="separator:aa93181583456a1f23c3665c051742173"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a282716431d27998bebf44d496ccd82df"><td class="memItemLeft" align="right" valign="top">matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a282716431d27998bebf44d496ccd82df">matrix_elem_mult</a> (text matrix_a, text a_args, text matrix_b, text b_args, text matrix_out)</td></tr>
+<tr class="separator:a282716431d27998bebf44d496ccd82df"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad0ff6a550b1941ce0cc3057343ce6eef"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#ad0ff6a550b1941ce0cc3057343ce6eef">matrix_elem_mult</a> (text message)</td></tr>
+<tr class="separator:ad0ff6a550b1941ce0cc3057343ce6eef"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a78e64fe103c3f22288445ae6dfe0c3a2"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a78e64fe103c3f22288445ae6dfe0c3a2">matrix_elem_mult</a> ()</td></tr>
+<tr class="separator:a78e64fe103c3f22288445ae6dfe0c3a2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa8089cdaf2b66d668f2f15fe3d457d06"><td class="memItemLeft" align="right" valign="top">matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#aa8089cdaf2b66d668f2f15fe3d457d06">matrix_trans</a> (text matrix_in, text in_args, text matrix_out, text out_args)</td></tr>
+<tr class="memdesc:aa8089cdaf2b66d668f2f15fe3d457d06"><td class="mdescLeft">&#160;</td><td class="mdescRight">Transpose matrix. It requires that all the values are NON-NULL. This is the sparse representation of the matrix where the matrix elements are indexed by the row and column index.  <a href="#aa8089cdaf2b66d668f2f15fe3d457d06">More...</a><br /></td></tr>
+<tr class="separator:aa8089cdaf2b66d668f2f15fe3d457d06"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af29ba2a78c6fc0efe0560882853514e7"><td class="memItemLeft" align="right" valign="top">matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#af29ba2a78c6fc0efe0560882853514e7">matrix_trans</a> (text matrix_in, text in_args, text matrix_out)</td></tr>
+<tr class="separator:af29ba2a78c6fc0efe0560882853514e7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a84deae83650034337bbec470786573ba"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a84deae83650034337bbec470786573ba">matrix_trans</a> (text message)</td></tr>
+<tr class="separator:a84deae83650034337bbec470786573ba"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7b37a26e5a301338305992bae6e35230"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a7b37a26e5a301338305992bae6e35230">matrix_trans</a> ()</td></tr>
+<tr class="separator:a7b37a26e5a301338305992bae6e35230"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a390fb7234f49e17c780e961184873759"><td class="memItemLeft" align="right" valign="top">matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a390fb7234f49e17c780e961184873759">matrix_sparsify</a> (text matrix_in, text in_args, text matrix_out, text out_args)</td></tr>
+<tr class="memdesc:a390fb7234f49e17c780e961184873759"><td class="mdescLeft">&#160;</td><td class="mdescRight">Converts matrix to sparse representation. It requires that all the values are NON-NULL. This is the dense representation of the matrix where the matrix elements are indexed by the row and column index.  <a href="#a390fb7234f49e17c780e961184873759">More...</a><br /></td></tr>
+<tr class="separator:a390fb7234f49e17c780e961184873759"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a07be86160c55d50fe8277e8bdd3bab38"><td class="memItemLeft" align="right" valign="top">matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a07be86160c55d50fe8277e8bdd3bab38">matrix_sparsify</a> (text matrix_in, text in_args, text matrix_out)</td></tr>
+<tr class="separator:a07be86160c55d50fe8277e8bdd3bab38"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a32bf4abd829dfc1b28d684af10d6b2d8"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a32bf4abd829dfc1b28d684af10d6b2d8">matrix_sparsify</a> (text message)</td></tr>
+<tr class="separator:a32bf4abd829dfc1b28d684af10d6b2d8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0cdd245c633ccb63fc1067ed121a8a4d"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a0cdd245c633ccb63fc1067ed121a8a4d">matrix_sparsify</a> ()</td></tr>
+<tr class="separator:a0cdd245c633ccb63fc1067ed121a8a4d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7df10b8c7cf6a26cc297a6c39482d084"><td class="memItemLeft" align="right" valign="top">matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a7df10b8c7cf6a26cc297a6c39482d084">matrix_densify</a> (text matrix_in, text in_args, text matrix_out, text out_args)</td></tr>
+<tr class="memdesc:a7df10b8c7cf6a26cc297a6c39482d084"><td class="mdescLeft">&#160;</td><td class="mdescRight">Converts matrix to dense representation. It requires that all the values are NON-NULL. This is the sparse representation of the matrix where the matrix elements are indexed by the row index.  <a href="#a7df10b8c7cf6a26cc297a6c39482d084">More...</a><br /></td></tr>
+<tr class="separator:a7df10b8c7cf6a26cc297a6c39482d084"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6d47b253d9f4a966c06bc011b52762ef"><td class="memItemLeft" align="right" valign="top">matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a6d47b253d9f4a966c06bc011b52762ef">matrix_densify</a> (text matrix_in, text in_args, text matrix_out)</td></tr>
+<tr class="separator:a6d47b253d9f4a966c06bc011b52762ef"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2440a8a698a41e31afd7517edba19a17"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a2440a8a698a41e31afd7517edba19a17">matrix_densify</a> (text message)</td></tr>
+<tr class="separator:a2440a8a698a41e31afd7517edba19a17"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adda0815232229bce7f88cfca9c99c2fb"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#adda0815232229bce7f88cfca9c99c2fb">matrix_densify</a> ()</td></tr>
+<tr class="separator:adda0815232229bce7f88cfca9c99c2fb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a68c05ce6379f28d5e30dd0144fe50565"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a68c05ce6379f28d5e30dd0144fe50565">matrix_scale_and_add</a> (text matrix_a, text a_args, text matrix_b, text b_args, float8 scale, text matrix_out, text out_args)</td></tr>
+<tr class="memdesc:a68c05ce6379f28d5e30dd0144fe50565"><td class="mdescLeft">&#160;</td><td class="mdescRight">Scale and add matrix operation ( R &lt;- A + sB)  <a href="#a68c05ce6379f28d5e30dd0144fe50565">More...</a><br /></td></tr>
+<tr class="separator:a68c05ce6379f28d5e30dd0144fe50565"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a31de2056018ac96ba01125c0e131f21e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a31de2056018ac96ba01125c0e131f21e">matrix_scale_and_add</a> (text matrix_a, text a_args, text matrix_b, text b_args, float8 scale, text matrix_out)</td></tr>
+<tr class="separator:a31de2056018ac96ba01125c0e131f21e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa5eb2864180eb276a786d9b2172aef5f"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#aa5eb2864180eb276a786d9b2172aef5f">matrix_norm</a> (text matrix_in, text in_args, text norm_type)</td></tr>
+<tr class="memdesc:aa5eb2864180eb276a786d9b2172aef5f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute matrix norm (of various types)  <a href="#aa5eb2864180eb276a786d9b2172aef5f">More...</a><br /></td></tr>
+<tr class="separator:aa5eb2864180eb276a786d9b2172aef5f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8ebac230a8a23e27125fd6b324484a30"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a8ebac230a8a23e27125fd6b324484a30">matrix_norm</a> (text matrix_in, text in_args)</td></tr>
+<tr class="separator:a8ebac230a8a23e27125fd6b324484a30"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4d3873b96aa8d7ec3288ba1e6c275f65"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a4d3873b96aa8d7ec3288ba1e6c275f65">matrix_norm</a> (text message)</td></tr>
+<tr class="separator:a4d3873b96aa8d7ec3288ba1e6c275f65"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aed19bdcfe46eb2645d85a9e71895719b"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#aed19bdcfe46eb2645d85a9e71895719b">matrix_norm</a> ()</td></tr>
+<tr class="separator:aed19bdcfe46eb2645d85a9e71895719b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0cb243e18397fb101f1cf48d9872f805"><td class="memItemLeft" align="right" valign="top">matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a0cb243e18397fb101f1cf48d9872f805">matrix_block_mult</a> (text matrix_a, text a_args, text matrix_b, text b_args, text matrix_out, text out_args)</td></tr>
+<tr class="separator:a0cb243e18397fb101f1cf48d9872f805"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af84a929ab1558a06a5f8e9e500bf9051"><td class="memItemLeft" align="right" valign="top">matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#af84a929ab1558a06a5f8e9e500bf9051">matrix_block_square</a> (text matrix_in, text in_args, text matrix_out, text out_args)</td></tr>
+<tr class="separator:af84a929ab1558a06a5f8e9e500bf9051"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5f096c3062218d0a6848ab1a22f3d5bb"><td class="memItemLeft" align="right" valign="top">matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a5f096c3062218d0a6848ab1a22f3d5bb">matrix_block_trans</a> (text matrix_in, text in_args, text matrix_out, text out_args)</td></tr>
+<tr class="separator:a5f096c3062218d0a6848ab1a22f3d5bb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae4082533d1943e20660dee4c951edf22"><td class="memItemLeft" align="right" valign="top">matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#ae4082533d1943e20660dee4c951edf22">matrix_square</a> (text matrix_in, text in_args, text matrix_out, text out_args)</td></tr>
+<tr class="memdesc:ae4082533d1943e20660dee4c951edf22"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculate square of matrix. It requires that all the values are NON-NULL. This is the dense representation of the matrix where the matrix elements are indexed by the row index.  <a href="#ae4082533d1943e20660dee4c951edf22">More...</a><br /></td></tr>
+<tr class="separator:ae4082533d1943e20660dee4c951edf22"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac27837c0e5196168e51ddd870c34205e"><td class="memItemLeft" align="right" valign="top">matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#ac27837c0e5196168e51ddd870c34205e">matrix_square</a> (text matrix_in, text in_args, text matrix_out)</td></tr>
+<tr class="separator:ac27837c0e5196168e51ddd870c34205e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a642932bc5d60ee0ee29068e2c0438d19"><td class="memItemLeft" align="right" valign="top">matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a642932bc5d60ee0ee29068e2c0438d19">matrix_diag</a> (float8[] diag_elements, text matrix_out, text out_args)</td></tr>
+<tr class="memdesc:a642932bc5d60ee0ee29068e2c0438d19"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create a diagonal matrix with a specified vector on the main diagonal. It always creates the sparse representation of the diagonal matrix where the matrix elements are indexed by the row and column index.  <a href="#a642932bc5d60ee0ee29068e2c0438d19">More...</a><br /></td></tr>
+<tr class="separator:a642932bc5d60ee0ee29068e2c0438d19"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae3b60dc30259b5526c7be0d1a6a95c20"><td class="memItemLeft" align="right" valign="top">matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#ae3b60dc30259b5526c7be0d1a6a95c20">matrix_diag</a> (float8[] diag_elements, text matrix_out)</td></tr>
+<tr class="separator:ae3b60dc30259b5526c7be0d1a6a95c20"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af05e66bbc871c4c24f569bf1b16f684b"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#af05e66bbc871c4c24f569bf1b16f684b">matrix_diag</a> (text message)</td></tr>
+<tr class="separator:af05e66bbc871c4c24f569bf1b16f684b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a888d9ab690fed966da3722886e1c0ff7"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a888d9ab690fed966da3722886e1c0ff7">matrix_diag</a> ()</td></tr>
+<tr class="separator:a888d9ab690fed966da3722886e1c0ff7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7f85d65a21f193f5e77409a3dcd34b06"><td class="memItemLeft" align="right" valign="top">float []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a7f85d65a21f193f5e77409a3dcd34b06">matrix_extract_diag</a> (text matrix_in, text in_args)</td></tr>
+<tr class="memdesc:a7f85d65a21f193f5e77409a3dcd34b06"><td class="mdescLeft">&#160;</td><td class="mdescRight">main diagonal matrix. It requires that all the matrix must be the square matrix. This is the sparse representation of the matrix where the matrix elements are indexed by the row and column index.  <a href="#a7f85d65a21f193f5e77409a3dcd34b06">More...</a><br /></td></tr>
+<tr class="separator:a7f85d65a21f193f5e77409a3dcd34b06"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8415b48d92a0523ebc4a3df4144fdd48"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a8415b48d92a0523ebc4a3df4144fdd48">matrix_extract_diag</a> (text message)</td></tr>
+<tr class="separator:a8415b48d92a0523ebc4a3df4144fdd48"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adce984af4adbd3ed1864c9427002ce93"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#adce984af4adbd3ed1864c9427002ce93">matrix_extract_diag</a> ()</td></tr>
+<tr class="separator:adce984af4adbd3ed1864c9427002ce93"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af4ce5b8872d28bd1d0e2e72af41db173"><td class="memItemLeft" align="right" valign="top">matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#af4ce5b8872d28bd1d0e2e72af41db173">matrix_identity</a> (integer row_dim, text matrix_out, text out_args)</td></tr>
+<tr class="memdesc:af4ce5b8872d28bd1d0e2e72af41db173"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create an identity matrix with the dimensionality specified by an integer. It can specify the sparse or dense representation of the result matrix.  <a href="#af4ce5b8872d28bd1d0e2e72af41db173">More...</a><br /></td></tr>
+<tr class="separator:af4ce5b8872d28bd1d0e2e72af41db173"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9284b89b9c13e43c2492aa6c9a9a17c0"><td class="memItemLeft" align="right" valign="top">matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a9284b89b9c13e43c2492aa6c9a9a17c0">matrix_identity</a> (integer row_dim, text matrix_out)</td></tr>
+<tr class="separator:a9284b89b9c13e43c2492aa6c9a9a17c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac5e003d0385e3be5858529e592fa8aef"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#ac5e003d0385e3be5858529e592fa8aef">matrix_identity</a> (text message)</td></tr>
+<tr class="separator:ac5e003d0385e3be5858529e592fa8aef"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab82476872e84430e9abc7a5485b4de9a"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#ab82476872e84430e9abc7a5485b4de9a">matrix_identity</a> ()</td></tr>
+<tr class="separator:ab82476872e84430e9abc7a5485b4de9a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad5df0edded7b5db4b9bdd29ff3e39ec3"><td class="memItemLeft" align="right" valign="top">matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#ad5df0edded7b5db4b9bdd29ff3e39ec3">matrix_random</a> (integer row_dim, integer col_dim, text in_args, text distribution, text matrix_out, text out_args)</td></tr>
+<tr class="memdesc:ad5df0edded7b5db4b9bdd29ff3e39ec3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initializes matrix with random distribution. It requires that all the values are NON-NULL.  <a href="#ad5df0edded7b5db4b9bdd29ff3e39ec3">More...</a><br /></td></tr>
+<tr class="separator:ad5df0edded7b5db4b9bdd29ff3e39ec3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af2dec2ccb01c2ba4b3d1293a032ff08f"><td class="memItemLeft" align="right" valign="top">matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#af2dec2ccb01c2ba4b3d1293a032ff08f">matrix_random</a> (integer row_id, integer col_id, text distribution, text matrix_out)</td></tr>
+<tr class="separator:af2dec2ccb01c2ba4b3d1293a032ff08f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae86e6f65ef75ed13a1de8b8e0c537bfc"><td class="memItemLeft" align="right" valign="top">matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#ae86e6f65ef75ed13a1de8b8e0c537bfc">matrix_random</a> (integer row_id, integer col_id, text matrix_out)</td></tr>
+<tr class="separator:ae86e6f65ef75ed13a1de8b8e0c537bfc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1f59138935fe638eca1f15588aa76ac1"><td class="memItemLeft" align="right" valign="top">matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a1f59138935fe638eca1f15588aa76ac1">matrix_ones</a> (integer row_dim, integer col_dim, text matrix_out, text out_args)</td></tr>
+<tr class="memdesc:a1f59138935fe638eca1f15588aa76ac1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initializes matrix with ones. It requires that all the values are NON-NULL.  <a href="#a1f59138935fe638eca1f15588aa76ac1">More...</a><br /></td></tr>
+<tr class="separator:a1f59138935fe638eca1f15588aa76ac1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a14b7d6ad206764d48dfbaa0cc9978e32"><td class="memItemLeft" align="right" valign="top">matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a14b7d6ad206764d48dfbaa0cc9978e32">matrix_ones</a> (integer row_id, integer col_id, text matrix_out)</td></tr>
+<tr class="separator:a14b7d6ad206764d48dfbaa0cc9978e32"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac9e608ad657246ace0bf0b4235d3a07d"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#ac9e608ad657246ace0bf0b4235d3a07d">matrix_ones</a> (text message)</td></tr>
+<tr class="separator:ac9e608ad657246ace0bf0b4235d3a07d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7df4dbdc3b0a7105c644c787daadf666"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a7df4dbdc3b0a7105c644c787daadf666">matrix_ones</a> ()</td></tr>
+<tr class="separator:a7df4dbdc3b0a7105c644c787daadf666"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0176dd860f866c5e0899b32f471bc953"><td class="memItemLeft" align="right" valign="top">matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a0176dd860f866c5e0899b32f471bc953">matrix_inverse</a> (text matrix_in, text in_args, text matrix_out, text out_args)</td></tr>
+<tr class="memdesc:a0176dd860f866c5e0899b32f471bc953"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculate inverse of matrix. It requires that all the values are NON-NULL. This is the dense representation of the matrix where the matrix elements are indexed by the row index.  <a href="#a0176dd860f866c5e0899b32f471bc953">More...</a><br /></td></tr>
+<tr class="separator:a0176dd860f866c5e0899b32f471bc953"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afee5dbac4040688e33f4bedb87af2d9e"><td class="memItemLeft" align="right" valign="top">matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#afee5dbac4040688e33f4bedb87af2d9e">matrix_inverse</a> (text matrix_in, text in_args, text matrix_out)</td></tr>
+<tr class="separator:afee5dbac4040688e33f4bedb87af2d9e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa344aec551796b20f22a276f5d8492f0"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#aa344aec551796b20f22a276f5d8492f0">matrix_inverse</a> (text message)</td></tr>
+<tr class="separator:aa344aec551796b20f22a276f5d8492f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2725d030fc03dcfa3a9271940d800e7a"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a2725d030fc03dcfa3a9271940d800e7a">matrix_inverse</a> ()</td></tr>
+<tr class="separator:a2725d030fc03dcfa3a9271940d800e7a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a929ded138fb0a953c8126ee8e20d793f"><td class="memItemLeft" align="right" valign="top">matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a929ded138fb0a953c8126ee8e20d793f">matrix_pinv</a> (text matrix_in, text in_args, text matrix_out, text out_args)</td></tr>
+<tr class="memdesc:a929ded138fb0a953c8126ee8e20d793f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculate generalized inverse of matrix. It requires that all the values are NON-NULL. This is the dense representation of the matrix where the matrix elements are indexed by the row index.  <a href="#a929ded138fb0a953c8126ee8e20d793f">More...</a><br /></td></tr>
+<tr class="separator:a929ded138fb0a953c8126ee8e20d793f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a39c21ffb83c184a21b481ad12056af13"><td class="memItemLeft" align="right" valign="top">matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a39c21ffb83c184a21b481ad12056af13">matrix_pinv</a> (text matrix_in, text in_args, text matrix_out)</td></tr>
+<tr class="separator:a39c21ffb83c184a21b481ad12056af13"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adc992cc64ae6c2537b417f5c9693d93c"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#adc992cc64ae6c2537b417f5c9693d93c">matrix_pinv</a> (text message)</td></tr>
+<tr class="separator:adc992cc64ae6c2537b417f5c9693d93c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a85193210d3fd55cba9d983a8cf71a34b"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a85193210d3fd55cba9d983a8cf71a34b">matrix_pinv</a> ()</td></tr>
+<tr class="separator:a85193210d3fd55cba9d983a8cf71a34b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a21a96e5933fd1094befc20051b0fb7b7"><td class="memItemLeft" align="right" valign="top">matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a21a96e5933fd1094befc20051b0fb7b7">matrix_lu</a> (text matrix_in, text in_args, text matrix_out_prefix, text out_args)</td></tr>
+<tr class="memdesc:a21a96e5933fd1094befc20051b0fb7b7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculate full pivoting LU decomposition of matrix. It requires that all the values are NON-NULL. This is the dense representation of the matrix where the matrix elements are indexed by the row index.  <a href="#a21a96e5933fd1094befc20051b0fb7b7">More...</a><br /></td></tr>
+<tr class="separator:a21a96e5933fd1094befc20051b0fb7b7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac0cfa9628072628259b2a50fef12ef9c"><td class="memItemLeft" align="right" valign="top">matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#ac0cfa9628072628259b2a50fef12ef9c">matrix_lu</a> (text matrix_in, text in_args, text matrix_out_prefix)</td></tr>
+<tr class="separator:ac0cfa9628072628259b2a50fef12ef9c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acdb62ad5d8fcfaf80bcb553df4c57bcf"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#acdb62ad5d8fcfaf80bcb553df4c57bcf">matrix_lu</a> (text message)</td></tr>
+<tr class="separator:acdb62ad5d8fcfaf80bcb553df4c57bcf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa1609dc673ccae19bae8493030490f76"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#aa1609dc673ccae19bae8493030490f76">matrix_lu</a> ()</td></tr>
+<tr class="separator:aa1609dc673ccae19bae8493030490f76"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1905e1b687e45dacbef1e82097b538de"><td class="memItemLeft" align="right" valign="top">matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a1905e1b687e45dacbef1e82097b538de">matrix_eigen</a> (text matrix_in, text in_args, text matrix_out, text out_args)</td></tr>
+<tr class="memdesc:a1905e1b687e45dacbef1e82097b538de"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculate eigenvalues of matrix. It requires that all the values are NON-NULL.  <a href="#a1905e1b687e45dacbef1e82097b538de">More...</a><br /></td></tr>
+<tr class="separator:a1905e1b687e45dacbef1e82097b538de"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae2ad35c91364d5ce4a94f7fd2aa6ce4b"><td class="memItemLeft" align="right" valign="top">matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#ae2ad35c91364d5ce4a94f7fd2aa6ce4b">matrix_eigen</a> (text matrix_in, text in_args, text matrix_out)</td></tr>
+<tr class="separator:ae2ad35c91364d5ce4a94f7fd2aa6ce4b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac1d4021eccdee42c7a3d8fa953900f1e"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#ac1d4021eccdee42c7a3d8fa953900f1e">matrix_eigen</a> (text message)</td></tr>
+<tr class="separator:ac1d4021eccdee42c7a3d8fa953900f1e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae25eb4b085772e283250ae1f3ace2cc6"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#ae25eb4b085772e283250ae1f3ace2cc6">matrix_eigen</a> ()</td></tr>
+<tr class="separator:ae25eb4b085772e283250ae1f3ace2cc6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4e4aeeb2f56f59f89fffe3049089ed23"><td class="memItemLeft" align="right" valign="top">matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a4e4aeeb2f56f59f89fffe3049089ed23">matrix_cholesky</a> (text matrix_in, text in_args, text matrix_out_prefix, text out_args)</td></tr>
+<tr class="memdesc:a4e4aeeb2f56f59f89fffe3049089ed23"><td class="mdescLeft">&#160;</td><td class="mdescRight">Cholesky decompose of matrix. Because it is required that input matrix should be symmetric, it is only the lower triangular part that will be used for the decompositon. The upper triangular part won't be read. It requires that all the values are NON-NULL. This is the dense representation of the matrix where the matrix elements are indexed by the row index.  <a href="#a4e4aeeb2f56f59f89fffe3049089ed23">More...</a><br /></td></tr>
+<tr class="separator:a4e4aeeb2f56f59f89fffe3049089ed23"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a13be8579794a2460c8727b116c73163c"><td class="memItemLeft" align="right" valign="top">matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a13be8579794a2460c8727b116c73163c">matrix_cholesky</a> (text matrix_in, text in_args, text matrix_out_prefix)</td></tr>
+<tr class="separator:a13be8579794a2460c8727b116c73163c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac9cfb05c9ab8e4daf35ba65b06f85d8d"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#ac9cfb05c9ab8e4daf35ba65b06f85d8d">matrix_cholesky</a> (text message)</td></tr>
+<tr class="separator:ac9cfb05c9ab8e4daf35ba65b06f85d8d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2d1154d0e461d7e45b936b15d192ecb0"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a2d1154d0e461d7e45b936b15d192ecb0">matrix_cholesky</a> ()</td></tr>
+<tr class="separator:a2d1154d0e461d7e45b936b15d192ecb0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac656a3a1e0008af89af9d4af44467407"><td class="memItemLeft" align="right" valign="top">matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#ac656a3a1e0008af89af9d4af44467407">matrix_qr</a> (text matrix_in, text in_args, text matrix_out_prefix, text out_args)</td></tr>
+<tr class="memdesc:ac656a3a1e0008af89af9d4af44467407"><td class="mdescLeft">&#160;</td><td class="mdescRight">QR decompose of matrix. It requires that all the values are NON-NULL. This is the dense representation of the matrix where the matrix elements are indexed by the row index.  <a href="#ac656a3a1e0008af89af9d4af44467407">More...</a><br /></td></tr>
+<tr class="separator:ac656a3a1e0008af89af9d4af44467407"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad7b68aacf626bed0c5f2a37be63848e4"><td class="memItemLeft" align="right" valign="top">matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#ad7b68aacf626bed0c5f2a37be63848e4">matrix_qr</a> (text matrix_in, text in_args, text matrix_out_prefix)</td></tr>
+<tr class="separator:ad7b68aacf626bed0c5f2a37be63848e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a58a87beb5600e5a06f36ae1e083fe4cc"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a58a87beb5600e5a06f36ae1e083fe4cc">matrix_qr</a> (text message)</td></tr>
+<tr class="separator:a58a87beb5600e5a06f36ae1e083fe4cc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae66de066dfdafaba16575f58ab58376c"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#ae66de066dfdafaba16575f58ab58376c">matrix_qr</a> ()</td></tr>
+<tr class="separator:ae66de066dfdafaba16575f58ab58376c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3906a54d945b19672641ca08bef11e69"><td class="memItemLeft" align="right" valign="top">int8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a3906a54d945b19672641ca08bef11e69">matrix_rank</a> (text matrix_in, text in_args)</td></tr>
+<tr class="memdesc:a3906a54d945b19672641ca08bef11e69"><td class="mdescLeft">&#160;</td><td class="mdescRight">rank of matrix. It requires that all the values are NON-NULL. This is the dense representation of the matrix where the matrix elements are indexed by the row index.  <a href="#a3906a54d945b19672641ca08bef11e69">More...</a><br /></td></tr>
+<tr class="separator:a3906a54d945b19672641ca08bef11e69"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aef438cede80c62cdd8126a77b7bd86c7"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#aef438cede80c62cdd8126a77b7bd86c7">matrix_rank</a> (text message)</td></tr>
+<tr class="separator:aef438cede80c62cdd8126a77b7bd86c7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8613f342735ddb02a8b1d3585a569f26"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a8613f342735ddb02a8b1d3585a569f26">matrix_rank</a> ()</td></tr>
+<tr class="separator:a8613f342735ddb02a8b1d3585a569f26"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad87178a3e1721ee05589817cb598d6ec"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#ad87178a3e1721ee05589817cb598d6ec">matrix_nuclear_norm</a> (text matrix_in, text in_args)</td></tr>
+<tr class="memdesc:ad87178a3e1721ee05589817cb598d6ec"><td class="mdescLeft">&#160;</td><td class="mdescRight">nuclear norm of matrix. It requires that all the values are NON-NULL. This is the dense representation of the matrix where the matrix elements are indexed by the row index.  <a href="#ad87178a3e1721ee05589817cb598d6ec">More...</a><br /></td></tr>
+<tr class="separator:ad87178a3e1721ee05589817cb598d6ec"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af37ef69921ecb4d667ebf65a3901ad4c"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#af37ef69921ecb4d667ebf65a3901ad4c">matrix_nuclear_norm</a> (text message)</td></tr>
+<tr class="separator:af37ef69921ecb4d667ebf65a3901ad4c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae90888a1b50fa901966ca2b9975f4ada"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#ae90888a1b50fa901966ca2b9975f4ada">matrix_nuclear_norm</a> ()</td></tr>
+<tr class="separator:ae90888a1b50fa901966ca2b9975f4ada"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4d267c1d4a4869414c880ea18d44a260"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a4d267c1d4a4869414c880ea18d44a260">__matrix_vec_mult_in_mem</a> (float8[] vector, float8[][] matrix)</td></tr>
+<tr class="separator:a4d267c1d4a4869414c880ea18d44a260"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a86db6cbb11df1f7077540ce531b52399"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a86db6cbb11df1f7077540ce531b52399">__matrix_vec_mult_in_mem</a> (float8[] vector, float8[] matrix)</td></tr>
+<tr class="separator:a86db6cbb11df1f7077540ce531b52399"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaeacfbaf004310e36ebb8c4ce4ac601c"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#aaeacfbaf004310e36ebb8c4ce4ac601c">__row_fold</a> (float8[] row_in, integer[] pattern)</td></tr>
+<tr class="memdesc:aaeacfbaf004310e36ebb8c4ce4ac601c"><td class="mdescLeft">&#160;</td><td class="mdescRight">The function folds (through multiplication) array x according to the pattern in array y, producing an array of the same length as array y.  <a href="#aaeacfbaf004310e36ebb8c4ce4ac601c">More...</a><br /></td></tr>
+<tr class="separator:aaeacfbaf004310e36ebb8c4ce4ac601c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9c36379876228130e6d4d1bf858c695d"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a9c36379876228130e6d4d1bf858c695d">__bernoulli_vector</a> (integer dim, float8 pos_val, float8 neg_val, float8 prob, integer seed)</td></tr>
+<tr class="separator:a9c36379876228130e6d4d1bf858c695d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9ed5e603fa0924f08a7a9e5b3171768a"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a9ed5e603fa0924f08a7a9e5b3171768a">__bernoulli_vector</a> (integer dim)</td></tr>
+<tr class="separator:a9ed5e603fa0924f08a7a9e5b3171768a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a659d654fc2cd25e498ad83950e044b13"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a659d654fc2cd25e498ad83950e044b13">__uniform_vector</a> (integer dim, float8 a, float8 b, integer seed)</td></tr>
+<tr class="separator:a659d654fc2cd25e498ad83950e044b13"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a69a8dcfcacf6d5d362e26d74192cea92"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a69a8dcfcacf6d5d362e26d74192cea92">__uniform_vector</a> (integer dim, float8 a, float8 b)</td></tr>
+<tr class="separator:a69a8dcfcacf6d5d362e26d74192cea92"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1545c36760a94943c2e1aeca23f1db84"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a1545c36760a94943c2e1aeca23f1db84">__normal_vector</a> (integer dim, float8 mu, float8 sigma, integer seed)</td></tr>
+<tr class="separator:a1545c36760a94943c2e1aeca23f1db84"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a32e4cb006c85a878f6054fae7a41b135"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a32e4cb006c85a878f6054fae7a41b135">__normal_vector</a> (integer dim, float8 mu, float8 sigma)</td></tr>
+<tr class="separator:a32e4cb006c85a878f6054fae7a41b135"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a845a3e8b711a3ad64103a2c0442f7baf"><td class="memItemLeft" align="right" valign="top">integer []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a845a3e8b711a3ad64103a2c0442f7baf">__rand_vector</a> (integer dim)</td></tr>
+<tr class="separator:a845a3e8b711a3ad64103a2c0442f7baf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a049ad6b2bb6a728539fb49e4e6610233"><td class="memItemLeft" align="right" valign="top">integer []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a049ad6b2bb6a728539fb49e4e6610233">__rand_block</a> (integer row_dim, integer col_dim)</td></tr>
+<tr class="separator:a049ad6b2bb6a728539fb49e4e6610233"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5b183fd27db62e94f9275dd6ca8077c3"><td class="memItemLeft" align="right" valign="top">integer []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a5b183fd27db62e94f9275dd6ca8077c3">__rand_block</a> (integer dim)</td></tr>
+<tr class="separator:a5b183fd27db62e94f9275dd6ca8077c3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a461bf9972c8b132d6f21a1de19fd4f40"><td class="memItemLeft" align="right" valign="top">set&lt; float8[]&gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a461bf9972c8b132d6f21a1de19fd4f40">__matrix_row_split</a> (float8[] row_in, integer size)</td></tr>
+<tr class="separator:a461bf9972c8b132d6f21a1de19fd4f40"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a04809ad9a25c7cf84afd0253fa825d6c"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a04809ad9a25c7cf84afd0253fa825d6c">__matrix_densify_sfunc</a> (float8[] state, integer col_dim, integer col_id, float8 val)</td></tr>
+<tr class="separator:a04809ad9a25c7cf84afd0253fa825d6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a10a095fb37e4505d38c926a2a390e72f"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a10a095fb37e4505d38c926a2a390e72f">__matrix_densify_agg</a> (integer, integer, float8)</td></tr>
+<tr class="separator:a10a095fb37e4505d38c926a2a390e72f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a998820afa3721fa1119532dc76801d18"><td class="memItemLeft" align="right" valign="top">anyarray&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a998820afa3721fa1119532dc76801d18">__array_abs_add_sfunc</a> (anyarray x, anyarray y)</td></tr>
+<tr class="separator:a998820afa3721fa1119532dc76801d18"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab905d4447072594f1af9c2bd954bba90"><td class="memItemLeft" align="right" valign="top">aggregate anyarray&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#ab905d4447072594f1af9c2bd954bba90">__matrix_column_abs_sum_agg</a> (anyarray)</td></tr>
+<tr class="separator:ab905d4447072594f1af9c2bd954bba90"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a320f5ca4aacb21d56ae2e5eebc908835"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a320f5ca4aacb21d56ae2e5eebc908835">__matrix_blockize_sfunc</a> (float8[] state, integer row_id, float8[] row_vec, integer rsize)</td></tr>
+<tr class="separator:a320f5ca4aacb21d56ae2e5eebc908835"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acc0ca1d652b5bd1ad6ffe658bc45b758"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#acc0ca1d652b5bd1ad6ffe658bc45b758">__matrix_blockize_agg</a> (integer, float8[], integer)</td></tr>
+<tr class="separator:acc0ca1d652b5bd1ad6ffe658bc45b758"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a66142991fa1c3abc0c1b1327002743ce"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a66142991fa1c3abc0c1b1327002743ce">__matrix_unblockize_sfunc</a> (float8[] state, integer total_col_dim, integer col_id, float8[] row_vec)</td></tr>
+<tr class="separator:a66142991fa1c3abc0c1b1327002743ce"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9040650f804ace7108c0bca001ed6fae"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a9040650f804ace7108c0bca001ed6fae">__matrix_unblockize_agg</a> (integer, integer, float8[])</td></tr>
+<tr class="separator:a9040650f804ace7108c0bca001ed6fae"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad16c824212e369760b9fb8ea658eac8c"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#ad16c824212e369760b9fb8ea658eac8c">matrix_mem_mult</a> (float[] matrix_a, float[] matrix_b, boolean trans_b)</td></tr>
+<tr class="separator:ad16c824212e369760b9fb8ea658eac8c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a91383f59dcb8b7ca2fba89ea350d113b"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a91383f59dcb8b7ca2fba89ea350d113b">matrix_mem_mult</a> (float[] matrix_a, float[] matrix_b)</td></tr>
+<tr class="separator:a91383f59dcb8b7ca2fba89ea350d113b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0731901b985a90c3aa2f686a7ce95978"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a0731901b985a90c3aa2f686a7ce95978">matrix_mem_trans</a> (float[] matrix)</td></tr>
+<tr class="separator:a0731901b985a90c3aa2f686a7ce95978"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a634478f746232cb12f3c46cbb2c20837"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a634478f746232cb12f3c46cbb2c20837">__matrix_mem_sum_sfunc</a> (float[] state, float[] matrix)</td></tr>
+<tr class="separator:a634478f746232cb12f3c46cbb2c20837"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa9f91e48c5890026fc35e65722bb6a0b"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#aa9f91e48c5890026fc35e65722bb6a0b">__matrix_mem_sum</a> (float8[])</td></tr>
+<tr class="separator:aa9f91e48c5890026fc35e65722bb6a0b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae4176a88e13c09362af1e4c1afd1f12b"><td class="memItemLeft" align="right" valign="top">matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#ae4176a88e13c09362af1e4c1afd1f12b">__matrix_column_to_array_format</a> (text matrix_in, text row_id, text matrix_out, boolean istemp)</td></tr>
+<tr class="separator:ae4176a88e13c09362af1e4c1afd1f12b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa63cfd84aa33c87ad16f52dc7f642848"><td class="memItemLeft" align="right" valign="top">matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#aa63cfd84aa33c87ad16f52dc7f642848">matrix_blockize</a> (text matrix_in, text in_args, integer rsize, integer csize, text matrix_out, text out_args)</td></tr>
+<tr class="separator:aa63cfd84aa33c87ad16f52dc7f642848"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8f5cd60132d738f440dffef007476b91"><td class="memItemLeft" align="right" valign="top">matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a8f5cd60132d738f440dffef007476b91">matrix_blockize</a> (text matrix_in, text in_args, integer rsize, integer csize, text matrix_out)</td></tr>
+<tr class="separator:a8f5cd60132d738f440dffef007476b91"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0a199e7cf9e56acd6a7f3fd78e73fa22"><td class="memItemLeft" align="right" valign="top">matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a0a199e7cf9e56acd6a7f3fd78e73fa22">matrix_unblockize</a> (text matrix_in, text in_args, text matrix_out, text out_args)</td></tr>
+<tr class="separator:a0a199e7cf9e56acd6a7f3fd78e73fa22"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a01ea5d175f37efba0cedbba6ade0f7bd"><td class="memItemLeft" align="right" valign="top">set&lt; float8[]&gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a01ea5d175f37efba0cedbba6ade0f7bd">__matrix_unnest_block</a> (float8[] block)</td></tr>
+<tr class="separator:a01ea5d175f37efba0cedbba6ade0f7bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac8430e6b3e2595ec2f13bbc98609ebbb"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#ac8430e6b3e2595ec2f13bbc98609ebbb">__matrix_compose_dense_transition</a> (float8[] state, integer numrows, integer row_id, float8[] x)</td></tr>
+<tr class="separator:ac8430e6b3e2595ec2f13bbc98609ebbb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2e0fda0e0ef7fc7d1669207d86667251"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a2e0fda0e0ef7fc7d1669207d86667251">__matrix_compose_sparse_transition</a> (float8[] state, integer numrows, integer numcols, integer row_id, integer col_id, float8 x)</td></tr>
+<tr class="separator:a2e0fda0e0ef7fc7d1669207d86667251"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a067b397a47438e993a1b1577744e0cf6"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a067b397a47438e993a1b1577744e0cf6">__matrix_compose_merge</a> (float8[] stateleft, float8[] stateright)</td></tr>
+<tr class="separator:a067b397a47438e993a1b1577744e0cf6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad62966b094a7c4ce9c5e0c3b6679e4d1"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#ad62966b094a7c4ce9c5e0c3b6679e4d1">__matrix_inv_final</a> (float8[] state)</td></tr>
+<tr class="separator:ad62966b094a7c4ce9c5e0c3b6679e4d1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1fecf03b9cb3df7423ce40e24a86c511"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a1fecf03b9cb3df7423ce40e24a86c511">__matrix_pinv_final</a> (float8[] state)</td></tr>
+<tr class="separator:a1fecf03b9cb3df7423ce40e24a86c511"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac113f89fe7f51491c8223480433495e5"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#ac113f89fe7f51491c8223480433495e5">__matrix_eigen_final</a> (float8[] state)</td></tr>
+<tr class="separator:ac113f89fe7f51491c8223480433495e5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6b4ddaf2e9daf2452a016498c7f546fb"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a6b4ddaf2e9daf2452a016498c7f546fb">__matrix_cholesky_final</a> (float8[] state)</td></tr>
+<tr class="separator:a6b4ddaf2e9daf2452a016498c7f546fb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aad1de24406ecd7ec29b5aa2553373dfc"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#aad1de24406ecd7ec29b5aa2553373dfc">__matrix_qr_final</a> (float8[] state)</td></tr>
+<tr class="separator:aad1de24406ecd7ec29b5aa2553373dfc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abe950f847a36db534edc393f04d5fd28"><td class="memItemLeft" align="right" valign="top">int8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#abe950f847a36db534edc393f04d5fd28">__matrix_rank_final</a> (float8[] state)</td></tr>
+<tr class="separator:abe950f847a36db534edc393f04d5fd28"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a47ca9c941be86f88c4746744a6105e89"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a47ca9c941be86f88c4746744a6105e89">__matrix_lu_final</a> (float8[] state)</td></tr>
+<tr class="separator:a47ca9c941be86f88c4746744a6105e89"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7df499382f7b4ea9347f941cb049c738"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a7df499382f7b4ea9347f941cb049c738">__matrix_nuclear_norm_final</a> (float8[] state)</td></tr>
+<tr class="separator:a7df499382f7b4ea9347f941cb049c738"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2a42b415200e2970528ee6db0070aaec"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a2a42b415200e2970528ee6db0070aaec">__matrix_dense_inverse</a> (integer numrows, integer row_id, float8[] x)</td></tr>
+<tr class="memdesc:a2a42b415200e2970528ee6db0070aaec"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute inverse of a dense matrix.  <a href="#a2a42b415200e2970528ee6db0070aaec">More...</a><br /></td></tr>
+<tr class="separator:a2a42b415200e2970528ee6db0070aaec"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a91a74f848438f5376cb7e33b90f7f69a"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a91a74f848438f5376cb7e33b90f7f69a">__matrix_sparse_inverse</a> (integer numrows, integer numcols, integer row_id, integer col_id, float8 x)</td></tr>
+<tr class="memdesc:a91a74f848438f5376cb7e33b90f7f69a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute inverse of a sparse matrix.  <a href="#a91a74f848438f5376cb7e33b90f7f69a">More...</a><br /></td></tr>
+<tr class="separator:a91a74f848438f5376cb7e33b90f7f69a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac61111e1c209ec09a82a4370c6b2e5ad"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#ac61111e1c209ec09a82a4370c6b2e5ad">__matrix_dense_pinv</a> (integer numrows, integer row_id, float8[] x)</td></tr>
+<tr class="memdesc:ac61111e1c209ec09a82a4370c6b2e5ad"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute generalized inverse of a dense matrix.  <a href="#ac61111e1c209ec09a82a4370c6b2e5ad">More...</a><br /></td></tr>
+<tr class="separator:ac61111e1c209ec09a82a4370c6b2e5ad"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad1d693b401ca30e14052647d6c10b0b9"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#ad1d693b401ca30e14052647d6c10b0b9">__matrix_sparse_pinv</a> (integer numrows, integer numcols, integer row_id, integer col_id, float8 x)</td></tr>
+<tr class="memdesc:ad1d693b401ca30e14052647d6c10b0b9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute generalized inverse of a sparse matrix.  <a href="#ad1d693b401ca30e14052647d6c10b0b9">More...</a><br /></td></tr>
+<tr class="separator:ad1d693b401ca30e14052647d6c10b0b9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a226bfdc99ee7b87750eb1e34839ba40b"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a226bfdc99ee7b87750eb1e34839ba40b">__matrix_dense_eigen</a> (integer numrows, integer row_id, float8[] x)</td></tr>
+<tr class="memdesc:a226bfdc99ee7b87750eb1e34839ba40b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute eigen values of a dense matrix.  <a href="#a226bfdc99ee7b87750eb1e34839ba40b">More...</a><br /></td></tr>
+<tr class="separator:a226bfdc99ee7b87750eb1e34839ba40b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afc9506600ad539ffd0a342bdbd22c11d"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#afc9506600ad539ffd0a342bdbd22c11d">__matrix_sparse_eigen</a> (integer numrows, integer numcols, integer row_id, integer col_id, float8 x)</td></tr>
+<tr class="memdesc:afc9506600ad539ffd0a342bdbd22c11d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute inverse of a sparse matrix.  <a href="#afc9506600ad539ffd0a342bdbd22c11d">More...</a><br /></td></tr>
+<tr class="separator:afc9506600ad539ffd0a342bdbd22c11d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aafdac25e2489777fa349c02272a52afe"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#aafdac25e2489777fa349c02272a52afe">__matrix_dense_cholesky</a> (integer numrows, integer row_id, float8[] x)</td></tr>
+<tr class="memdesc:aafdac25e2489777fa349c02272a52afe"><td class="mdescLeft">&#160;</td><td class="mdescRight">Cholesky decompose of a dense matrix.  <a href="#aafdac25e2489777fa349c02272a52afe">More...</a><br /></td></tr>
+<tr class="separator:aafdac25e2489777fa349c02272a52afe"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af84acb7ebaa37616da8f5ad9f443cb23"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#af84acb7ebaa37616da8f5ad9f443cb23">__matrix_sparse_cholesky</a> (integer numrows, integer numcols, integer row_id, integer col_id, float8 x)</td></tr>
+<tr class="memdesc:af84acb7ebaa37616da8f5ad9f443cb23"><td class="mdescLeft">&#160;</td><td class="mdescRight">Cholesky decompose of a sparse matrix.  <a href="#af84acb7ebaa37616da8f5ad9f443cb23">More...</a><br /></td></tr>
+<tr class="separator:af84acb7ebaa37616da8f5ad9f443cb23"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab5ab1aca1133bf650a53d53a0fae226c"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#ab5ab1aca1133bf650a53d53a0fae226c">__matrix_dense_qr</a> (integer numrows, integer row_id, float8[] x)</td></tr>
+<tr class="memdesc:ab5ab1aca1133bf650a53d53a0fae226c"><td class="mdescLeft">&#160;</td><td class="mdescRight">QR decompose of a dense matrix.  <a href="#ab5ab1aca1133bf650a53d53a0fae226c">More...</a><br /></td></tr>
+<tr class="separator:ab5ab1aca1133bf650a53d53a0fae226c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2379145bebdb037b482836ac5e592119"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a2379145bebdb037b482836ac5e592119">__matrix_sparse_qr</a> (integer numrows, integer numcols, integer row_id, integer col_id, float8 x)</td></tr>
+<tr class="memdesc:a2379145bebdb037b482836ac5e592119"><td class="mdescLeft">&#160;</td><td class="mdescRight">QR decompose of a sparse matrix.  <a href="#a2379145bebdb037b482836ac5e592119">More...</a><br /></td></tr>
+<tr class="separator:a2379145bebdb037b482836ac5e592119"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a65f0ffed59f979f066feba4b7640a11f"><td class="memItemLeft" align="right" valign="top">aggregate int8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a65f0ffed59f979f066feba4b7640a11f">__matrix_dense_rank</a> (integer numrows, integer row_id, float8[] x)</td></tr>
+<tr class="memdesc:a65f0ffed59f979f066feba4b7640a11f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute rank of a dense matrix.  <a href="#a65f0ffed59f979f066feba4b7640a11f">More...</a><br /></td></tr>
+<tr class="separator:a65f0ffed59f979f066feba4b7640a11f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5e09639f4ce3b62338c421635b1d9e3f"><td class="memItemLeft" align="right" valign="top">aggregate int8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a5e09639f4ce3b62338c421635b1d9e3f">__matrix_sparse_rank</a> (integer numrows, integer numcols, integer row_id, integer col_id, float8 x)</td></tr>
+<tr class="memdesc:a5e09639f4ce3b62338c421635b1d9e3f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute rank of a sparse matrix.  <a href="#a5e09639f4ce3b62338c421635b1d9e3f">More...</a><br /></td></tr>
+<tr class="separator:a5e09639f4ce3b62338c421635b1d9e3f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aabb7d39f86fa8442cb6893f7a51f1f07"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#aabb7d39f86fa8442cb6893f7a51f1f07">__matrix_dense_lu</a> (integer numrows, integer row_id, float8[] x)</td></tr>
+<tr class="memdesc:aabb7d39f86fa8442cb6893f7a51f1f07"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute full pivoting LU decomposition of a dense matrix.  <a href="#aabb7d39f86fa8442cb6893f7a51f1f07">More...</a><br /></td></tr>
+<tr class="separator:aabb7d39f86fa8442cb6893f7a51f1f07"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4df2e2056385af5f3f236613bca47083"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a4df2e2056385af5f3f236613bca47083">__matrix_sparse_lu</a> (integer numrows, integer numcols, integer row_id, integer col_id, float8 x)</td></tr>
+<tr class="memdesc:a4df2e2056385af5f3f236613bca47083"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute full pivoting LU decomposition of a sparse matrix.  <a href="#a4df2e2056385af5f3f236613bca47083">More...</a><br /></td></tr>
+<tr class="separator:a4df2e2056385af5f3f236613bca47083"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a86e1545c3a5d9f83e3eeb374419f181b"><td class="memItemLeft" align="right" valign="top">aggregate float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a86e1545c3a5d9f83e3eeb374419f181b">__matrix_dense_nuclear_norm</a> (integer numrows, integer row_id, float8[] x)</td></tr>
+<tr class="memdesc:a86e1545c3a5d9f83e3eeb374419f181b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute nuclear norm of a dense matrix.  <a href="#a86e1545c3a5d9f83e3eeb374419f181b">More...</a><br /></td></tr>
+<tr class="separator:a86e1545c3a5d9f83e3eeb374419f181b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8823870472e1de1b090694b3a388e41b"><td class="memItemLeft" align="right" valign="top">aggregate float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="matrix__ops_8sql__in.html#a8823870472e1de1b090694b3a388e41b">__matrix_sparse_nuclear_norm</a> (integer numrows, integer numcols, integer row_id, integer col_id, float8 x)</td></tr>
+<tr class="memdesc:a8823870472e1de1b090694b3a388e41b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute nuclear norm of a sparse matrix.  <a href="#a8823870472e1de1b090694b3a388e41b">More...</a><br /></td></tr>
+<tr class="separator:a8823870472e1de1b090694b3a388e41b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><dl class="section date"><dt>Date</dt><dd>April 2011 </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="a998820afa3721fa1119532dc76801d18"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a998820afa3721fa1119532dc76801d18">&#9670;&nbsp;</a></span>__array_abs_add_sfunc()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">anyarray __array_abs_add_sfunc </td>
+          <td>(</td>
+          <td class="paramtype">anyarray&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">anyarray&#160;</td>
+          <td class="paramname"><em>y</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a9c36379876228130e6d4d1bf858c695d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9c36379876228130e6d4d1bf858c695d">&#9670;&nbsp;</a></span>__bernoulli_vector() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __bernoulli_vector </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>pos_val</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>neg_val</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>prob</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>seed</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a9ed5e603fa0924f08a7a9e5b3171768a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9ed5e603fa0924f08a7a9e5b3171768a">&#9670;&nbsp;</a></span>__bernoulli_vector() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __bernoulli_vector </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>dim</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="acc0ca1d652b5bd1ad6ffe658bc45b758"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acc0ca1d652b5bd1ad6ffe658bc45b758">&#9670;&nbsp;</a></span>__matrix_blockize_agg()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] __matrix_blockize_agg </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a320f5ca4aacb21d56ae2e5eebc908835"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a320f5ca4aacb21d56ae2e5eebc908835">&#9670;&nbsp;</a></span>__matrix_blockize_sfunc()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __matrix_blockize_sfunc </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>row_vec</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>rsize</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a6b4ddaf2e9daf2452a016498c7f546fb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6b4ddaf2e9daf2452a016498c7f546fb">&#9670;&nbsp;</a></span>__matrix_cholesky_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __matrix_cholesky_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab905d4447072594f1af9c2bd954bba90"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab905d4447072594f1af9c2bd954bba90">&#9670;&nbsp;</a></span>__matrix_column_abs_sum_agg()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate anyarray __matrix_column_abs_sum_agg </td>
+          <td>(</td>
+          <td class="paramtype">anyarray&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae4176a88e13c09362af1e4c1afd1f12b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae4176a88e13c09362af1e4c1afd1f12b">&#9670;&nbsp;</a></span>__matrix_column_to_array_format()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">matrix_result __matrix_column_to_array_format </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>istemp</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac8430e6b3e2595ec2f13bbc98609ebbb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac8430e6b3e2595ec2f13bbc98609ebbb">&#9670;&nbsp;</a></span>__matrix_compose_dense_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __matrix_compose_dense_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>numrows</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a067b397a47438e993a1b1577744e0cf6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a067b397a47438e993a1b1577744e0cf6">&#9670;&nbsp;</a></span>__matrix_compose_merge()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __matrix_compose_merge </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>stateleft</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>stateright</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a2e0fda0e0ef7fc7d1669207d86667251"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2e0fda0e0ef7fc7d1669207d86667251">&#9670;&nbsp;</a></span>__matrix_compose_sparse_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __matrix_compose_sparse_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>numrows</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>numcols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>col_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aafdac25e2489777fa349c02272a52afe"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aafdac25e2489777fa349c02272a52afe">&#9670;&nbsp;</a></span>__matrix_dense_cholesky()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] __matrix_dense_cholesky </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>numrows</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a226bfdc99ee7b87750eb1e34839ba40b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a226bfdc99ee7b87750eb1e34839ba40b">&#9670;&nbsp;</a></span>__matrix_dense_eigen()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] __matrix_dense_eigen </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>numrows</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a2a42b415200e2970528ee6db0070aaec"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2a42b415200e2970528ee6db0070aaec">&#9670;&nbsp;</a></span>__matrix_dense_inverse()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] __matrix_dense_inverse </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>numrows</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aabb7d39f86fa8442cb6893f7a51f1f07"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aabb7d39f86fa8442cb6893f7a51f1f07">&#9670;&nbsp;</a></span>__matrix_dense_lu()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] __matrix_dense_lu </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>numrows</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a86e1545c3a5d9f83e3eeb374419f181b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a86e1545c3a5d9f83e3eeb374419f181b">&#9670;&nbsp;</a></span>__matrix_dense_nuclear_norm()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 __matrix_dense_nuclear_norm </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>numrows</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac61111e1c209ec09a82a4370c6b2e5ad"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac61111e1c209ec09a82a4370c6b2e5ad">&#9670;&nbsp;</a></span>__matrix_dense_pinv()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] __matrix_dense_pinv </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>numrows</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab5ab1aca1133bf650a53d53a0fae226c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab5ab1aca1133bf650a53d53a0fae226c">&#9670;&nbsp;</a></span>__matrix_dense_qr()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] __matrix_dense_qr </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>numrows</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a65f0ffed59f979f066feba4b7640a11f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a65f0ffed59f979f066feba4b7640a11f">&#9670;&nbsp;</a></span>__matrix_dense_rank()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate int8 __matrix_dense_rank </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>numrows</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a10a095fb37e4505d38c926a2a390e72f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a10a095fb37e4505d38c926a2a390e72f">&#9670;&nbsp;</a></span>__matrix_densify_agg()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] __matrix_densify_agg </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a04809ad9a25c7cf84afd0253fa825d6c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a04809ad9a25c7cf84afd0253fa825d6c">&#9670;&nbsp;</a></span>__matrix_densify_sfunc()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __matrix_densify_sfunc </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>col_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>col_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>val</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac113f89fe7f51491c8223480433495e5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac113f89fe7f51491c8223480433495e5">&#9670;&nbsp;</a></span>__matrix_eigen_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __matrix_eigen_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ad62966b094a7c4ce9c5e0c3b6679e4d1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad62966b094a7c4ce9c5e0c3b6679e4d1">&#9670;&nbsp;</a></span>__matrix_inv_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __matrix_inv_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a47ca9c941be86f88c4746744a6105e89"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a47ca9c941be86f88c4746744a6105e89">&#9670;&nbsp;</a></span>__matrix_lu_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __matrix_lu_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa9f91e48c5890026fc35e65722bb6a0b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa9f91e48c5890026fc35e65722bb6a0b">&#9670;&nbsp;</a></span>__matrix_mem_sum()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] __matrix_mem_sum </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[]</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a634478f746232cb12f3c46cbb2c20837"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a634478f746232cb12f3c46cbb2c20837">&#9670;&nbsp;</a></span>__matrix_mem_sum_sfunc()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __matrix_mem_sum_sfunc </td>
+          <td>(</td>
+          <td class="paramtype">float []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float []&#160;</td>
+          <td class="paramname"><em>matrix</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7df499382f7b4ea9347f941cb049c738"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7df499382f7b4ea9347f941cb049c738">&#9670;&nbsp;</a></span>__matrix_nuclear_norm_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 __matrix_nuclear_norm_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1fecf03b9cb3df7423ce40e24a86c511"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1fecf03b9cb3df7423ce40e24a86c511">&#9670;&nbsp;</a></span>__matrix_pinv_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __matrix_pinv_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aad1de24406ecd7ec29b5aa2553373dfc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aad1de24406ecd7ec29b5aa2553373dfc">&#9670;&nbsp;</a></span>__matrix_qr_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __matrix_qr_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="abe950f847a36db534edc393f04d5fd28"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abe950f847a36db534edc393f04d5fd28">&#9670;&nbsp;</a></span>__matrix_rank_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int8 __matrix_rank_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a461bf9972c8b132d6f21a1de19fd4f40"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a461bf9972c8b132d6f21a1de19fd4f40">&#9670;&nbsp;</a></span>__matrix_row_split()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">set&lt;float8[]&gt; __matrix_row_split </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>row_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>size</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="af84acb7ebaa37616da8f5ad9f443cb23"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af84acb7ebaa37616da8f5ad9f443cb23">&#9670;&nbsp;</a></span>__matrix_sparse_cholesky()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] __matrix_sparse_cholesky </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>numrows</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>numcols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>col_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="afc9506600ad539ffd0a342bdbd22c11d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afc9506600ad539ffd0a342bdbd22c11d">&#9670;&nbsp;</a></span>__matrix_sparse_eigen()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] __matrix_sparse_eigen </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>numrows</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>numcols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>col_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a91a74f848438f5376cb7e33b90f7f69a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a91a74f848438f5376cb7e33b90f7f69a">&#9670;&nbsp;</a></span>__matrix_sparse_inverse()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] __matrix_sparse_inverse </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>numrows</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>numcols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>col_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a4df2e2056385af5f3f236613bca47083"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4df2e2056385af5f3f236613bca47083">&#9670;&nbsp;</a></span>__matrix_sparse_lu()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] __matrix_sparse_lu </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>numrows</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>numcols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>col_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8823870472e1de1b090694b3a388e41b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8823870472e1de1b090694b3a388e41b">&#9670;&nbsp;</a></span>__matrix_sparse_nuclear_norm()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 __matrix_sparse_nuclear_norm </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>numrows</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>numcols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>col_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ad1d693b401ca30e14052647d6c10b0b9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad1d693b401ca30e14052647d6c10b0b9">&#9670;&nbsp;</a></span>__matrix_sparse_pinv()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] __matrix_sparse_pinv </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>numrows</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>numcols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>col_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a2379145bebdb037b482836ac5e592119"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2379145bebdb037b482836ac5e592119">&#9670;&nbsp;</a></span>__matrix_sparse_qr()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] __matrix_sparse_qr </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>numrows</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>numcols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>col_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5e09639f4ce3b62338c421635b1d9e3f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5e09639f4ce3b62338c421635b1d9e3f">&#9670;&nbsp;</a></span>__matrix_sparse_rank()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate int8 __matrix_sparse_rank </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>numrows</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>numcols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>col_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a9040650f804ace7108c0bca001ed6fae"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9040650f804ace7108c0bca001ed6fae">&#9670;&nbsp;</a></span>__matrix_unblockize_agg()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] __matrix_unblockize_agg </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[]&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a66142991fa1c3abc0c1b1327002743ce"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a66142991fa1c3abc0c1b1327002743ce">&#9670;&nbsp;</a></span>__matrix_unblockize_sfunc()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __matrix_unblockize_sfunc </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>total_col_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>col_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>row_vec</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a01ea5d175f37efba0cedbba6ade0f7bd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a01ea5d175f37efba0cedbba6ade0f7bd">&#9670;&nbsp;</a></span>__matrix_unnest_block()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">set&lt;float8[]&gt; __matrix_unnest_block </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>block</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a4d267c1d4a4869414c880ea18d44a260"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4d267c1d4a4869414c880ea18d44a260">&#9670;&nbsp;</a></span>__matrix_vec_mult_in_mem() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __matrix_vec_mult_in_mem </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>vector</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>matrix</em>[][]&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a86db6cbb11df1f7077540ce531b52399"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a86db6cbb11df1f7077540ce531b52399">&#9670;&nbsp;</a></span>__matrix_vec_mult_in_mem() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __matrix_vec_mult_in_mem </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>vector</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>matrix</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1545c36760a94943c2e1aeca23f1db84"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1545c36760a94943c2e1aeca23f1db84">&#9670;&nbsp;</a></span>__normal_vector() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __normal_vector </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>mu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>sigma</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>seed</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a32e4cb006c85a878f6054fae7a41b135"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a32e4cb006c85a878f6054fae7a41b135">&#9670;&nbsp;</a></span>__normal_vector() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __normal_vector </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>mu</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>sigma</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a049ad6b2bb6a728539fb49e4e6610233"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a049ad6b2bb6a728539fb49e4e6610233">&#9670;&nbsp;</a></span>__rand_block() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">integer [] __rand_block </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>col_dim</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5b183fd27db62e94f9275dd6ca8077c3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5b183fd27db62e94f9275dd6ca8077c3">&#9670;&nbsp;</a></span>__rand_block() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">integer [] __rand_block </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>dim</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a845a3e8b711a3ad64103a2c0442f7baf"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a845a3e8b711a3ad64103a2c0442f7baf">&#9670;&nbsp;</a></span>__rand_vector()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">integer [] __rand_vector </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>dim</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aaeacfbaf004310e36ebb8c4ce4ac601c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aaeacfbaf004310e36ebb8c4ce4ac601c">&#9670;&nbsp;</a></span>__row_fold()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __row_fold </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>row_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>pattern</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">row</td><td>Array x </td></tr>
+    <tr><td class="paramname">pattern</td><td>Array y </td></tr>
+    <tr><td class="paramname">folded</td><td>array </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a659d654fc2cd25e498ad83950e044b13"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a659d654fc2cd25e498ad83950e044b13">&#9670;&nbsp;</a></span>__uniform_vector() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __uniform_vector </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>a</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>b</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>seed</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a69a8dcfcacf6d5d362e26d74192cea92"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a69a8dcfcacf6d5d362e26d74192cea92">&#9670;&nbsp;</a></span>__uniform_vector() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __uniform_vector </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>a</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>b</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1cbb83dad451e7c36033c0f3df0a22e0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1cbb83dad451e7c36033c0f3df0a22e0">&#9670;&nbsp;</a></span>matrix_add() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">matrix_result matrix_add </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_a</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>a_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_b</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>b_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_args</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">matrix_a</td><td>Name of the table containing the first matrix </td></tr>
+    <tr><td class="paramname">a_row</td><td>Name of the column containing the row index for the first matrix </td></tr>
+    <tr><td class="paramname">a_col</td><td>Name of the column containing the column index for the first matrix </td></tr>
+    <tr><td class="paramname">a_val</td><td>Name of the column containing the matrix values for the first matrix </td></tr>
+    <tr><td class="paramname">matrix_b</td><td>Name of the table containing the second matrix </td></tr>
+    <tr><td class="paramname">b_row</td><td>Name of the column containing the row index for the second matrix </td></tr>
+    <tr><td class="paramname">b_col</td><td>Name of the column containing the column index for the second matrix </td></tr>
+    <tr><td class="paramname">b_val</td><td>Name of the column containing the matrix values for the second matrix </td></tr>
+    <tr><td class="paramname">matrix_out</td><td>Name of the table where to output the result matrix </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Name of the table containing the result matrix </dd></dl>
+
+</div>
+</div>
+<a id="a41caa30da3fe15625e33782884ca6060"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a41caa30da3fe15625e33782884ca6060">&#9670;&nbsp;</a></span>matrix_add() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">matrix_result matrix_add </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_a</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>a_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_b</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>b_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="af305d7f198954d3dabf1b47578ad8d81"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af305d7f198954d3dabf1b47578ad8d81">&#9670;&nbsp;</a></span>matrix_add() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_add </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a68b950ef082b7f0545ba1a926c9afe35"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a68b950ef082b7f0545ba1a926c9afe35">&#9670;&nbsp;</a></span>matrix_add() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_add </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a0cb243e18397fb101f1cf48d9872f805"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0cb243e18397fb101f1cf48d9872f805">&#9670;&nbsp;</a></span>matrix_block_mult()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">matrix_result matrix_block_mult </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_a</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>a_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_b</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>b_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_args</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="af84a929ab1558a06a5f8e9e500bf9051"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af84a929ab1558a06a5f8e9e500bf9051">&#9670;&nbsp;</a></span>matrix_block_square()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">matrix_result matrix_block_square </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>in_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_args</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5f096c3062218d0a6848ab1a22f3d5bb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5f096c3062218d0a6848ab1a22f3d5bb">&#9670;&nbsp;</a></span>matrix_block_trans()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">matrix_result matrix_block_trans </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>in_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_args</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa63cfd84aa33c87ad16f52dc7f642848"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa63cfd84aa33c87ad16f52dc7f642848">&#9670;&nbsp;</a></span>matrix_blockize() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">matrix_result matrix_blockize </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>in_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>rsize</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>csize</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_args</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8f5cd60132d738f440dffef007476b91"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8f5cd60132d738f440dffef007476b91">&#9670;&nbsp;</a></span>matrix_blockize() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">matrix_result matrix_blockize </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>in_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>rsize</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>csize</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a4e4aeeb2f56f59f89fffe3049089ed23"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4e4aeeb2f56f59f89fffe3049089ed23">&#9670;&nbsp;</a></span>matrix_cholesky() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">matrix_result matrix_cholesky </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>in_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out_prefix</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_args</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">matrix_in</td><td>Name of the table containing the input matrix </td></tr>
+    <tr><td class="paramname">matrix_out</td><td>Name of the table where to output the result matrix </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Name of the table containing the result matrix </dd></dl>
+
+</div>
+</div>
+<a id="a13be8579794a2460c8727b116c73163c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a13be8579794a2460c8727b116c73163c">&#9670;&nbsp;</a></span>matrix_cholesky() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">matrix_result matrix_cholesky </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>in_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out_prefix</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac9cfb05c9ab8e4daf35ba65b06f85d8d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac9cfb05c9ab8e4daf35ba65b06f85d8d">&#9670;&nbsp;</a></span>matrix_cholesky() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_cholesky </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a2d1154d0e461d7e45b936b15d192ecb0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2d1154d0e461d7e45b936b15d192ecb0">&#9670;&nbsp;</a></span>matrix_cholesky() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_cholesky </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7df10b8c7cf6a26cc297a6c39482d084"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7df10b8c7cf6a26cc297a6c39482d084">&#9670;&nbsp;</a></span>matrix_densify() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">matrix_result matrix_densify </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>in_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_args</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">matrix_in</td><td>Name of the table containing the input matrix </td></tr>
+    <tr><td class="paramname">in_row</td><td>Name of the column containing the row index for the input matrix </td></tr>
+    <tr><td class="paramname">in_col</td><td>Name of the column containing the column index for the input matrix </td></tr>
+    <tr><td class="paramname">in_val</td><td>Name of the column containing the matrix values for the input matrix </td></tr>
+    <tr><td class="paramname">matrix_out</td><td>Name of the table where to output the result matrix </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Name of the table containing the result matrix </dd></dl>
+
+</div>
+</div>
+<a id="a6d47b253d9f4a966c06bc011b52762ef"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6d47b253d9f4a966c06bc011b52762ef">&#9670;&nbsp;</a></span>matrix_densify() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">matrix_result matrix_densify </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>in_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a2440a8a698a41e31afd7517edba19a17"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2440a8a698a41e31afd7517edba19a17">&#9670;&nbsp;</a></span>matrix_densify() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_densify </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="adda0815232229bce7f88cfca9c99c2fb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adda0815232229bce7f88cfca9c99c2fb">&#9670;&nbsp;</a></span>matrix_densify() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_densify </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a642932bc5d60ee0ee29068e2c0438d19"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a642932bc5d60ee0ee29068e2c0438d19">&#9670;&nbsp;</a></span>matrix_diag() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">matrix_result matrix_diag </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>diag_elements</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_args</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">diag_elements</td><td>Name of the array containing the diagonal elements. It requaires Not NULL, Not empty, Not containing NULL elements </td></tr>
+    <tr><td class="paramname">matrix_out</td><td>Name of the table where to output the result diagonal matrix </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Name of the table containing the result diagonal matrix </dd></dl>
+
+</div>
+</div>
+<a id="ae3b60dc30259b5526c7be0d1a6a95c20"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae3b60dc30259b5526c7be0d1a6a95c20">&#9670;&nbsp;</a></span>matrix_diag() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">matrix_result matrix_diag </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>diag_elements</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="af05e66bbc871c4c24f569bf1b16f684b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af05e66bbc871c4c24f569bf1b16f684b">&#9670;&nbsp;</a></span>matrix_diag() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_diag </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a888d9ab690fed966da3722886e1c0ff7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a888d9ab690fed966da3722886e1c0ff7">&#9670;&nbsp;</a></span>matrix_diag() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_diag </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1905e1b687e45dacbef1e82097b538de"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1905e1b687e45dacbef1e82097b538de">&#9670;&nbsp;</a></span>matrix_eigen() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">matrix_result matrix_eigen </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>in_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_args</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">matrix_in</td><td>Name of the table containing the input matrix </td></tr>
+    <tr><td class="paramname">matrix_out</td><td>Name of the table where to output the result matrix </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Name of the table containing the result matrix </dd></dl>
+
+</div>
+</div>
+<a id="ae2ad35c91364d5ce4a94f7fd2aa6ce4b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae2ad35c91364d5ce4a94f7fd2aa6ce4b">&#9670;&nbsp;</a></span>matrix_eigen() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">matrix_result matrix_eigen </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>in_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac1d4021eccdee42c7a3d8fa953900f1e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac1d4021eccdee42c7a3d8fa953900f1e">&#9670;&nbsp;</a></span>matrix_eigen() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_eigen </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae25eb4b085772e283250ae1f3ace2cc6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae25eb4b085772e283250ae1f3ace2cc6">&#9670;&nbsp;</a></span>matrix_eigen() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_eigen </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa93181583456a1f23c3665c051742173"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa93181583456a1f23c3665c051742173">&#9670;&nbsp;</a></span>matrix_elem_mult() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">matrix_result matrix_elem_mult </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_a</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>a_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_b</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>b_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_args</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">matrix_a</td><td>Name of the table containing the first matrix </td></tr>
+    <tr><td class="paramname">a_row</td><td>Name of the column containing the row id for the first matrix </td></tr>
+    <tr><td class="paramname">a_col</td><td>Name of the column containing the column id for the first matrix </td></tr>
+    <tr><td class="paramname">a_val</td><td>Name of the column containing the matrix values for the first matrix </td></tr>
+    <tr><td class="paramname">matrix_b</td><td>Name of the table containing the second matrix </td></tr>
+    <tr><td class="paramname">b_row</td><td>Name of the column containing the row id for the second matrix </td></tr>
+    <tr><td class="paramname">b_col</td><td>Name of the column containing the column id for the second matrix </td></tr>
+    <tr><td class="paramname">b_val</td><td>Name of the column containing the matrix values for the second matrix </td></tr>
+    <tr><td class="paramname">matrix_out</td><td>Name of the table where to output the result matrix </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Name of the table containing the result matrix </dd></dl>
+
+</div>
+</div>
+<a id="a282716431d27998bebf44d496ccd82df"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a282716431d27998bebf44d496ccd82df">&#9670;&nbsp;</a></span>matrix_elem_mult() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">matrix_result matrix_elem_mult </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_a</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>a_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_b</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>b_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ad0ff6a550b1941ce0cc3057343ce6eef"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad0ff6a550b1941ce0cc3057343ce6eef">&#9670;&nbsp;</a></span>matrix_elem_mult() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_elem_mult </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a78e64fe103c3f22288445ae6dfe0c3a2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a78e64fe103c3f22288445ae6dfe0c3a2">&#9670;&nbsp;</a></span>matrix_elem_mult() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_elem_mult </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1f3b0f7a3bbbab7b22f8ae545cf46255"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1f3b0f7a3bbbab7b22f8ae545cf46255">&#9670;&nbsp;</a></span>matrix_extract_col() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] matrix_extract_col </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>in_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>index</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">matrix_in</td><td>Name of the table containing the matrix </td></tr>
+    <tr><td class="paramname">in_args</td><td>A string containing multiple named arguments of the form "name=value". This argument is used as a container for multiple parameters related to a single matrix. </td></tr>
+    <tr><td class="paramname">index</td><td>Column index for wanted. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Vector containing given column elements. </dd></dl>
+
+</div>
+</div>
+<a id="a1c5371cb5bc60dc48ba4a6cee805c30d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1c5371cb5bc60dc48ba4a6cee805c30d">&#9670;&nbsp;</a></span>matrix_extract_col() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_extract_col </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a98a695c4cf03ae60c654013ec08fdfe8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a98a695c4cf03ae60c654013ec08fdfe8">&#9670;&nbsp;</a></span>matrix_extract_col() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_extract_col </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7f85d65a21f193f5e77409a3dcd34b06"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7f85d65a21f193f5e77409a3dcd34b06">&#9670;&nbsp;</a></span>matrix_extract_diag() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float [] matrix_extract_diag </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>in_args</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">matrix_in</td><td>Name of the table containing the input matrix </td></tr>
+    <tr><td class="paramname">in_row</td><td>Name of the column containing the row index for the input matrix </td></tr>
+    <tr><td class="paramname">in_col</td><td>Name of the column containing the column index for the input matrix </td></tr>
+    <tr><td class="paramname">in_val</td><td>Name of the column containing the matrix values for the input matrix </td></tr>
+    <tr><td class="paramname">use_temp_table</td><td>Specify if use temp table for result </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Array of main diagonal </dd></dl>
+
+</div>
+</div>
+<a id="a8415b48d92a0523ebc4a3df4144fdd48"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8415b48d92a0523ebc4a3df4144fdd48">&#9670;&nbsp;</a></span>matrix_extract_diag() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_extract_diag </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="adce984af4adbd3ed1864c9427002ce93"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adce984af4adbd3ed1864c9427002ce93">&#9670;&nbsp;</a></span>matrix_extract_diag() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_extract_diag </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a61fef136d511ac92153223f590ee596f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a61fef136d511ac92153223f590ee596f">&#9670;&nbsp;</a></span>matrix_extract_row() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] matrix_extract_row </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>in_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>index</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">matrix_in</td><td>Name of the table containing the matrix </td></tr>
+    <tr><td class="paramname">in_args</td><td>A string containing multiple named arguments of the form "name=value". This argument is used as a container for multiple parameters related to a single matrix. </td></tr>
+    <tr><td class="paramname">index</td><td>Row index for wanted. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Vector containing given row elements. </dd></dl>
+
+</div>
+</div>
+<a id="a0b8c0815933d4d39a6ea7bc7fe951552"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0b8c0815933d4d39a6ea7bc7fe951552">&#9670;&nbsp;</a></span>matrix_extract_row() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_extract_row </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a65963c0f5721af6f785f65083152c64c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a65963c0f5721af6f785f65083152c64c">&#9670;&nbsp;</a></span>matrix_extract_row() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_extract_row </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="af4ce5b8872d28bd1d0e2e72af41db173"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af4ce5b8872d28bd1d0e2e72af41db173">&#9670;&nbsp;</a></span>matrix_identity() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">matrix_result matrix_identity </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_args</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">dim</td><td>Name of a integer specifing the dimensinality. It requaires Not NULL, dim &gt; 0. </td></tr>
+    <tr><td class="paramname">matrix_out</td><td>Name of the table where to output the result identity matrix </td></tr>
+    <tr><td class="paramname">out_args</td><td>Name-value pair string containing options for matrix_out </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Name of the table containing the result identity matrix </dd></dl>
+
+</div>
+</div>
+<a id="a9284b89b9c13e43c2492aa6c9a9a17c0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9284b89b9c13e43c2492aa6c9a9a17c0">&#9670;&nbsp;</a></span>matrix_identity() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">matrix_result matrix_identity </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac5e003d0385e3be5858529e592fa8aef"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac5e003d0385e3be5858529e592fa8aef">&#9670;&nbsp;</a></span>matrix_identity() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_identity </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab82476872e84430e9abc7a5485b4de9a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab82476872e84430e9abc7a5485b4de9a">&#9670;&nbsp;</a></span>matrix_identity() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_identity </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a0535b01f414f5d61153abca8b3cd94fa"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0535b01f414f5d61153abca8b3cd94fa">&#9670;&nbsp;</a></span>matrix_info() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_info </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a94c1c4f3fb88bb80344d53ee2cc3c981"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a94c1c4f3fb88bb80344d53ee2cc3c981">&#9670;&nbsp;</a></span>matrix_info() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_info </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a0176dd860f866c5e0899b32f471bc953"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0176dd860f866c5e0899b32f471bc953">&#9670;&nbsp;</a></span>matrix_inverse() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">matrix_result matrix_inverse </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>in_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_args</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">matrix_in</td><td>Name of the table containing the input matrix </td></tr>
+    <tr><td class="paramname">matrix_out</td><td>Name of the table where to output the result matrix </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Name of the table containing the result matrix </dd></dl>
+
+</div>
+</div>
+<a id="afee5dbac4040688e33f4bedb87af2d9e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afee5dbac4040688e33f4bedb87af2d9e">&#9670;&nbsp;</a></span>matrix_inverse() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">matrix_result matrix_inverse </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>in_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa344aec551796b20f22a276f5d8492f0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa344aec551796b20f22a276f5d8492f0">&#9670;&nbsp;</a></span>matrix_inverse() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_inverse </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a2725d030fc03dcfa3a9271940d800e7a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2725d030fc03dcfa3a9271940d800e7a">&#9670;&nbsp;</a></span>matrix_inverse() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_inverse </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a21a96e5933fd1094befc20051b0fb7b7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a21a96e5933fd1094befc20051b0fb7b7">&#9670;&nbsp;</a></span>matrix_lu() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">matrix_result matrix_lu </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>in_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out_prefix</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_args</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">matrix_in</td><td>Name of the table containing the input matrix </td></tr>
+    <tr><td class="paramname">matrix_p</td><td>Name of the table where to output the result p matrix </td></tr>
+    <tr><td class="paramname">matrix_l</td><td>Name of the table where to output the result l matrix </td></tr>
+    <tr><td class="paramname">matrix_u</td><td>Name of the table where to output the result u matrix </td></tr>
+    <tr><td class="paramname">matrix_q</td><td>Name of the table where to output the result q matrix </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Name of the table containing the result matrix </dd></dl>
+
+</div>
+</div>
+<a id="ac0cfa9628072628259b2a50fef12ef9c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac0cfa9628072628259b2a50fef12ef9c">&#9670;&nbsp;</a></span>matrix_lu() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">matrix_result matrix_lu </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>in_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out_prefix</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="acdb62ad5d8fcfaf80bcb553df4c57bcf"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acdb62ad5d8fcfaf80bcb553df4c57bcf">&#9670;&nbsp;</a></span>matrix_lu() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_lu </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa1609dc673ccae19bae8493030490f76"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa1609dc673ccae19bae8493030490f76">&#9670;&nbsp;</a></span>matrix_lu() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_lu </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a6aefe99d73608495150c1ac46cc9bcd6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6aefe99d73608495150c1ac46cc9bcd6">&#9670;&nbsp;</a></span>matrix_max() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">matrix_result matrix_max </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>in_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>fetch_index</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">matrix_in</td><td>Name of the table containing the matrix </td></tr>
+    <tr><td class="paramname">in_args</td><td>A string containing multiple named arguments of the form "name=value". This argument is used as a container for multiple parameters related to a single matrix. </td></tr>
+    <tr><td class="paramname">dim</td><td>Which dimension to collapse. 1 means row wise, and 2 means column wise </td></tr>
+    <tr><td class="paramname">matrix_out</td><td>Result matrix which contains one column: max, and another column: index if fetch_index is set. The type of column is array </td></tr>
+    <tr><td class="paramname">fetch_index</td><td>True when want to get corresponding index of max value. Default is false </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>matrix_out. </dd></dl>
+
+</div>
+</div>
+<a id="a738a759b0397a3a652ba76c5e2aea9a9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a738a759b0397a3a652ba76c5e2aea9a9">&#9670;&nbsp;</a></span>matrix_max() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">matrix_result matrix_max </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>in_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ad5101b99f8112074e95c76f008081741"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad5101b99f8112074e95c76f008081741">&#9670;&nbsp;</a></span>matrix_max() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_max </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a3f47e137a229cc32670461dee5fa3c7a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3f47e137a229cc32670461dee5fa3c7a">&#9670;&nbsp;</a></span>matrix_max() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_max </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aff618caaa8e3edc1b3f2465d04598a9d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aff618caaa8e3edc1b3f2465d04598a9d">&#9670;&nbsp;</a></span>matrix_mean() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] matrix_mean </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>in_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>dim</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">matrix_in</td><td>Name of the table containing the matrix </td></tr>
+    <tr><td class="paramname">in_args</td><td>Name-value pair string containing options for matrix_in </td></tr>
+    <tr><td class="paramname">dim</td><td>Which dimension to collapse. 1 means row wise, and 2 means column wise </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a21d94d92c4545bccb58234e8ee0bed2a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a21d94d92c4545bccb58234e8ee0bed2a">&#9670;&nbsp;</a></span>matrix_mean() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] matrix_mean </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>in_args</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae703f1bf36c4ff0771253db03d2cd7d2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae703f1bf36c4ff0771253db03d2cd7d2">&#9670;&nbsp;</a></span>matrix_mean() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_mean </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aef727e104b1c64c790bf0913caf78152"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aef727e104b1c64c790bf0913caf78152">&#9670;&nbsp;</a></span>matrix_mean() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_mean </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ad16c824212e369760b9fb8ea658eac8c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad16c824212e369760b9fb8ea658eac8c">&#9670;&nbsp;</a></span>matrix_mem_mult() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] matrix_mem_mult </td>
+          <td>(</td>
+          <td class="paramtype">float []&#160;</td>
+          <td class="paramname"><em>matrix_a</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float []&#160;</td>
+          <td class="paramname"><em>matrix_b</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>trans_b</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a91383f59dcb8b7ca2fba89ea350d113b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a91383f59dcb8b7ca2fba89ea350d113b">&#9670;&nbsp;</a></span>matrix_mem_mult() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] matrix_mem_mult </td>
+          <td>(</td>
+          <td class="paramtype">float []&#160;</td>
+          <td class="paramname"><em>matrix_a</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float []&#160;</td>
+          <td class="paramname"><em>matrix_b</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a0731901b985a90c3aa2f686a7ce95978"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0731901b985a90c3aa2f686a7ce95978">&#9670;&nbsp;</a></span>matrix_mem_trans()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] matrix_mem_trans </td>
+          <td>(</td>
+          <td class="paramtype">float []&#160;</td>
+          <td class="paramname"><em>matrix</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa27d69d09f5eb456eb326d4b5eda1a2a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa27d69d09f5eb456eb326d4b5eda1a2a">&#9670;&nbsp;</a></span>matrix_min() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">matrix_result matrix_min </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>in_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>fetch_index</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">matrix_in</td><td>Name of the table containing the matrix </td></tr>
+    <tr><td class="paramname">in_args</td><td>A string containing multiple named arguments of the form "name=value". This argument is used as a container for multiple parameters related to a single matrix. </td></tr>
+    <tr><td class="paramname">dim</td><td>Which dimension to collapse. 1 means row wise, and 2 means column wise </td></tr>
+    <tr><td class="paramname">matrix_out</td><td>Result matrix which contains one column: min, and another column: index if fetch_index is set. The type of column is array </td></tr>
+    <tr><td class="paramname">fetch_index</td><td>True when want to get corresponding index of min value. Default is false </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>matrix_out. </dd></dl>
+
+</div>
+</div>
+<a id="a6647bd00e4b853c2d7fbc9175f087ab9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6647bd00e4b853c2d7fbc9175f087ab9">&#9670;&nbsp;</a></span>matrix_min() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">matrix_result matrix_min </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>in_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7d2aee81366873b11104a5d4fe1e4c36"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7d2aee81366873b11104a5d4fe1e4c36">&#9670;&nbsp;</a></span>matrix_min() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_min </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ad777bc84ac4691172a90133825ce5301"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad777bc84ac4691172a90133825ce5301">&#9670;&nbsp;</a></span>matrix_min() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_min </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a83e1d5e2c8cd598084c6d21fdce83ae7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a83e1d5e2c8cd598084c6d21fdce83ae7">&#9670;&nbsp;</a></span>matrix_mult() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">matrix_result matrix_mult </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_a</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>a_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_b</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>b_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_args</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">matrix_a</td><td>Name of the table containing the first matrix </td></tr>
+    <tr><td class="paramname">a_row</td><td>Name of the column containing the row index for the first matrix </td></tr>
+    <tr><td class="paramname">a_col</td><td>Name of the column containing the column index for the first matrix </td></tr>
+    <tr><td class="paramname">a_val</td><td>Name of the column containing the matrix values for the first matrix </td></tr>
+    <tr><td class="paramname">a_trans</td><td>Boolean to indicate if first matrix should be transposed before multiplication </td></tr>
+    <tr><td class="paramname">matrix_b</td><td>Name of the table containing the second matrix </td></tr>
+    <tr><td class="paramname">b_row</td><td>Name of the column containing the row index for the second matrix </td></tr>
+    <tr><td class="paramname">b_col</td><td>Name of the column containing the column index for the second matrix </td></tr>
+    <tr><td class="paramname">b_val</td><td>Name of the column containing the matrix values for the second matrix </td></tr>
+    <tr><td class="paramname">b_trans</td><td>Boolean to indicate if second matrix should be transposed before multiplication </td></tr>
+    <tr><td class="paramname">matrix_out</td><td>Name of the table where to output the result matrix </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Name of the table containing the result matrix </dd></dl>
+
+</div>
+</div>
+<a id="aea1f8c6538b189a29c24b56f5af496b8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aea1f8c6538b189a29c24b56f5af496b8">&#9670;&nbsp;</a></span>matrix_mult() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">matrix_result matrix_mult </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_a</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>a_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_b</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>b_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a43a2702360817f94ecf9b3ba9a984548"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a43a2702360817f94ecf9b3ba9a984548">&#9670;&nbsp;</a></span>matrix_mult() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_mult </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ad89a88acce449ee27ba9d3a73950c2d7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad89a88acce449ee27ba9d3a73950c2d7">&#9670;&nbsp;</a></span>matrix_mult() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_mult </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aad615ae2da39bf15c8032eacb8330a74"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aad615ae2da39bf15c8032eacb8330a74">&#9670;&nbsp;</a></span>matrix_ndims() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">integer [] matrix_ndims </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>in_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>is_block</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">matrix</td><td>Name of the table containing the input matrix </td></tr>
+    <tr><td class="paramname">in_row</td><td>Name of the column containing the row index for the input matrix </td></tr>
+    <tr><td class="paramname">in_col</td><td>Name of the column containing the column index for the input matrix </td></tr>
+    <tr><td class="paramname">in_val</td><td>Name of the column containing the matrix values for the input matrix </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>an array including row_dims and col_dims </dd></dl>
+
+</div>
+</div>
+<a id="a563239e2948ed428ae62df73912c8cda"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a563239e2948ed428ae62df73912c8cda">&#9670;&nbsp;</a></span>matrix_ndims() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">integer [] matrix_ndims </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>in_args</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a198a59b704931cbe35edd1ffdccf025b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a198a59b704931cbe35edd1ffdccf025b">&#9670;&nbsp;</a></span>matrix_ndims() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_ndims </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac502592b54ed6d09d8e16eb7993672fb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac502592b54ed6d09d8e16eb7993672fb">&#9670;&nbsp;</a></span>matrix_ndims() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_ndims </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa5eb2864180eb276a786d9b2172aef5f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa5eb2864180eb276a786d9b2172aef5f">&#9670;&nbsp;</a></span>matrix_norm() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 matrix_norm </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>in_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>norm_type</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">matrix_a</td><td>Source matrix table (dense matrix format) </td></tr>
+    <tr><td class="paramname">norm_type</td><td>Type of norm used (default: fro)</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>DOUBLE PRECISION</dd></dl>
+<dl class="section user"><dt>Usage Currenty, we support the following norms</dt><dd>(a) 'fro': Computes the frobenius norm (b) 'one': Computes the one norm (c) 'inf': Computes the infinity norm (d) 'max': Computes the max norm (e) 'spec': Computes the spectral norm (f) '&lt;positive float&gt;=""&gt;': Computes the element-wise norm</dd></dl>
+<pre>
+SELECT matrix_norm('<em>matrix_table_name</em>', 'fro');
+</pre> 
+</div>
+</div>
+<a id="a8ebac230a8a23e27125fd6b324484a30"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8ebac230a8a23e27125fd6b324484a30">&#9670;&nbsp;</a></span>matrix_norm() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 matrix_norm </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>in_args</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a4d3873b96aa8d7ec3288ba1e6c275f65"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4d3873b96aa8d7ec3288ba1e6c275f65">&#9670;&nbsp;</a></span>matrix_norm() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_norm </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aed19bdcfe46eb2645d85a9e71895719b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aed19bdcfe46eb2645d85a9e71895719b">&#9670;&nbsp;</a></span>matrix_norm() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_norm </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ad87178a3e1721ee05589817cb598d6ec"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad87178a3e1721ee05589817cb598d6ec">&#9670;&nbsp;</a></span>matrix_nuclear_norm() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 matrix_nuclear_norm </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>in_args</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">matrix_in</td><td>Name of the table containing the input matrix </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Name of the table containing the result matrix </dd></dl>
+
+</div>
+</div>
+<a id="af37ef69921ecb4d667ebf65a3901ad4c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af37ef69921ecb4d667ebf65a3901ad4c">&#9670;&nbsp;</a></span>matrix_nuclear_norm() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_nuclear_norm </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae90888a1b50fa901966ca2b9975f4ada"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae90888a1b50fa901966ca2b9975f4ada">&#9670;&nbsp;</a></span>matrix_nuclear_norm() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_nuclear_norm </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1f59138935fe638eca1f15588aa76ac1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1f59138935fe638eca1f15588aa76ac1">&#9670;&nbsp;</a></span>matrix_ones() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">matrix_result matrix_ones </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>col_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_args</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">row_dim</td><td>Name of the column containing the row index for the one matrix </td></tr>
+    <tr><td class="paramname">col_dim</td><td>Name of the column containing the column index for the one matrix </td></tr>
+    <tr><td class="paramname">matrix_out</td><td>Name of the table where to output the result matrix </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Name of the table containing the result matrix </dd></dl>
+
+</div>
+</div>
+<a id="a14b7d6ad206764d48dfbaa0cc9978e32"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a14b7d6ad206764d48dfbaa0cc9978e32">&#9670;&nbsp;</a></span>matrix_ones() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">matrix_result matrix_ones </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>col_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac9e608ad657246ace0bf0b4235d3a07d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac9e608ad657246ace0bf0b4235d3a07d">&#9670;&nbsp;</a></span>matrix_ones() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_ones </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7df4dbdc3b0a7105c644c787daadf666"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7df4dbdc3b0a7105c644c787daadf666">&#9670;&nbsp;</a></span>matrix_ones() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_ones </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a929ded138fb0a953c8126ee8e20d793f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a929ded138fb0a953c8126ee8e20d793f">&#9670;&nbsp;</a></span>matrix_pinv() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">matrix_result matrix_pinv </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>in_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_args</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">matrix_in</td><td>Name of the table containing the input matrix </td></tr>
+    <tr><td class="paramname">matrix_out</td><td>Name of the table where to output the result matrix </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Name of the table containing the result matrix </dd></dl>
+
+</div>
+</div>
+<a id="a39c21ffb83c184a21b481ad12056af13"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a39c21ffb83c184a21b481ad12056af13">&#9670;&nbsp;</a></span>matrix_pinv() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">matrix_result matrix_pinv </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>in_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="adc992cc64ae6c2537b417f5c9693d93c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adc992cc64ae6c2537b417f5c9693d93c">&#9670;&nbsp;</a></span>matrix_pinv() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_pinv </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a85193210d3fd55cba9d983a8cf71a34b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a85193210d3fd55cba9d983a8cf71a34b">&#9670;&nbsp;</a></span>matrix_pinv() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_pinv </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac656a3a1e0008af89af9d4af44467407"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac656a3a1e0008af89af9d4af44467407">&#9670;&nbsp;</a></span>matrix_qr() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">matrix_result matrix_qr </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>in_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out_prefix</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_args</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">matrix_in</td><td>Name of the table containing the input matrix </td></tr>
+    <tr><td class="paramname">matrix_q</td><td>Name of the table where to output the q matrix of QR decomposition </td></tr>
+    <tr><td class="paramname">matrix_r</td><td>Name of the table where to output the r matrix of QR decomposition </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Name of the table containing the result matrix </dd></dl>
+
+</div>
+</div>
+<a id="ad7b68aacf626bed0c5f2a37be63848e4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad7b68aacf626bed0c5f2a37be63848e4">&#9670;&nbsp;</a></span>matrix_qr() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">matrix_result matrix_qr </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>in_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out_prefix</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a58a87beb5600e5a06f36ae1e083fe4cc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a58a87beb5600e5a06f36ae1e083fe4cc">&#9670;&nbsp;</a></span>matrix_qr() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_qr </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae66de066dfdafaba16575f58ab58376c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae66de066dfdafaba16575f58ab58376c">&#9670;&nbsp;</a></span>matrix_qr() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_qr </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ad5df0edded7b5db4b9bdd29ff3e39ec3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad5df0edded7b5db4b9bdd29ff3e39ec3">&#9670;&nbsp;</a></span>matrix_random() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">matrix_result matrix_random </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>col_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>in_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>distribution</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_args</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">distribution</td><td>Name of the distribution to use (normal or uniform) </td></tr>
+    <tr><td class="paramname">row_dim</td><td>Name of the column containing the row index for the one matrix </td></tr>
+    <tr><td class="paramname">col_dim</td><td>Name of the column containing the column index for the one matrix </td></tr>
+    <tr><td class="paramname">matrix_out</td><td>Name of the table where to output the result matrix </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Name of the table containing the result matrix </dd></dl>
+
+</div>
+</div>
+<a id="af2dec2ccb01c2ba4b3d1293a032ff08f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af2dec2ccb01c2ba4b3d1293a032ff08f">&#9670;&nbsp;</a></span>matrix_random() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">matrix_result matrix_random </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>col_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>distribution</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae86e6f65ef75ed13a1de8b8e0c537bfc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae86e6f65ef75ed13a1de8b8e0c537bfc">&#9670;&nbsp;</a></span>matrix_random() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">matrix_result matrix_random </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>col_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a3906a54d945b19672641ca08bef11e69"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3906a54d945b19672641ca08bef11e69">&#9670;&nbsp;</a></span>matrix_rank() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int8 matrix_rank </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>in_args</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">matrix_in</td><td>Name of the table containing the input matrix </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Name of the table containing the result matrix </dd></dl>
+
+</div>
+</div>
+<a id="aef438cede80c62cdd8126a77b7bd86c7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aef438cede80c62cdd8126a77b7bd86c7">&#9670;&nbsp;</a></span>matrix_rank() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_rank </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8613f342735ddb02a8b1d3585a569f26"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8613f342735ddb02a8b1d3585a569f26">&#9670;&nbsp;</a></span>matrix_rank() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_rank </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa41d97528365f8e161e5e821165a6e0d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa41d97528365f8e161e5e821165a6e0d">&#9670;&nbsp;</a></span>matrix_scalar_mult() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">matrix_result matrix_scalar_mult </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>in_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>scalar</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_args</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">matrix_in</td><td>Name of the table containing the matrix </td></tr>
+    <tr><td class="paramname">in_args</td><td>Name-value pair string containing options for matrix_in </td></tr>
+    <tr><td class="paramname">scalar</td><td>Scalar value used to be multiplied with matrix_in </td></tr>
+    <tr><td class="paramname">matrix_out</td><td>Name of the table where to output the result matrix </td></tr>
+    <tr><td class="paramname">out_args</td><td>Name-value pair string containing options for matrix_in </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Name of the table containing the result matrix </dd></dl>
+
+</div>
+</div>
+<a id="a0c8518f032d9f6af692dabde9f4e2051"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0c8518f032d9f6af692dabde9f4e2051">&#9670;&nbsp;</a></span>matrix_scalar_mult() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">matrix_result matrix_scalar_mult </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>in_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>scalar</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a6993220fd6f4d2c85514a05c966c0334"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6993220fd6f4d2c85514a05c966c0334">&#9670;&nbsp;</a></span>matrix_scalar_mult() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_scalar_mult </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a48baae4d5938c7afdf160a84d43de399"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a48baae4d5938c7afdf160a84d43de399">&#9670;&nbsp;</a></span>matrix_scalar_mult() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_scalar_mult </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a68c05ce6379f28d5e30dd0144fe50565"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a68c05ce6379f28d5e30dd0144fe50565">&#9670;&nbsp;</a></span>matrix_scale_and_add() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void matrix_scale_and_add </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_a</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>a_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_b</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>b_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>scale</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_args</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">matrix_a</td><td>Source matrix table A (dense matrix format) </td></tr>
+    <tr><td class="paramname">matrix_b</td><td>Source matrix table B (dense matrix format) </td></tr>
+    <tr><td class="paramname">scale</td><td>Scale for matrix B </td></tr>
+    <tr><td class="paramname">matrix_out</td><td>Output table for matrix R &lt;- A + sB</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>VOID</dd></dl>
+<dl class="section user"><dt>Usage</dt><dd>For matrix addition and subtration, you can use the same function with different values of scalar <pre>
+SELECT matrix_scale_and_add('matrix_a', 'matrix_b', 1, 'matrix_out');
+SELECT matrix_scale_and_add('matrix_a', 'matrix_b', -1, 'matrix_out');
+</pre> </dd></dl>
+
+</div>
+</div>
+<a id="a31de2056018ac96ba01125c0e131f21e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a31de2056018ac96ba01125c0e131f21e">&#9670;&nbsp;</a></span>matrix_scale_and_add() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void matrix_scale_and_add </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_a</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>a_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_b</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>b_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>scale</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a390fb7234f49e17c780e961184873759"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a390fb7234f49e17c780e961184873759">&#9670;&nbsp;</a></span>matrix_sparsify() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">matrix_result matrix_sparsify </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>in_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_args</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">matrix_in</td><td>Name of the table containing the input matrix </td></tr>
+    <tr><td class="paramname">matrix_out</td><td>Name of the table where to output the result matrix </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Name of the table containing the result matrix </dd></dl>
+
+</div>
+</div>
+<a id="a07be86160c55d50fe8277e8bdd3bab38"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a07be86160c55d50fe8277e8bdd3bab38">&#9670;&nbsp;</a></span>matrix_sparsify() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">matrix_result matrix_sparsify </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>in_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a32bf4abd829dfc1b28d684af10d6b2d8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a32bf4abd829dfc1b28d684af10d6b2d8">&#9670;&nbsp;</a></span>matrix_sparsify() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_sparsify </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a0cdd245c633ccb63fc1067ed121a8a4d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0cdd245c633ccb63fc1067ed121a8a4d">&#9670;&nbsp;</a></span>matrix_sparsify() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_sparsify </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae4082533d1943e20660dee4c951edf22"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae4082533d1943e20660dee4c951edf22">&#9670;&nbsp;</a></span>matrix_square() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">matrix_result matrix_square </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>in_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_args</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">matrix_in</td><td>Name of the table containing the input matrix </td></tr>
+    <tr><td class="paramname">matrix_out</td><td>Name of the table where to output the result matrix </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Name of the table containing the result matrix </dd></dl>
+
+</div>
+</div>
+<a id="ac27837c0e5196168e51ddd870c34205e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac27837c0e5196168e51ddd870c34205e">&#9670;&nbsp;</a></span>matrix_square() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">matrix_result matrix_square </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>in_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa9b1f1554e98d3ab8f04d203f99fd651"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa9b1f1554e98d3ab8f04d203f99fd651">&#9670;&nbsp;</a></span>matrix_sub() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">matrix_result matrix_sub </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_a</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>a_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_b</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>b_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_args</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">matrix_a</td><td>Name of the table containing the first matrix </td></tr>
+    <tr><td class="paramname">a_row</td><td>Name of the column containing the row id for the first matrix </td></tr>
+    <tr><td class="paramname">a_col</td><td>Name of the column containing the column id for the first matrix </td></tr>
+    <tr><td class="paramname">a_val</td><td>Name of the column containing the matrix values for the first matrix </td></tr>
+    <tr><td class="paramname">matrix_b</td><td>Name of the table containing the second matrix </td></tr>
+    <tr><td class="paramname">b_row</td><td>Name of the column containing the row id for the second matrix </td></tr>
+    <tr><td class="paramname">b_col</td><td>Name of the column containing the column id for the second matrix </td></tr>
+    <tr><td class="paramname">b_val</td><td>Name of the column containing the matrix values for the second matrix </td></tr>
+    <tr><td class="paramname">matrix_out</td><td>Name of the table where to output the result matrix </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Name of the table containing the result matrix </dd></dl>
+
+</div>
+</div>
+<a id="a2a8806e11141e8cc5a3fa0c6b1b9e62a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2a8806e11141e8cc5a3fa0c6b1b9e62a">&#9670;&nbsp;</a></span>matrix_sub() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">matrix_result matrix_sub </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_a</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>a_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_b</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>b_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a66d586c0126a95e43ecad7d3efbcce69"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a66d586c0126a95e43ecad7d3efbcce69">&#9670;&nbsp;</a></span>matrix_sub() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_sub </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a41d7286b1a57206f999e064bf3745407"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a41d7286b1a57206f999e064bf3745407">&#9670;&nbsp;</a></span>matrix_sub() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_sub </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="af03096b43d66e3a3448885e8d6643244"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af03096b43d66e3a3448885e8d6643244">&#9670;&nbsp;</a></span>matrix_sum() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] matrix_sum </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>in_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>dim</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">matrix_in</td><td>Name of the table containing the matrix </td></tr>
+    <tr><td class="paramname">in_args</td><td>Name-value pair string containing options for matrix_in </td></tr>
+    <tr><td class="paramname">dim</td><td>Which dimension to collapse. 1 means row wise, and 2 means column wise </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a6006396999fd192910197e40a0655179"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6006396999fd192910197e40a0655179">&#9670;&nbsp;</a></span>matrix_sum() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] matrix_sum </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>in_args</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a2ce9cf659cd15d6c765ff8cd11b26a2f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2ce9cf659cd15d6c765ff8cd11b26a2f">&#9670;&nbsp;</a></span>matrix_sum() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_sum </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a73a54a0e80047b8b9e5df2c4b635c155"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a73a54a0e80047b8b9e5df2c4b635c155">&#9670;&nbsp;</a></span>matrix_sum() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_sum </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa8089cdaf2b66d668f2f15fe3d457d06"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa8089cdaf2b66d668f2f15fe3d457d06">&#9670;&nbsp;</a></span>matrix_trans() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">matrix_result matrix_trans </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>in_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_args</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">matrix_in</td><td>Name of the table containing the input matrix </td></tr>
+    <tr><td class="paramname">in_row</td><td>Name of the column containing the row index for the input matrix </td></tr>
+    <tr><td class="paramname">in_col</td><td>Name of the column containing the column index for the input matrix </td></tr>
+    <tr><td class="paramname">in_val</td><td>Name of the column containing the matrix values for the input matrix </td></tr>
+    <tr><td class="paramname">matrix_out</td><td>Name of the table where to output the result matrix </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Name of the table containing the result matrix </dd></dl>
+
+</div>
+</div>
+<a id="af29ba2a78c6fc0efe0560882853514e7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af29ba2a78c6fc0efe0560882853514e7">&#9670;&nbsp;</a></span>matrix_trans() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">matrix_result matrix_trans </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>in_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a84deae83650034337bbec470786573ba"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a84deae83650034337bbec470786573ba">&#9670;&nbsp;</a></span>matrix_trans() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_trans </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7b37a26e5a301338305992bae6e35230"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7b37a26e5a301338305992bae6e35230">&#9670;&nbsp;</a></span>matrix_trans() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_trans </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a0a199e7cf9e56acd6a7f3fd78e73fa22"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0a199e7cf9e56acd6a7f3fd78e73fa22">&#9670;&nbsp;</a></span>matrix_unblockize()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">matrix_result matrix_unblockize </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>in_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_args</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5060836ec7418a8ec7141740d709db5a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5060836ec7418a8ec7141740d709db5a">&#9670;&nbsp;</a></span>matrix_vec_mult() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] matrix_vec_mult </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>in_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>vector</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">matrix_in</td><td>Name of the table containing the matrix </td></tr>
+    <tr><td class="paramname">in_args</td><td>Name-value pair string containing options for matrix_in </td></tr>
+    <tr><td class="paramname">vector</td><td>Vector value used to be multiplied with matrix_in </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Column vector which is the result of matrix_in * vector </dd></dl>
+
+</div>
+</div>
+<a id="a43ac21377c0932229f36fd4f11cedb2a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a43ac21377c0932229f36fd4f11cedb2a">&#9670;&nbsp;</a></span>matrix_vec_mult() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_vec_mult </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a738b55e4fa41b7b8ef650e47ba85fad7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a738b55e4fa41b7b8ef650e47ba85fad7">&#9670;&nbsp;</a></span>matrix_vec_mult() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_vec_mult </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a2f88aa4f4a8e479276c927048e1814f2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2f88aa4f4a8e479276c927048e1814f2">&#9670;&nbsp;</a></span>matrix_zeros() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">matrix_result matrix_zeros </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>col_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_args</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">row_id</td><td>Name of the column containing the row index for the zero matrix </td></tr>
+    <tr><td class="paramname">col_id</td><td>Name of the column containing the column index for the zero matrix </td></tr>
+    <tr><td class="paramname">matrix_out</td><td>Name of the table where to output the result matrix </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Name of the table containing the result matrix </dd></dl>
+
+</div>
+</div>
+<a id="a94d6e419cbf5a1809e7c4cd788adf025"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a94d6e419cbf5a1809e7c4cd788adf025">&#9670;&nbsp;</a></span>matrix_zeros() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">matrix_result matrix_zeros </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>col_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>matrix_out</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a733fd716b4b996f1a6ffca967496d899"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a733fd716b4b996f1a6ffca967496d899">&#9670;&nbsp;</a></span>matrix_zeros() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_zeros </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aaed270402933fd463479858f893b4357"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aaed270402933fd463479858f893b4357">&#9670;&nbsp;</a></span>matrix_zeros() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text matrix_zeros </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_9e42ee0a0235722f482630aa6cc99334.html">linalg</a></li><li class="navelem"><a class="el" href="matrix__ops_8sql__in.html">matrix_ops.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:57 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/measures_8sql__in.html b/docs/rc/measures_8sql__in.html
new file mode 100644
index 0000000..6ccb497
--- /dev/null
+++ b/docs/rc/measures_8sql__in.html
@@ -0,0 +1,520 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: measures.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('measures_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">measures.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a92ea2637ec03b501b42c70a0b4e7830d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="measures_8sql__in.html#a92ea2637ec03b501b42c70a0b4e7830d">graph_closeness</a> (text apsp_table, text out_table, text vertex_filter_expr)</td></tr>
+<tr class="separator:a92ea2637ec03b501b42c70a0b4e7830d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af9804adc2dff812797d14ed247645cc4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="measures_8sql__in.html#af9804adc2dff812797d14ed247645cc4">graph_closeness</a> (text apsp_table, text out_table)</td></tr>
+<tr class="separator:af9804adc2dff812797d14ed247645cc4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af4a8178a71cdf3118b6b2959362e2b78"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="measures_8sql__in.html#af4a8178a71cdf3118b6b2959362e2b78">graph_closeness</a> (varchar message)</td></tr>
+<tr class="separator:af4a8178a71cdf3118b6b2959362e2b78"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a38e7bc842a07bd950ed6c1e7f9d9db6b"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="measures_8sql__in.html#a38e7bc842a07bd950ed6c1e7f9d9db6b">graph_closeness</a> ()</td></tr>
+<tr class="separator:a38e7bc842a07bd950ed6c1e7f9d9db6b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1c43ead98a50b6fc88326c3ad8a55233"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="measures_8sql__in.html#a1c43ead98a50b6fc88326c3ad8a55233">graph_diameter</a> (text apsp_table, text out_table)</td></tr>
+<tr class="separator:a1c43ead98a50b6fc88326c3ad8a55233"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5e53de2a59a2af332a6c87535b1a109b"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="measures_8sql__in.html#a5e53de2a59a2af332a6c87535b1a109b">graph_diameter</a> (varchar message)</td></tr>
+<tr class="separator:a5e53de2a59a2af332a6c87535b1a109b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a771f73ee5656089ade4f90a1a87c4c21"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="measures_8sql__in.html#a771f73ee5656089ade4f90a1a87c4c21">graph_diameter</a> ()</td></tr>
+<tr class="separator:a771f73ee5656089ade4f90a1a87c4c21"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab7dace0acc3660325313d677e354881a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="measures_8sql__in.html#ab7dace0acc3660325313d677e354881a">graph_avg_path_length</a> (text apsp_table, text out_table)</td></tr>
+<tr class="separator:ab7dace0acc3660325313d677e354881a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aec97c2b8bc79f58ef29a217f5bce355c"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="measures_8sql__in.html#aec97c2b8bc79f58ef29a217f5bce355c">graph_avg_path_length</a> (varchar message)</td></tr>
+<tr class="separator:aec97c2b8bc79f58ef29a217f5bce355c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa25fae8b5b6c0626f081e7e2ec8eb805"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="measures_8sql__in.html#aa25fae8b5b6c0626f081e7e2ec8eb805">graph_avg_path_length</a> ()</td></tr>
+<tr class="separator:aa25fae8b5b6c0626f081e7e2ec8eb805"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afca698e3642d08cc7d44f179a568e0f1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="measures_8sql__in.html#afca698e3642d08cc7d44f179a568e0f1">graph_vertex_degrees</a> (text vertex_table, text vertex_id, text edge_table, text edge_args, text out_table, text grouping_cols)</td></tr>
+<tr class="separator:afca698e3642d08cc7d44f179a568e0f1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afbfd5dac93dbf429ed609f843e4b9dff"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="measures_8sql__in.html#afbfd5dac93dbf429ed609f843e4b9dff">graph_vertex_degrees</a> (text vertex_table, text vertex_id, text edge_table, text edge_args, text out_table)</td></tr>
+<tr class="separator:afbfd5dac93dbf429ed609f843e4b9dff"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1bd8dac9ed72c3f41d96f1d1da1b9346"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="measures_8sql__in.html#a1bd8dac9ed72c3f41d96f1d1da1b9346">graph_vertex_degrees</a> (varchar message)</td></tr>
+<tr class="separator:a1bd8dac9ed72c3f41d96f1d1da1b9346"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7a504e6eeebc7bdbe82d4dd7e0b82d0a"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="measures_8sql__in.html#a7a504e6eeebc7bdbe82d4dd7e0b82d0a">graph_vertex_degrees</a> ()</td></tr>
+<tr class="separator:a7a504e6eeebc7bdbe82d4dd7e0b82d0a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ab7dace0acc3660325313d677e354881a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab7dace0acc3660325313d677e354881a">&#9670;&nbsp;</a></span>graph_avg_path_length() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void graph_avg_path_length </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>apsp_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aec97c2b8bc79f58ef29a217f5bce355c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aec97c2b8bc79f58ef29a217f5bce355c">&#9670;&nbsp;</a></span>graph_avg_path_length() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar graph_avg_path_length </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa25fae8b5b6c0626f081e7e2ec8eb805"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa25fae8b5b6c0626f081e7e2ec8eb805">&#9670;&nbsp;</a></span>graph_avg_path_length() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar graph_avg_path_length </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a92ea2637ec03b501b42c70a0b4e7830d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a92ea2637ec03b501b42c70a0b4e7830d">&#9670;&nbsp;</a></span>graph_closeness() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void graph_closeness </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>apsp_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>vertex_filter_expr</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="af9804adc2dff812797d14ed247645cc4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af9804adc2dff812797d14ed247645cc4">&#9670;&nbsp;</a></span>graph_closeness() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void graph_closeness </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>apsp_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="af4a8178a71cdf3118b6b2959362e2b78"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af4a8178a71cdf3118b6b2959362e2b78">&#9670;&nbsp;</a></span>graph_closeness() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar graph_closeness </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a38e7bc842a07bd950ed6c1e7f9d9db6b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a38e7bc842a07bd950ed6c1e7f9d9db6b">&#9670;&nbsp;</a></span>graph_closeness() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar graph_closeness </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1c43ead98a50b6fc88326c3ad8a55233"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1c43ead98a50b6fc88326c3ad8a55233">&#9670;&nbsp;</a></span>graph_diameter() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void graph_diameter </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>apsp_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5e53de2a59a2af332a6c87535b1a109b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5e53de2a59a2af332a6c87535b1a109b">&#9670;&nbsp;</a></span>graph_diameter() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar graph_diameter </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a771f73ee5656089ade4f90a1a87c4c21"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a771f73ee5656089ade4f90a1a87c4c21">&#9670;&nbsp;</a></span>graph_diameter() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar graph_diameter </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="afca698e3642d08cc7d44f179a568e0f1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afca698e3642d08cc7d44f179a568e0f1">&#9670;&nbsp;</a></span>graph_vertex_degrees() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void graph_vertex_degrees </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>vertex_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>vertex_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>edge_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>edge_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="afbfd5dac93dbf429ed609f843e4b9dff"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afbfd5dac93dbf429ed609f843e4b9dff">&#9670;&nbsp;</a></span>graph_vertex_degrees() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void graph_vertex_degrees </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>vertex_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>vertex_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>edge_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>edge_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1bd8dac9ed72c3f41d96f1d1da1b9346"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1bd8dac9ed72c3f41d96f1d1da1b9346">&#9670;&nbsp;</a></span>graph_vertex_degrees() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar graph_vertex_degrees </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7a504e6eeebc7bdbe82d4dd7e0b82d0a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7a504e6eeebc7bdbe82d4dd7e0b82d0a">&#9670;&nbsp;</a></span>graph_vertex_degrees() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar graph_vertex_degrees </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_1c3de670490e30b2adf792227ef51e32.html">graph</a></li><li class="navelem"><a class="el" href="measures_8sql__in.html">measures.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:57 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/minibatch__preprocessing_8sql__in.html b/docs/rc/minibatch__preprocessing_8sql__in.html
new file mode 100644
index 0000000..8c195d6
--- /dev/null
+++ b/docs/rc/minibatch__preprocessing_8sql__in.html
@@ -0,0 +1,387 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: minibatch_preprocessing.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('minibatch__preprocessing_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">minibatch_preprocessing.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>TODO.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a240a7074bf43145a5a0a034d4b417907"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="minibatch__preprocessing_8sql__in.html#a240a7074bf43145a5a0a034d4b417907">minibatch_preprocessor</a> (varchar source_table, varchar output_table, varchar dependent_varname, varchar independent_varname, varchar grouping_cols, integer buffer_size, boolean one_hot_encode_int_dep_var)</td></tr>
+<tr class="separator:a240a7074bf43145a5a0a034d4b417907"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a92b64147fde6f2d7f9914357c7059950"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="minibatch__preprocessing_8sql__in.html#a92b64147fde6f2d7f9914357c7059950">minibatch_preprocessor</a> (varchar source_table, varchar output_table, varchar dependent_varname, varchar independent_varname, varchar grouping_cols, integer buffer_size)</td></tr>
+<tr class="separator:a92b64147fde6f2d7f9914357c7059950"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a65e4a7785a85fd75d3d3be455cb5b922"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="minibatch__preprocessing_8sql__in.html#a65e4a7785a85fd75d3d3be455cb5b922">minibatch_preprocessor</a> (varchar source_table, varchar output_table, varchar dependent_varname, varchar independent_varname, varchar grouping_cols)</td></tr>
+<tr class="separator:a65e4a7785a85fd75d3d3be455cb5b922"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1727d5439a8a73eb42c4b2a9bd29a3c2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="minibatch__preprocessing_8sql__in.html#a1727d5439a8a73eb42c4b2a9bd29a3c2">minibatch_preprocessor</a> (varchar source_table, varchar output_table, varchar dependent_varname, varchar independent_varname)</td></tr>
+<tr class="separator:a1727d5439a8a73eb42c4b2a9bd29a3c2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3ea00bd7444fe9d2969e6a82e093091c"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="minibatch__preprocessing_8sql__in.html#a3ea00bd7444fe9d2969e6a82e093091c">minibatch_preprocessor</a> (varchar message)</td></tr>
+<tr class="separator:a3ea00bd7444fe9d2969e6a82e093091c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abf3ab6567c5b5f64402b7412c74c7451"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="minibatch__preprocessing_8sql__in.html#abf3ab6567c5b5f64402b7412c74c7451">minibatch_preprocessor</a> ()</td></tr>
+<tr class="separator:abf3ab6567c5b5f64402b7412c74c7451"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>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</p>
+<p><a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a></p>
+<p>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.</p>
+<dl class="section date"><dt>Date</dt><dd>Mar 2018 </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="a240a7074bf43145a5a0a034d4b417907"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a240a7074bf43145a5a0a034d4b417907">&#9670;&nbsp;</a></span>minibatch_preprocessor() <span class="overload">[1/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void minibatch_preprocessor </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>buffer_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>one_hot_encode_int_dep_var</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a92b64147fde6f2d7f9914357c7059950"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a92b64147fde6f2d7f9914357c7059950">&#9670;&nbsp;</a></span>minibatch_preprocessor() <span class="overload">[2/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void minibatch_preprocessor </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>buffer_size</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a65e4a7785a85fd75d3d3be455cb5b922"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a65e4a7785a85fd75d3d3be455cb5b922">&#9670;&nbsp;</a></span>minibatch_preprocessor() <span class="overload">[3/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void minibatch_preprocessor </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1727d5439a8a73eb42c4b2a9bd29a3c2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1727d5439a8a73eb42c4b2a9bd29a3c2">&#9670;&nbsp;</a></span>minibatch_preprocessor() <span class="overload">[4/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void minibatch_preprocessor </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a3ea00bd7444fe9d2969e6a82e093091c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3ea00bd7444fe9d2969e6a82e093091c">&#9670;&nbsp;</a></span>minibatch_preprocessor() <span class="overload">[5/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar minibatch_preprocessor </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="abf3ab6567c5b5f64402b7412c74c7451"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abf3ab6567c5b5f64402b7412c74c7451">&#9670;&nbsp;</a></span>minibatch_preprocessor() <span class="overload">[6/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar minibatch_preprocessor </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_8d53e1c0026e7e34b4cd68f8b91426d6.html">utilities</a></li><li class="navelem"><a class="el" href="minibatch__preprocessing_8sql__in.html">minibatch_preprocessing.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:57 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/mlp_8sql__in.html b/docs/rc/mlp_8sql__in.html
new file mode 100644
index 0000000..09ef8ec
--- /dev/null
+++ b/docs/rc/mlp_8sql__in.html
@@ -0,0 +1,1871 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: mlp.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('mlp_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">mlp.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>SQL functions for multilayer perceptron.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a591b8f7eb778fc57000ff2618fb90b6b"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mlp_8sql__in.html#a591b8f7eb778fc57000ff2618fb90b6b">mlp_igd_transition</a> (float8[] state, float8[] ind_var, float8[] dep_var, float8[] previous_state, float8[] layer_sizes, float8 learning_rate_init, integer activation, integer is_classification, float8 weight, float8[] warm_start_coeff, float8 lambda, float8 momentum, boolean is_nesterov)</td></tr>
+<tr class="separator:a591b8f7eb778fc57000ff2618fb90b6b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aba6da28d2565175ea81f50e735239eaa"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mlp_8sql__in.html#aba6da28d2565175ea81f50e735239eaa">mlp_minibatch_transition</a> (float8[] state, float8[] ind_var, float8[] dep_var, float8[] previous_state, float8[] layer_sizes, float8 learning_rate_init, integer activation, integer is_classification, float8 weight, float8[] warm_start_coeff, float8 lambda, integer batch_size, integer n_epochs, float8 momentum, boolean is_nesterov)</td></tr>
+<tr class="separator:aba6da28d2565175ea81f50e735239eaa"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab131a5383e05cc40207874a586394323"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mlp_8sql__in.html#ab131a5383e05cc40207874a586394323">mlp_igd_merge</a> (float8[] state1, float8[] state2)</td></tr>
+<tr class="separator:ab131a5383e05cc40207874a586394323"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab0f74b98d0fe97d8c89a7777f40fc9f2"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mlp_8sql__in.html#ab0f74b98d0fe97d8c89a7777f40fc9f2">mlp_igd_final</a> (float8[] state)</td></tr>
+<tr class="separator:ab0f74b98d0fe97d8c89a7777f40fc9f2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4ee983290b6936743645df606ce0b8ba"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mlp_8sql__in.html#a4ee983290b6936743645df606ce0b8ba">mlp_minibatch_merge</a> (float8[] state1, float8[] state2)</td></tr>
+<tr class="separator:a4ee983290b6936743645df606ce0b8ba"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a78190aceb28796d29e3dffc6241b3f55"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mlp_8sql__in.html#a78190aceb28796d29e3dffc6241b3f55">mlp_minibatch_final</a> (float8[] state)</td></tr>
+<tr class="separator:a78190aceb28796d29e3dffc6241b3f55"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a01b8c82aaec038e0bd9d5bd208e23f9f"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mlp_8sql__in.html#a01b8c82aaec038e0bd9d5bd208e23f9f">mlp_igd_step</a> (float8[], float8[], float8[], float8[], float8, integer, integer, float8, float8[], float8, float8, boolean)</td></tr>
+<tr class="separator:a01b8c82aaec038e0bd9d5bd208e23f9f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5933f1c1f2c41ce92578f67426f69456"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mlp_8sql__in.html#a5933f1c1f2c41ce92578f67426f69456">mlp_minibatch_step</a> (float8[], float8[], float8[], float8[], float8, integer, integer, float8, float8[], float8, integer, integer, float8, boolean)</td></tr>
+<tr class="separator:a5933f1c1f2c41ce92578f67426f69456"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae14405393c46de803ff1c0e11e85fdfb"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mlp_8sql__in.html#ae14405393c46de803ff1c0e11e85fdfb">internal_mlp_igd_distance</a> (float8[] state1, float8[] state2)</td></tr>
+<tr class="separator:ae14405393c46de803ff1c0e11e85fdfb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a06a6308d58b039b6ae316fdfb9478a46"><td class="memItemLeft" align="right" valign="top">mlp_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mlp_8sql__in.html#a06a6308d58b039b6ae316fdfb9478a46">internal_mlp_igd_result</a> (float8[] state)</td></tr>
+<tr class="separator:a06a6308d58b039b6ae316fdfb9478a46"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a603a8dd9a3129e7c959453d6a01cee5b"><td class="memItemLeft" align="right" valign="top">mlp_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mlp_8sql__in.html#a603a8dd9a3129e7c959453d6a01cee5b">internal_mlp_minibatch_result</a> (float8[] state)</td></tr>
+<tr class="separator:a603a8dd9a3129e7c959453d6a01cee5b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a73d39f7b6dd12112d080e5ab851e5f53"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mlp_8sql__in.html#a73d39f7b6dd12112d080e5ab851e5f53">mlp_classification</a> (varchar source_table, varchar output_table, varchar independent_varname, varchar dependent_varname, integer[] hidden_layer_sizes, varchar optimizer_params, varchar activation, varchar weights, boolean warm_start, boolean verbose, varchar grouping_col)</td></tr>
+<tr class="separator:a73d39f7b6dd12112d080e5ab851e5f53"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0745971ef78379d5e0a6f59a1e084d3b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mlp_8sql__in.html#a0745971ef78379d5e0a6f59a1e084d3b">mlp_regression</a> (varchar source_table, varchar output_table, varchar independent_varname, varchar dependent_varname, integer[] hidden_layer_sizes, varchar optimizer_params, varchar activation, varchar weights, boolean warm_start, boolean verbose, varchar grouping_col)</td></tr>
+<tr class="separator:a0745971ef78379d5e0a6f59a1e084d3b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4f787c902c3a5e656b387a688f262acb"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mlp_8sql__in.html#a4f787c902c3a5e656b387a688f262acb">mlp_classification</a> (varchar source_table, varchar output_table, varchar independent_varname, varchar dependent_varname, integer[] hidden_layer_sizes, varchar optimizer_params, varchar activation, varchar weights, boolean warm_start, boolean verbose)</td></tr>
+<tr class="separator:a4f787c902c3a5e656b387a688f262acb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af520b5c8c8c737fc23ceb529610dd86b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mlp_8sql__in.html#af520b5c8c8c737fc23ceb529610dd86b">mlp_classification</a> (varchar source_table, varchar output_table, varchar independent_varname, varchar dependent_varname, integer[] hidden_layer_sizes, varchar optimizer_params, varchar activation, varchar weights, boolean warm_start)</td></tr>
+<tr class="separator:af520b5c8c8c737fc23ceb529610dd86b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0daa7903ff719803b581aad045101344"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mlp_8sql__in.html#a0daa7903ff719803b581aad045101344">mlp_classification</a> (varchar source_table, varchar output_table, varchar independent_varname, varchar dependent_varname, integer[] hidden_layer_sizes, varchar optimizer_params, varchar activation, varchar weights)</td></tr>
+<tr class="separator:a0daa7903ff719803b581aad045101344"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a15c117bcf75101b7aec2fbecf7f851b5"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mlp_8sql__in.html#a15c117bcf75101b7aec2fbecf7f851b5">mlp_classification</a> (varchar source_table, varchar output_table, varchar independent_varname, varchar dependent_varname, integer[] hidden_layer_sizes, varchar optimizer_params, varchar activation)</td></tr>
+<tr class="separator:a15c117bcf75101b7aec2fbecf7f851b5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5d28bb79f649ab9e3d376bcbdf65f024"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mlp_8sql__in.html#a5d28bb79f649ab9e3d376bcbdf65f024">mlp_classification</a> (varchar source_table, varchar output_table, varchar independent_varname, varchar dependent_varname, integer[] hidden_layer_sizes, varchar optimizer_params)</td></tr>
+<tr class="separator:a5d28bb79f649ab9e3d376bcbdf65f024"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa5ae594dad6af4eee8aa2e89fc1fc63c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mlp_8sql__in.html#aa5ae594dad6af4eee8aa2e89fc1fc63c">mlp_classification</a> (varchar source_table, varchar output_table, varchar independent_varname, varchar dependent_varname, integer[] hidden_layer_sizes)</td></tr>
+<tr class="separator:aa5ae594dad6af4eee8aa2e89fc1fc63c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae5043f0cfce81a69ae0db7f2c8c4a230"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mlp_8sql__in.html#ae5043f0cfce81a69ae0db7f2c8c4a230">mlp_regression</a> (varchar source_table, varchar output_table, varchar independent_varname, varchar dependent_varname, integer[] hidden_layer_sizes, varchar optimizer_params, varchar activation, varchar weights, boolean warm_start, boolean verbose)</td></tr>
+<tr class="separator:ae5043f0cfce81a69ae0db7f2c8c4a230"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa22e20ac82a36d5c8f34d1687500cc47"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mlp_8sql__in.html#aa22e20ac82a36d5c8f34d1687500cc47">mlp_regression</a> (varchar source_table, varchar output_table, varchar independent_varname, varchar dependent_varname, integer[] hidden_layer_sizes, varchar optimizer_params, varchar activation, varchar weights, boolean warm_start)</td></tr>
+<tr class="separator:aa22e20ac82a36d5c8f34d1687500cc47"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9732da677f1cfd6d1997c3a786e578f3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mlp_8sql__in.html#a9732da677f1cfd6d1997c3a786e578f3">mlp_regression</a> (varchar source_table, varchar output_table, varchar independent_varname, varchar dependent_varname, integer[] hidden_layer_sizes, varchar optimizer_params, varchar activation, varchar weights)</td></tr>
+<tr class="separator:a9732da677f1cfd6d1997c3a786e578f3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a47b00ac83ea4849f984d9f71bce288f1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mlp_8sql__in.html#a47b00ac83ea4849f984d9f71bce288f1">mlp_regression</a> (varchar source_table, varchar output_table, varchar independent_varname, varchar dependent_varname, integer[] hidden_layer_sizes, varchar optimizer_params, varchar activation)</td></tr>
+<tr class="separator:a47b00ac83ea4849f984d9f71bce288f1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4f96e5b5b480023923db16bbd3a7c158"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mlp_8sql__in.html#a4f96e5b5b480023923db16bbd3a7c158">mlp_regression</a> (varchar source_table, varchar output_table, varchar independent_varname, varchar dependent_varname, integer[] hidden_layer_sizes, varchar optimizer_params)</td></tr>
+<tr class="separator:a4f96e5b5b480023923db16bbd3a7c158"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afa76bcdc0ea92342f65f9428dc1c51f6"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mlp_8sql__in.html#afa76bcdc0ea92342f65f9428dc1c51f6">mlp_regression</a> (varchar source_table, varchar output_table, varchar independent_varname, varchar dependent_varname, integer[] hidden_layer_sizes)</td></tr>
+<tr class="separator:afa76bcdc0ea92342f65f9428dc1c51f6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a98a7cda6f3fb5ed9734f4838e1c42488"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mlp_8sql__in.html#a98a7cda6f3fb5ed9734f4838e1c42488">mlp_predict</a> (varchar model_table, varchar data_table, varchar id_col_name, varchar output_table, varchar pred_type)</td></tr>
+<tr class="separator:a98a7cda6f3fb5ed9734f4838e1c42488"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa90ab3d6f541a7d5eb8cb7c8a0083c3a"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mlp_8sql__in.html#aa90ab3d6f541a7d5eb8cb7c8a0083c3a">internal_predict_mlp</a> (float8[] coeff, float8[] independent_varname, float8 is_classification, float8 activation, float8[] layer_sizes, integer is_response, float8[] x_means, float8[] x_stds, integer array_dep_var_for_classification)</td></tr>
+<tr class="separator:aa90ab3d6f541a7d5eb8cb7c8a0083c3a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa576fa10b9b5c7e555d8037b07f49d07"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mlp_8sql__in.html#aa576fa10b9b5c7e555d8037b07f49d07">mlp_classification</a> (text message)</td></tr>
+<tr class="separator:aa576fa10b9b5c7e555d8037b07f49d07"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0e264a5be29f84c6dd2ab74cafa821e6"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mlp_8sql__in.html#a0e264a5be29f84c6dd2ab74cafa821e6">mlp_classification</a> ()</td></tr>
+<tr class="separator:a0e264a5be29f84c6dd2ab74cafa821e6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af3b4c5961aee9cbd73fb3659a6e71a6c"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mlp_8sql__in.html#af3b4c5961aee9cbd73fb3659a6e71a6c">mlp_regression</a> (text message)</td></tr>
+<tr class="separator:af3b4c5961aee9cbd73fb3659a6e71a6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a35b3d56f14169bab8a9b93ad4234786b"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mlp_8sql__in.html#a35b3d56f14169bab8a9b93ad4234786b">mlp_regression</a> ()</td></tr>
+<tr class="separator:a35b3d56f14169bab8a9b93ad4234786b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a08142d48d68b51e0d5e8408f4bc2adf8"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mlp_8sql__in.html#a08142d48d68b51e0d5e8408f4bc2adf8">mlp_predict</a> (text message)</td></tr>
+<tr class="separator:a08142d48d68b51e0d5e8408f4bc2adf8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abd5aaa58d22cc31fdbca80f70b018b70"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mlp_8sql__in.html#abd5aaa58d22cc31fdbca80f70b018b70">mlp_predict</a> ()</td></tr>
+<tr class="separator:abd5aaa58d22cc31fdbca80f70b018b70"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>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</p>
+<p><a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a></p>
+<p>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.</p>
+<dl class="section date"><dt>Date</dt><dd>June 2012 </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="ae14405393c46de803ff1c0e11e85fdfb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae14405393c46de803ff1c0e11e85fdfb">&#9670;&nbsp;</a></span>internal_mlp_igd_distance()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 internal_mlp_igd_distance </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a06a6308d58b039b6ae316fdfb9478a46"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a06a6308d58b039b6ae316fdfb9478a46">&#9670;&nbsp;</a></span>internal_mlp_igd_result()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">mlp_result internal_mlp_igd_result </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a603a8dd9a3129e7c959453d6a01cee5b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a603a8dd9a3129e7c959453d6a01cee5b">&#9670;&nbsp;</a></span>internal_mlp_minibatch_result()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">mlp_result internal_mlp_minibatch_result </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa90ab3d6f541a7d5eb8cb7c8a0083c3a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa90ab3d6f541a7d5eb8cb7c8a0083c3a">&#9670;&nbsp;</a></span>internal_predict_mlp()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] internal_predict_mlp </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>coeff</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>is_classification</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>activation</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>layer_sizes</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>is_response</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x_means</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x_stds</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>array_dep_var_for_classification</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a73d39f7b6dd12112d080e5ab851e5f53"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a73d39f7b6dd12112d080e5ab851e5f53">&#9670;&nbsp;</a></span>mlp_classification() <span class="overload">[1/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void mlp_classification </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>hidden_layer_sizes</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>optimizer_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>activation</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>weights</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>warm_start</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>verbose</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_col</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a4f787c902c3a5e656b387a688f262acb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4f787c902c3a5e656b387a688f262acb">&#9670;&nbsp;</a></span>mlp_classification() <span class="overload">[2/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void mlp_classification </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>hidden_layer_sizes</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>optimizer_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>activation</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>weights</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>warm_start</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>verbose</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="af520b5c8c8c737fc23ceb529610dd86b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af520b5c8c8c737fc23ceb529610dd86b">&#9670;&nbsp;</a></span>mlp_classification() <span class="overload">[3/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void mlp_classification </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>hidden_layer_sizes</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>optimizer_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>activation</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>weights</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>warm_start</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a0daa7903ff719803b581aad045101344"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0daa7903ff719803b581aad045101344">&#9670;&nbsp;</a></span>mlp_classification() <span class="overload">[4/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void mlp_classification </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>hidden_layer_sizes</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>optimizer_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>activation</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>weights</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a15c117bcf75101b7aec2fbecf7f851b5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a15c117bcf75101b7aec2fbecf7f851b5">&#9670;&nbsp;</a></span>mlp_classification() <span class="overload">[5/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void mlp_classification </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>hidden_layer_sizes</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>optimizer_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>activation</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5d28bb79f649ab9e3d376bcbdf65f024"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5d28bb79f649ab9e3d376bcbdf65f024">&#9670;&nbsp;</a></span>mlp_classification() <span class="overload">[6/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void mlp_classification </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>hidden_layer_sizes</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>optimizer_params</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa5ae594dad6af4eee8aa2e89fc1fc63c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa5ae594dad6af4eee8aa2e89fc1fc63c">&#9670;&nbsp;</a></span>mlp_classification() <span class="overload">[7/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void mlp_classification </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>hidden_layer_sizes</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa576fa10b9b5c7e555d8037b07f49d07"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa576fa10b9b5c7e555d8037b07f49d07">&#9670;&nbsp;</a></span>mlp_classification() <span class="overload">[8/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text mlp_classification </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a0e264a5be29f84c6dd2ab74cafa821e6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0e264a5be29f84c6dd2ab74cafa821e6">&#9670;&nbsp;</a></span>mlp_classification() <span class="overload">[9/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text mlp_classification </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab0f74b98d0fe97d8c89a7777f40fc9f2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab0f74b98d0fe97d8c89a7777f40fc9f2">&#9670;&nbsp;</a></span>mlp_igd_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] mlp_igd_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab131a5383e05cc40207874a586394323"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab131a5383e05cc40207874a586394323">&#9670;&nbsp;</a></span>mlp_igd_merge()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] mlp_igd_merge </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a01b8c82aaec038e0bd9d5bd208e23f9f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a01b8c82aaec038e0bd9d5bd208e23f9f">&#9670;&nbsp;</a></span>mlp_igd_step()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] mlp_igd_step </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a591b8f7eb778fc57000ff2618fb90b6b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a591b8f7eb778fc57000ff2618fb90b6b">&#9670;&nbsp;</a></span>mlp_igd_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] mlp_igd_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>ind_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>dep_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>previous_state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>layer_sizes</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>learning_rate_init</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>activation</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>is_classification</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>weight</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>warm_start_coeff</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>lambda</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>momentum</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>is_nesterov</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a78190aceb28796d29e3dffc6241b3f55"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a78190aceb28796d29e3dffc6241b3f55">&#9670;&nbsp;</a></span>mlp_minibatch_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] mlp_minibatch_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a4ee983290b6936743645df606ce0b8ba"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4ee983290b6936743645df606ce0b8ba">&#9670;&nbsp;</a></span>mlp_minibatch_merge()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] mlp_minibatch_merge </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5933f1c1f2c41ce92578f67426f69456"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5933f1c1f2c41ce92578f67426f69456">&#9670;&nbsp;</a></span>mlp_minibatch_step()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] mlp_minibatch_step </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aba6da28d2565175ea81f50e735239eaa"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aba6da28d2565175ea81f50e735239eaa">&#9670;&nbsp;</a></span>mlp_minibatch_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] mlp_minibatch_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>ind_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>dep_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>previous_state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>layer_sizes</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>learning_rate_init</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>activation</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>is_classification</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>weight</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>warm_start_coeff</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>lambda</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>batch_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>n_epochs</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>momentum</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>is_nesterov</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a98a7cda6f3fb5ed9734f4838e1c42488"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a98a7cda6f3fb5ed9734f4838e1c42488">&#9670;&nbsp;</a></span>mlp_predict() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void mlp_predict </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>data_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>id_col_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>pred_type</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a08142d48d68b51e0d5e8408f4bc2adf8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a08142d48d68b51e0d5e8408f4bc2adf8">&#9670;&nbsp;</a></span>mlp_predict() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text mlp_predict </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="abd5aaa58d22cc31fdbca80f70b018b70"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abd5aaa58d22cc31fdbca80f70b018b70">&#9670;&nbsp;</a></span>mlp_predict() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text mlp_predict </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a0745971ef78379d5e0a6f59a1e084d3b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0745971ef78379d5e0a6f59a1e084d3b">&#9670;&nbsp;</a></span>mlp_regression() <span class="overload">[1/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void mlp_regression </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>hidden_layer_sizes</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>optimizer_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>activation</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>weights</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>warm_start</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>verbose</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_col</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae5043f0cfce81a69ae0db7f2c8c4a230"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae5043f0cfce81a69ae0db7f2c8c4a230">&#9670;&nbsp;</a></span>mlp_regression() <span class="overload">[2/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void mlp_regression </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>hidden_layer_sizes</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>optimizer_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>activation</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>weights</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>warm_start</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>verbose</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa22e20ac82a36d5c8f34d1687500cc47"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa22e20ac82a36d5c8f34d1687500cc47">&#9670;&nbsp;</a></span>mlp_regression() <span class="overload">[3/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void mlp_regression </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>hidden_layer_sizes</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>optimizer_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>activation</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>weights</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>warm_start</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a9732da677f1cfd6d1997c3a786e578f3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9732da677f1cfd6d1997c3a786e578f3">&#9670;&nbsp;</a></span>mlp_regression() <span class="overload">[4/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void mlp_regression </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>hidden_layer_sizes</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>optimizer_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>activation</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>weights</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a47b00ac83ea4849f984d9f71bce288f1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a47b00ac83ea4849f984d9f71bce288f1">&#9670;&nbsp;</a></span>mlp_regression() <span class="overload">[5/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void mlp_regression </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>hidden_layer_sizes</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>optimizer_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>activation</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a4f96e5b5b480023923db16bbd3a7c158"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4f96e5b5b480023923db16bbd3a7c158">&#9670;&nbsp;</a></span>mlp_regression() <span class="overload">[6/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void mlp_regression </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>hidden_layer_sizes</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>optimizer_params</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="afa76bcdc0ea92342f65f9428dc1c51f6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afa76bcdc0ea92342f65f9428dc1c51f6">&#9670;&nbsp;</a></span>mlp_regression() <span class="overload">[7/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void mlp_regression </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>hidden_layer_sizes</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="af3b4c5961aee9cbd73fb3659a6e71a6c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af3b4c5961aee9cbd73fb3659a6e71a6c">&#9670;&nbsp;</a></span>mlp_regression() <span class="overload">[8/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text mlp_regression </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a35b3d56f14169bab8a9b93ad4234786b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a35b3d56f14169bab8a9b93ad4234786b">&#9670;&nbsp;</a></span>mlp_regression() <span class="overload">[9/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text mlp_regression </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_93c42bb4df0f3e1302223b6dfd48c81e.html">convex</a></li><li class="navelem"><a class="el" href="mlp_8sql__in.html">mlp.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:57 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/modules.html b/docs/rc/modules.html
new file mode 100644
index 0000000..f532dfc
--- /dev/null
+++ b/docs/rc/modules.html
@@ -0,0 +1,232 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: Modules</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('modules.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Modules</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here is a list of all modules:</div><div class="directory">
+<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span><span onclick="javascript:toggleLevel(3);">3</span><span onclick="javascript:toggleLevel(4);">4</span>]</div><table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">&#9660;</span><a class="el" href="group__grp__datatrans.html" target="_self">Data Types and Transformations</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_0_" class="arrow" onclick="toggleFolder('0_0_')">&#9660;</span><a class="el" href="group__grp__arraysmatrix.html" target="_self">Arrays and Matrices</a></td><td class="desc">Mathematical operations for arrays and matrices </td></tr>
+<tr id="row_0_0_0_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a class="el" href="group__grp__array.html" target="_self">Array Operations</a></td><td class="desc">Provides fast array operations supporting other MADlib modules </td></tr>
+<tr id="row_0_0_1_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a class="el" href="group__grp__matrix.html" target="_self">Matrix Operations</a></td><td class="desc">Provides fast matrix operations supporting other MADlib modules </td></tr>
+<tr id="row_0_0_2_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_0_2_" class="arrow" onclick="toggleFolder('0_0_2_')">&#9660;</span><a class="el" href="group__grp__matrix__factorization.html" target="_self">Matrix Factorization</a></td><td class="desc">Linear algebra methods that factorize a matrix into a product of matrices </td></tr>
+<tr id="row_0_0_2_0_"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a class="el" href="group__grp__lmf.html" target="_self">Low-Rank Matrix Factorization</a></td><td class="desc">Performs low-rank matrix factorization for an incomplete matrix </td></tr>
+<tr id="row_0_0_2_1_" class="even"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a class="el" href="group__grp__svd.html" target="_self">Singular Value Decomposition</a></td><td class="desc">Performs factorization of dense and sparse matrices </td></tr>
+<tr id="row_0_0_3_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a class="el" href="group__grp__linalg.html" target="_self">Norms and Distance Functions</a></td><td class="desc">Provides utility functions for basic linear algebra operations </td></tr>
+<tr id="row_0_0_4_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a class="el" href="group__grp__svec.html" target="_self">Sparse Vectors</a></td><td class="desc">Implements a sparse vector data type that provides compressed storage of vectors that may have many duplicate elements </td></tr>
+<tr id="row_0_1_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a class="el" href="group__grp__encode__categorical.html" target="_self">Encoding Categorical Variables</a></td><td class="desc">Functions to encode categorical variables to prepare data for input into predictive algorithms </td></tr>
+<tr id="row_0_2_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a class="el" href="group__grp__path.html" target="_self">Path</a></td><td class="desc">A function to perform complex pattern matching across rows and extract useful information about the matches </td></tr>
+<tr id="row_0_3_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a class="el" href="group__grp__pivot.html" target="_self">Pivot</a></td><td class="desc">Pivoting and data summarization tools for preparing data for modeling operations </td></tr>
+<tr id="row_0_4_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a class="el" href="group__grp__sessionize.html" target="_self">Sessionize</a></td><td class="desc">Session reconstruction of data consisting of a time stampled sequence of events </td></tr>
+<tr id="row_0_5_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a class="el" href="group__grp__stemmer.html" target="_self">Stemming</a></td><td class="desc">Provides porter stemmer operations supporting other MADlib modules </td></tr>
+<tr id="row_1_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_1_" class="arrow" onclick="toggleFolder('1_')">&#9660;</span><a class="el" href="group__grp__graph.html" target="_self">Graph</a></td><td class="desc">Graph algorithms and measures associated with graphs </td></tr>
+<tr id="row_1_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a class="el" href="group__grp__apsp.html" target="_self">All Pairs Shortest Path</a></td><td class="desc">Finds the shortest paths between every vertex pair in a given graph </td></tr>
+<tr id="row_1_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a class="el" href="group__grp__bfs.html" target="_self">Breadth-First Search</a></td><td class="desc">Finds the nodes reachable from a given source vertex using a breadth-first approach </td></tr>
+<tr id="row_1_2_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a class="el" href="group__grp__hits.html" target="_self">HITS</a></td><td class="desc">Find the HITS scores(authority and hub) of all vertices in a directed graph </td></tr>
+<tr id="row_1_3_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_1_3_" class="arrow" onclick="toggleFolder('1_3_')">&#9660;</span><a class="el" href="group__grp__graph__measures.html" target="_self">Measures</a></td><td class="desc">A collection of metrics computed on a graph </td></tr>
+<tr id="row_1_3_0_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a class="el" href="group__grp__graph__avg__path__length.html" target="_self">Average Path Length</a></td><td class="desc">Computes the average shortest-path length of a graph </td></tr>
+<tr id="row_1_3_1_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a class="el" href="group__grp__graph__closeness.html" target="_self">Closeness</a></td><td class="desc">Computes the closeness centrality value of each node in the graph </td></tr>
+<tr id="row_1_3_2_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a class="el" href="group__grp__graph__diameter.html" target="_self">Graph Diameter</a></td><td class="desc">Computes the diameter of a graph </td></tr>
+<tr id="row_1_3_3_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a class="el" href="group__grp__graph__vertex__degrees.html" target="_self">In-Out Degree</a></td><td class="desc">Computes the degrees for each vertex </td></tr>
+<tr id="row_1_4_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a class="el" href="group__grp__pagerank.html" target="_self">PageRank</a></td><td class="desc">Find the PageRank of all vertices in a directed graph </td></tr>
+<tr id="row_1_5_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a class="el" href="group__grp__sssp.html" target="_self">Single Source Shortest Path</a></td><td class="desc">Finds the shortest path from a single source vertex to every other vertex in a given graph </td></tr>
+<tr id="row_1_6_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a class="el" href="group__grp__wcc.html" target="_self">Weakly Connected Components</a></td><td class="desc">Find all weakly connected components of a graph </td></tr>
+<tr id="row_2_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_2_" class="arrow" onclick="toggleFolder('2_')">&#9660;</span><a class="el" href="group__grp__mdl.html" target="_self">Model Selection</a></td><td class="desc">Functions for model selection and model evaluation </td></tr>
+<tr id="row_2_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a class="el" href="group__grp__validation.html" target="_self">Cross Validation</a></td><td class="desc">Estimates the fit of a predictive model given a data set and specifications for the training, prediction, and error estimation functions </td></tr>
+<tr id="row_2_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a class="el" href="group__grp__pred.html" target="_self">Prediction Metrics</a></td><td class="desc">Provides various prediction accuracy metrics </td></tr>
+<tr id="row_2_2_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a class="el" href="group__grp__train__test__split.html" target="_self">Train-Test Split</a></td><td class="desc">A method for splitting a data set into separate training and testing sets </td></tr>
+<tr id="row_3_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_3_" class="arrow" onclick="toggleFolder('3_')">&#9660;</span><a class="el" href="group__grp__sampling.html" target="_self">Sampling</a></td><td class="desc">A collection of methods for sampling from a population </td></tr>
+<tr id="row_3_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a class="el" href="group__grp__balance__sampling.html" target="_self">Balanced Sampling</a></td><td class="desc">A method to independently sample classes to produce a balanced data set. This is commonly used when classes are imbalanced, to ensure that subclasses are adequately represented in the sample </td></tr>
+<tr id="row_3_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a class="el" href="group__grp__strs.html" target="_self">Stratified Sampling</a></td><td class="desc">A method for independently sampling subpopulations (strata) </td></tr>
+<tr id="row_4_"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_4_" class="arrow" onclick="toggleFolder('4_')">&#9660;</span><a class="el" href="group__grp__stats.html" target="_self">Statistics</a></td><td class="desc">A collection of probability and statistics modules </td></tr>
+<tr id="row_4_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_4_0_" class="arrow" onclick="toggleFolder('4_0_')">&#9660;</span><a class="el" href="group__grp__desc__stats.html" target="_self">Descriptive Statistics</a></td><td class="desc">Methods to compute descriptive statistics of a dataset </td></tr>
+<tr id="row_4_0_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_4_0_0_" class="arrow" onclick="toggleFolder('4_0_0_')">&#9660;</span><a class="el" href="group__grp__sketches.html" target="_self">Cardinality Estimators</a></td><td class="desc">Methods to estimate the number of unique values contained in data </td></tr>
+<tr id="row_4_0_0_0_" class="even"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a class="el" href="group__grp__countmin.html" target="_self">CountMin (Cormode-Muthukrishnan)</a></td><td class="desc">Implements Cormode-Mathukrishnan <em>CountMin</em> sketches on integer values as a user-defined aggregate </td></tr>
+<tr id="row_4_0_0_1_"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a class="el" href="group__grp__fmsketch.html" target="_self">FM (Flajolet-Martin)</a></td><td class="desc">Implements Flajolet-Martin's distinct count estimation as a user-defined aggregate </td></tr>
+<tr id="row_4_0_0_2_" class="even"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a class="el" href="group__grp__mfvsketch.html" target="_self">MFV (Most Frequent Values)</a></td><td class="desc">Implements the most frequent values variant of the CountMin sketch as a user-defined aggregate </td></tr>
+<tr id="row_4_0_1_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a class="el" href="group__grp__correlation.html" target="_self">Covariance and Correlation</a></td><td class="desc">Generates a covariance or Pearson correlation matrix for pairs of numeric columns in a table </td></tr>
+<tr id="row_4_0_2_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a class="el" href="group__grp__summary.html" target="_self">Summary</a></td><td class="desc">Calculates general descriptive statistics for any data table </td></tr>
+<tr id="row_4_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_4_1_" class="arrow" onclick="toggleFolder('4_1_')">&#9660;</span><a class="el" href="group__grp__inf__stats.html" target="_self">Inferential Statistics</a></td><td class="desc">Methods to compute inferential statistics of a dataset </td></tr>
+<tr id="row_4_1_0_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a class="el" href="group__grp__stats__tests.html" target="_self">Hypothesis Tests</a></td><td class="desc">Provides functions to perform statistical hypothesis tests </td></tr>
+<tr id="row_4_2_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a class="el" href="group__grp__prob.html" target="_self">Probability Functions</a></td><td class="desc">Provides cumulative distribution, density/mass, and quantile functions for a wide range of probability distributions </td></tr>
+<tr id="row_5_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_5_" class="arrow" onclick="toggleFolder('5_')">&#9660;</span><a class="el" href="group__grp__super.html" target="_self">Supervised Learning</a></td><td class="desc">Methods to perform a variety of supervised learning tasks </td></tr>
+<tr id="row_5_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a class="el" href="group__grp__crf.html" target="_self">Conditional Random Field</a></td><td class="desc">Constructs a Conditional Random Fields (CRF) model for labeling sequential data </td></tr>
+<tr id="row_5_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a class="el" href="group__grp__knn.html" target="_self">k-Nearest Neighbors</a></td><td class="desc">Finds \(k\) nearest data points to the given data point and outputs majority vote value of output classes for classification, or average value of target values for regression </td></tr>
+<tr id="row_5_2_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a class="el" href="group__grp__nn.html" target="_self">Neural Network</a></td><td class="desc">Solves classification and regression problems with several fully connected layers and non-linear activation functions </td></tr>
+<tr id="row_5_3_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_5_3_" class="arrow" onclick="toggleFolder('5_3_')">&#9660;</span><a class="el" href="group__grp__regml.html" target="_self">Regression Models</a></td><td class="desc">A collection of methods for modeling conditional expectation of a response variable </td></tr>
+<tr id="row_5_3_0_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a class="el" href="group__grp__clustered__errors.html" target="_self">Clustered Variance</a></td><td class="desc">Calculates clustered variance for linear, logistic, and multinomial logistic regression models, and Cox proportional hazards models </td></tr>
+<tr id="row_5_3_1_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a class="el" href="group__grp__cox__prop__hazards.html" target="_self">Cox-Proportional Hazards Regression</a></td><td class="desc">Models the relationship between one or more independent predictor variables and the amount of time before an event occurs </td></tr>
+<tr id="row_5_3_2_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a class="el" href="group__grp__elasticnet.html" target="_self">Elastic Net Regularization</a></td><td class="desc">Generates a regularized regression model for variable selection in linear and logistic regression problems, combining the L1 and L2 penalties of the lasso and ridge methods </td></tr>
+<tr id="row_5_3_3_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a class="el" href="group__grp__glm.html" target="_self">Generalized Linear Models</a></td><td class="desc">Estimate generalized linear model (GLM). GLM is a flexible generalization of ordinary linear regression that allows for response variables that have error distribution models other than a normal distribution. The GLM generalizes linear regression by allowing the linear model to be related to the response variable via a link function and by allowing the magnitude of the variance of each measurement to be a function of its predicted value </td></tr>
+<tr id="row_5_3_4_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a class="el" href="group__grp__linreg.html" target="_self">Linear Regression</a></td><td class="desc">Also called Ordinary Least Squares Regression, models linear relationship between a dependent variable and one or more independent variables </td></tr>
+<tr id="row_5_3_5_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a class="el" href="group__grp__logreg.html" target="_self">Logistic Regression</a></td><td class="desc">Models the relationship between one or more predictor variables and a binary categorical dependent variable by predicting the probability of the dependent variable using a logistic function </td></tr>
+<tr id="row_5_3_6_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a class="el" href="group__grp__marginal.html" target="_self">Marginal Effects</a></td><td class="desc">Calculates marginal effects for the coefficients in regression problems </td></tr>
+<tr id="row_5_3_7_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a class="el" href="group__grp__multinom.html" target="_self">Multinomial Regression</a></td><td class="desc">Multinomial regression is to model the conditional distribution of the multinomial response variable using a linear combination of predictors </td></tr>
+<tr id="row_5_3_8_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a class="el" href="group__grp__ordinal.html" target="_self">Ordinal Regression</a></td><td class="desc">Regression to model data with ordinal response variable </td></tr>
+<tr id="row_5_3_9_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a class="el" href="group__grp__robust.html" target="_self">Robust Variance</a></td><td class="desc">Calculates Huber-White variance estimates for linear, logistic, and multinomial regression models, and for Cox proportional hazards models </td></tr>
+<tr id="row_5_4_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a class="el" href="group__grp__svm.html" target="_self">Support Vector Machines</a></td><td class="desc">Solves classification and regression problems by separating data with a hyperplane or other nonlinear decision boundary </td></tr>
+<tr id="row_5_5_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_5_5_" class="arrow" onclick="toggleFolder('5_5_')">&#9660;</span><a class="el" href="group__grp__tree.html" target="_self">Tree Methods</a></td><td class="desc">A collection of recursive partitioning (tree) methods </td></tr>
+<tr id="row_5_5_0_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a class="el" href="group__grp__decision__tree.html" target="_self">Decision Tree</a></td><td class="desc">Decision trees are tree-based supervised learning methods that can be used for classification and regression </td></tr>
+<tr id="row_5_5_1_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a class="el" href="group__grp__random__forest.html" target="_self">Random Forest</a></td><td class="desc">Random forest is an ensemble learning method for classification and regression that construct a multitude of decision trees at training time, then produces the class that is the mean (regression) or mode (classification) of the prediction produced by the individual trees </td></tr>
+<tr id="row_6_"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_6_" class="arrow" onclick="toggleFolder('6_')">&#9660;</span><a class="el" href="group__grp__tsa.html" target="_self">Time Series Analysis</a></td><td class="desc">A collection of methods to analyze time series data </td></tr>
+<tr id="row_6_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a class="el" href="group__grp__arima.html" target="_self">ARIMA</a></td><td class="desc">Generates a model with autoregressive, moving average, and integrated components for a time series dataset </td></tr>
+<tr id="row_7_"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_7_" class="arrow" onclick="toggleFolder('7_')">&#9660;</span><a class="el" href="group__grp__unsupervised.html" target="_self">Unsupervised Learning</a></td><td class="desc">A collection of methods for unsupervised learning tasks </td></tr>
+<tr id="row_7_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_7_0_" class="arrow" onclick="toggleFolder('7_0_')">&#9660;</span><a class="el" href="group__grp__association__rules.html" target="_self">Association Rules</a></td><td class="desc">Methods used to discover patterns in transactional datasets </td></tr>
+<tr id="row_7_0_0_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a class="el" href="group__grp__assoc__rules.html" target="_self">Apriori Algorithm</a></td><td class="desc">Computes association rules for a given set of data </td></tr>
+<tr id="row_7_1_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_7_1_" class="arrow" onclick="toggleFolder('7_1_')">&#9660;</span><a class="el" href="group__grp__clustering.html" target="_self">Clustering</a></td><td class="desc">Methods for clustering data </td></tr>
+<tr id="row_7_1_0_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a class="el" href="group__grp__kmeans.html" target="_self">k-Means Clustering</a></td><td class="desc">Partitions a set of observations into clusters by finding centroids that minimize the sum of observations' distances from their closest centroid </td></tr>
+<tr id="row_7_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_7_2_" class="arrow" onclick="toggleFolder('7_2_')">&#9660;</span><a class="el" href="group__grp__pca.html" target="_self">Dimensionality Reduction</a></td><td class="desc">Methods for reducing the number of variables in a dataset to obtain a set of principle variables </td></tr>
+<tr id="row_7_2_0_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a class="el" href="group__grp__pca__train.html" target="_self">Principal Component Analysis</a></td><td class="desc">Produces a model that transforms a number of (possibly) correlated variables into a (smaller) number of uncorrelated variables called principal components </td></tr>
+<tr id="row_7_2_1_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a class="el" href="group__grp__pca__project.html" target="_self">Principal Component Projection</a></td><td class="desc">Projects a higher dimensional data point to a lower dimensional subspace spanned by principal components learned through the PCA training procedure </td></tr>
+<tr id="row_7_3_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_7_3_" class="arrow" onclick="toggleFolder('7_3_')">&#9660;</span><a class="el" href="group__grp__topic__modelling.html" target="_self">Topic Modelling</a></td><td class="desc">A collection of methods to uncover abstract topics in a document corpus </td></tr>
+<tr id="row_7_3_0_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a class="el" href="group__grp__lda.html" target="_self">Latent Dirichlet Allocation</a></td><td class="desc">Generates a Latent Dirichlet Allocation predictive model for a collection of documents </td></tr>
+<tr id="row_8_"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_8_" class="arrow" onclick="toggleFolder('8_')">&#9660;</span><a class="el" href="group__grp__other__functions.html" target="_self">Utilities</a></td><td class="desc"></td></tr>
+<tr id="row_8_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a class="el" href="group__grp__cols2vec.html" target="_self">Columns to Vector</a></td><td class="desc">Create a new table with all feature columns inserted into a single column as an array </td></tr>
+<tr id="row_8_1_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a class="el" href="group__grp__utilities.html" target="_self">Database Functions</a></td><td class="desc">Provides a collection of user-defined functions for performing common tasks in the database </td></tr>
+<tr id="row_8_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_8_2_" class="arrow" onclick="toggleFolder('8_2_')">&#9660;</span><a class="el" href="group__grp__linear__solver.html" target="_self">Linear Solvers</a></td><td class="desc">Methods that implement solutions for systems of consistent linear equations </td></tr>
+<tr id="row_8_2_0_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a class="el" href="group__grp__dense__linear__solver.html" target="_self">Dense Linear Systems</a></td><td class="desc">Implements solution methods for large dense linear systems. Currently, restricted to problems that fit in memory </td></tr>
+<tr id="row_8_2_1_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a class="el" href="group__grp__sparse__linear__solver.html" target="_self">Sparse Linear Systems</a></td><td class="desc">Implements solution methods for linear systems with sparse matrix input. Currently, restricted to problems that fit in memory </td></tr>
+<tr id="row_8_3_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a class="el" href="group__grp__minibatch__preprocessing.html" target="_self">Mini-Batch Preprocessor</a></td><td class="desc">Utility that prepares input data for use by models that support mini-batch as an optimization option </td></tr>
+<tr id="row_8_4_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a class="el" href="group__grp__pmml.html" target="_self">PMML Export</a></td><td class="desc">Implements the PMML XML standard to describe and exchange models produced by data mining and machine learning algorithms </td></tr>
+<tr id="row_8_5_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a class="el" href="group__grp__text__utilities.html" target="_self">Term Frequency</a></td><td class="desc">Provides a collection of functions for performing common tasks related to text analytics </td></tr>
+<tr id="row_8_6_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a class="el" href="group__grp__vec2cols.html" target="_self">Vector to Columns</a></td><td class="desc">Converts a feature array in a single column of an output table into multiple columns </td></tr>
+<tr id="row_9_"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_9_" class="arrow" onclick="toggleFolder('9_')">&#9660;</span><a class="el" href="group__grp__early__stage.html" target="_self">Early Stage Development</a></td><td class="desc"></td></tr>
+<tr id="row_9_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a class="el" href="group__grp__cg.html" target="_self">Conjugate Gradient</a></td><td class="desc">Finds the solution to the function \( \boldsymbol Ax = \boldsymbol b \), where \(A\) is a symmetric, positive-definite matrix and \(x\) and \( \boldsymbol b \) are vectors </td></tr>
+<tr id="row_9_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_9_1_" class="arrow" onclick="toggleFolder('9_1_')">&#9660;</span><a class="el" href="group__grp__dl.html" target="_self">Deep Learning</a></td><td class="desc">A collection of modules for deep learning </td></tr>
+<tr id="row_9_1_0_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a class="el" href="group__grp__gpu__configuration.html" target="_self">GPU Configuration</a></td><td class="desc">Utility function to report number and type of GPUs in the database cluster </td></tr>
+<tr id="row_9_1_1_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a class="el" href="group__grp__keras.html" target="_self">Keras</a></td><td class="desc">Fit, evaluate and predict using the Keras API </td></tr>
+<tr id="row_9_1_2_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a class="el" href="group__grp__keras__model__arch.html" target="_self">Load Models</a></td><td class="desc">Utility function to load model architectures and weights into a table </td></tr>
+<tr id="row_9_1_3_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_9_1_3_" class="arrow" onclick="toggleFolder('9_1_3_')">&#9660;</span><a class="el" href="group__grp__model__selection.html" target="_self">Model Selection for DL</a></td><td class="desc">Train multiple deep learning models at the same time for model architecture search and hyperparameter selection </td></tr>
+<tr id="row_9_1_3_0_" class="even"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a class="el" href="group__grp__keras__run__model__selection.html" target="_self">Run Model Selection</a></td><td class="desc">Explore network architectures and hyperparameters by training many models a time </td></tr>
+<tr id="row_9_1_3_1_"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a class="el" href="group__grp__keras__setup__model__selection.html" target="_self">Setup Model Selection</a></td><td class="desc">Utility function to set up a model selection table for model architecture search and hyperparameter tuning </td></tr>
+<tr id="row_9_1_4_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a class="el" href="group__grp__input__preprocessor__dl.html" target="_self">Preprocessor for Images</a></td><td class="desc">Utilities that prepare input image data for use by deep learning modules </td></tr>
+<tr id="row_9_2_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a class="el" href="group__grp__bayes.html" target="_self">Naive Bayes Classification</a></td><td class="desc">Constructs a classification model from a dataset where each attribute independently contributes to the probability that a data point belongs to a category </td></tr>
+<tr id="row_9_3_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a class="el" href="group__grp__sample.html" target="_self">Random Sampling</a></td><td class="desc">Provides utility functions for sampling operations </td></tr>
+<tr id="row_10_"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_10_" class="arrow" onclick="toggleFolder('10_')">&#9660;</span><a class="el" href="group__grp__deprecated.html" target="_self">Deprecated Modules</a></td><td class="desc"></td></tr>
+<tr id="row_10_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a class="el" href="group__grp__indicator.html" target="_self">Create Indicator Variables</a></td><td class="desc">Provides utility functions helpful for data preparation before modeling </td></tr>
+<tr id="row_10_1_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a class="el" href="group__grp__mlogreg.html" target="_self">Multinomial Logistic Regression</a></td><td class="desc">Also called as softmax regression, models the relationship between one or more independent variables and a categorical dependent variable </td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Mon Apr 6 2020 21:47:00 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/modules.js b/docs/rc/modules.js
new file mode 100644
index 0000000..fb3f156
--- /dev/null
+++ b/docs/rc/modules.js
@@ -0,0 +1,14 @@
+var modules =
+[
+    [ "Data Types and Transformations", "group__grp__datatrans.html", "group__grp__datatrans" ],
+    [ "Graph", "group__grp__graph.html", "group__grp__graph" ],
+    [ "Model Selection", "group__grp__mdl.html", "group__grp__mdl" ],
+    [ "Sampling", "group__grp__sampling.html", "group__grp__sampling" ],
+    [ "Statistics", "group__grp__stats.html", "group__grp__stats" ],
+    [ "Supervised Learning", "group__grp__super.html", "group__grp__super" ],
+    [ "Time Series Analysis", "group__grp__tsa.html", "group__grp__tsa" ],
+    [ "Unsupervised Learning", "group__grp__unsupervised.html", "group__grp__unsupervised" ],
+    [ "Utilities", "group__grp__other__functions.html", "group__grp__other__functions" ],
+    [ "Early Stage Development", "group__grp__early__stage.html", "group__grp__early__stage" ],
+    [ "Deprecated Modules", "group__grp__deprecated.html", "group__grp__deprecated" ]
+];
\ No newline at end of file
diff --git a/docs/rc/multilogistic_8sql__in.html b/docs/rc/multilogistic_8sql__in.html
new file mode 100644
index 0000000..dcce62c
--- /dev/null
+++ b/docs/rc/multilogistic_8sql__in.html
@@ -0,0 +1,1107 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: multilogistic.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('multilogistic_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">multilogistic.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>SQL functions for multinomial logistic regression.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:aef43e4a6363495901045daf339d5c6d7"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="multilogistic_8sql__in.html#aef43e4a6363495901045daf339d5c6d7">__mlogregr_irls_step_transition</a> (float8[] state, integer y, integer num_categories, integer ref_category, float8[] x, float8[] prev_state)</td></tr>
+<tr class="separator:aef43e4a6363495901045daf339d5c6d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7cae4ea602fc9c159fa2cc8c1a7653a6"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="multilogistic_8sql__in.html#a7cae4ea602fc9c159fa2cc8c1a7653a6">__mlogregr_irls_step_merge_states</a> (float8[] state1, float8[] state2)</td></tr>
+<tr class="separator:a7cae4ea602fc9c159fa2cc8c1a7653a6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a690a74b753dceec66c4e0ad22f50c51e"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="multilogistic_8sql__in.html#a690a74b753dceec66c4e0ad22f50c51e">__mlogregr_irls_step_final</a> (float8[] state)</td></tr>
+<tr class="separator:a690a74b753dceec66c4e0ad22f50c51e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a695395e04b6d95afafc7c8ac9e01b7b2"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="multilogistic_8sql__in.html#a695395e04b6d95afafc7c8ac9e01b7b2">__mlogregr_irls_step</a> (integer y, integer numcategories, integer ref_category, float8[] x, float8[] previous_state)</td></tr>
+<tr class="separator:a695395e04b6d95afafc7c8ac9e01b7b2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aad300d3120db2ecaabf4809cf6be81e7"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="multilogistic_8sql__in.html#aad300d3120db2ecaabf4809cf6be81e7">__internal_mlogregr_irls_step_distance</a> (float8[] state1, float8[] state2)</td></tr>
+<tr class="separator:aad300d3120db2ecaabf4809cf6be81e7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae890704e55f57bd9105b63021e0f86ae"><td class="memItemLeft" align="right" valign="top">mlogregr_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="multilogistic_8sql__in.html#ae890704e55f57bd9105b63021e0f86ae">__internal_mlogregr_irls_result</a> (float8[] state)</td></tr>
+<tr class="separator:ae890704e55f57bd9105b63021e0f86ae"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a48e0f07fcd855a9abcdf6ff070474b73"><td class="memItemLeft" align="right" valign="top">mlogregr_summary_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="multilogistic_8sql__in.html#a48e0f07fcd855a9abcdf6ff070474b73">__internal_mlogregr_summary_results</a> (float8[] state)</td></tr>
+<tr class="separator:a48e0f07fcd855a9abcdf6ff070474b73"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aedc13474e6abbc88451d120ad97e44d4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="multilogistic_8sql__in.html#aedc13474e6abbc88451d120ad97e44d4">mlogregr_train</a> (varchar source_table, varchar output_table, varchar dependent_varname, varchar independent_varname, integer ref_category, varchar optimizer_params)</td></tr>
+<tr class="memdesc:aedc13474e6abbc88451d120ad97e44d4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute multinomial logistic regression coefficients.  <a href="#aedc13474e6abbc88451d120ad97e44d4">More...</a><br /></td></tr>
+<tr class="separator:aedc13474e6abbc88451d120ad97e44d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afea8bd51ec241fa7a749a7c74ae0f580"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="multilogistic_8sql__in.html#afea8bd51ec241fa7a749a7c74ae0f580">mlogregr_train</a> (varchar source_table, varchar output_table, varchar dependent_varname, varchar independent_varname, integer ref_category)</td></tr>
+<tr class="separator:afea8bd51ec241fa7a749a7c74ae0f580"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa596f23c7bcfcd47b051d78de0b99c36"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="multilogistic_8sql__in.html#aa596f23c7bcfcd47b051d78de0b99c36">mlogregr_train</a> (varchar source_table, varchar output_table, varchar dependent_varname, varchar independent_varname)</td></tr>
+<tr class="separator:aa596f23c7bcfcd47b051d78de0b99c36"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0b4643da1ecfcfaf3a1563c820b3347d"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="multilogistic_8sql__in.html#a0b4643da1ecfcfaf3a1563c820b3347d">mlogregr_train</a> (varchar message)</td></tr>
+<tr class="separator:a0b4643da1ecfcfaf3a1563c820b3347d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab8b5a7eb69a945435cba5a068576f2e4"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="multilogistic_8sql__in.html#ab8b5a7eb69a945435cba5a068576f2e4">mlogregr_train</a> ()</td></tr>
+<tr class="separator:ab8b5a7eb69a945435cba5a068576f2e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac7da2fbd9877d94b2f1f013cc000566b"><td class="memItemLeft" align="right" valign="top">integer&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="multilogistic_8sql__in.html#ac7da2fbd9877d94b2f1f013cc000566b">__compute_mlogregr</a> (varchar source_table, varchar dependent_varname, varchar independent_varname, integer num_categories, integer max_iter, varchar optimizer, float8 precision, integer ref_category)</td></tr>
+<tr class="separator:ac7da2fbd9877d94b2f1f013cc000566b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7be20ccb465d47808e18149140fc666f"><td class="memItemLeft" align="right" valign="top">mlogregr_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="multilogistic_8sql__in.html#a7be20ccb465d47808e18149140fc666f">mlogregr</a> (varchar source, varchar depvar, varchar indepvar, integer max_num_iterations=20, varchar optimizer=&quot;irls&quot;, float8 precision=0.0001, integer ref_category)</td></tr>
+<tr class="memdesc:a7be20ccb465d47808e18149140fc666f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute logistic-regression coefficients and diagnostic statistics.  <a href="#a7be20ccb465d47808e18149140fc666f">More...</a><br /></td></tr>
+<tr class="separator:a7be20ccb465d47808e18149140fc666f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a116c95de21b112dedf99035a9b243fd7"><td class="memItemLeft" align="right" valign="top">mlogregr_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="multilogistic_8sql__in.html#a116c95de21b112dedf99035a9b243fd7">mlogregr</a> (varchar source, varchar depvar, varchar indepvar)</td></tr>
+<tr class="separator:a116c95de21b112dedf99035a9b243fd7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1ab68f7396f53ae3e32362240d077cbf"><td class="memItemLeft" align="right" valign="top">mlogregr_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="multilogistic_8sql__in.html#a1ab68f7396f53ae3e32362240d077cbf">mlogregr</a> (varchar source, varchar depvar, varchar indepvar, integer max_num_iterations)</td></tr>
+<tr class="separator:a1ab68f7396f53ae3e32362240d077cbf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae1b5954340a0c98a6ed06eb5f3bb43b8"><td class="memItemLeft" align="right" valign="top">mlogregr_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="multilogistic_8sql__in.html#ae1b5954340a0c98a6ed06eb5f3bb43b8">mlogregr</a> (varchar source, varchar depvar, varchar indepvar, integer max_num_iterations, varchar optimizer)</td></tr>
+<tr class="separator:ae1b5954340a0c98a6ed06eb5f3bb43b8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a55ffab7c3e95b301b3ad5733f185a1ec"><td class="memItemLeft" align="right" valign="top">set&lt; __mlogregr_cat_coef &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="multilogistic_8sql__in.html#a55ffab7c3e95b301b3ad5733f185a1ec">__mlogregr_format</a> (float8[] coef, integer num_feature, integer num_category, integer ref_category)</td></tr>
+<tr class="separator:a55ffab7c3e95b301b3ad5733f185a1ec"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7418e1ce65432793d0889f7e53f668cd"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="multilogistic_8sql__in.html#a7418e1ce65432793d0889f7e53f668cd">__mlogregr_predict_prob</a> (float8[] coef, integer ref_category, float8[] col_ind_var)</td></tr>
+<tr class="separator:a7418e1ce65432793d0889f7e53f668cd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad5e9a79ac38439db8ecd25148ca6f244"><td class="memItemLeft" align="right" valign="top">integer&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="multilogistic_8sql__in.html#ad5e9a79ac38439db8ecd25148ca6f244">__mlogregr_predict_response</a> (float8[] coef, integer ref_category, float8[] col_ind_var)</td></tr>
+<tr class="separator:ad5e9a79ac38439db8ecd25148ca6f244"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a00f0c988e1b2b2fee9e4021450840061"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="multilogistic_8sql__in.html#a00f0c988e1b2b2fee9e4021450840061">mlogregr_predict</a> (text model, text source, text id_col_name, text output, text pred_type)</td></tr>
+<tr class="separator:a00f0c988e1b2b2fee9e4021450840061"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4c61f2fd5a67a7babb700fdfbd4d146f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="multilogistic_8sql__in.html#a4c61f2fd5a67a7babb700fdfbd4d146f">mlogregr_predict</a> (text model, text source, text id_col_name, text output)</td></tr>
+<tr class="separator:a4c61f2fd5a67a7babb700fdfbd4d146f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0fdfed54d63cefe260a0b74b9c7bbad5"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="multilogistic_8sql__in.html#a0fdfed54d63cefe260a0b74b9c7bbad5">mlogregr_predict</a> (text message)</td></tr>
+<tr class="separator:a0fdfed54d63cefe260a0b74b9c7bbad5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><dl class="section date"><dt>Date</dt><dd>July 2012</dd></dl>
+<dl class="section see"><dt>See also</dt><dd>For a brief introduction to multinomial <a class="el" href="logistic_8sql__in.html#a4ded9be5c8b111dbb3109efaad83d69e" title="Evaluate the usual logistic function in an under-/overflow-safe way. ">logistic</a> regression, see the module description <a class="el" href="group__grp__mlogreg.html">Multinomial Logistic Regression</a>. </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="ac7da2fbd9877d94b2f1f013cc000566b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac7da2fbd9877d94b2f1f013cc000566b">&#9670;&nbsp;</a></span>__compute_mlogregr()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">integer __compute_mlogregr </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_categories</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_iter</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>optimizer</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>precision</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>ref_category</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae890704e55f57bd9105b63021e0f86ae"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae890704e55f57bd9105b63021e0f86ae">&#9670;&nbsp;</a></span>__internal_mlogregr_irls_result()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">mlogregr_result __internal_mlogregr_irls_result </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aad300d3120db2ecaabf4809cf6be81e7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aad300d3120db2ecaabf4809cf6be81e7">&#9670;&nbsp;</a></span>__internal_mlogregr_irls_step_distance()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 __internal_mlogregr_irls_step_distance </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a48e0f07fcd855a9abcdf6ff070474b73"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a48e0f07fcd855a9abcdf6ff070474b73">&#9670;&nbsp;</a></span>__internal_mlogregr_summary_results()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">mlogregr_summary_result __internal_mlogregr_summary_results </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a55ffab7c3e95b301b3ad5733f185a1ec"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a55ffab7c3e95b301b3ad5733f185a1ec">&#9670;&nbsp;</a></span>__mlogregr_format()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">set&lt;__mlogregr_cat_coef&gt; __mlogregr_format </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>coef</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_feature</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_category</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>ref_category</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a695395e04b6d95afafc7c8ac9e01b7b2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a695395e04b6d95afafc7c8ac9e01b7b2">&#9670;&nbsp;</a></span>__mlogregr_irls_step()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] __mlogregr_irls_step </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>numcategories</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>ref_category</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>previous_state</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a690a74b753dceec66c4e0ad22f50c51e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a690a74b753dceec66c4e0ad22f50c51e">&#9670;&nbsp;</a></span>__mlogregr_irls_step_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __mlogregr_irls_step_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7cae4ea602fc9c159fa2cc8c1a7653a6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7cae4ea602fc9c159fa2cc8c1a7653a6">&#9670;&nbsp;</a></span>__mlogregr_irls_step_merge_states()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __mlogregr_irls_step_merge_states </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aef43e4a6363495901045daf339d5c6d7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aef43e4a6363495901045daf339d5c6d7">&#9670;&nbsp;</a></span>__mlogregr_irls_step_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __mlogregr_irls_step_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_categories</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>ref_category</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>prev_state</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7418e1ce65432793d0889f7e53f668cd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7418e1ce65432793d0889f7e53f668cd">&#9670;&nbsp;</a></span>__mlogregr_predict_prob()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __mlogregr_predict_prob </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>coef</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>ref_category</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>col_ind_var</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ad5e9a79ac38439db8ecd25148ca6f244"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad5e9a79ac38439db8ecd25148ca6f244">&#9670;&nbsp;</a></span>__mlogregr_predict_response()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">integer __mlogregr_predict_response </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>coef</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>ref_category</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>col_ind_var</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7be20ccb465d47808e18149140fc666f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7be20ccb465d47808e18149140fc666f">&#9670;&nbsp;</a></span>mlogregr() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">mlogregr_result mlogregr </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>depvar</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>indepvar</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_num_iterations</em> = <code>20</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>optimizer</em> = <code>&quot;irls&quot;</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>precision</em> = <code>0.0001</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>ref_category</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>To include an intercept in the model, set one coordinate in the <code>independentVariables</code> array to 1.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">source</td><td>Name of the source relation containing the training data </td></tr>
+    <tr><td class="paramname">depvar</td><td>Name of the dependent column (of type INTEGER &lt; numcategories) </td></tr>
+    <tr><td class="paramname">indepvar</td><td>Name of the independent column (of type DOUBLE PRECISION[]) </td></tr>
+    <tr><td class="paramname">max_num_iterations</td><td>The maximum number of iterations </td></tr>
+    <tr><td class="paramname">optimizer</td><td>The optimizer to use ( <code>'irls'</code>/<code>'newton'</code> for iteratively reweighted least squares) </td></tr>
+    <tr><td class="paramname">precision</td><td>The difference between log-likelihood values in successive iterations that should indicate convergence. Note that a non-positive value here disables the convergence criterion, and execution will only stop after \ max_num_iterations iterations. </td></tr>
+    <tr><td class="paramname">ref_category</td><td>The reference category specified by the user</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>A composite value:<ul>
+<li><code>ref_category INTEGER</code> - Reference category</li>
+<li><code>coef FLOAT8[]</code> - Array of coefficients, \( \boldsymbol c \)</li>
+<li><code>log_likelihood FLOAT8</code> - Log-likelihood \( l(\boldsymbol c) \)</li>
+<li><code>std_err FLOAT8[]</code> - Array of standard errors, \( \mathit{se}(c_1), \dots, \mathit{se}(c_k) \)</li>
+<li><code>z_stats FLOAT8[]</code> - Array of Wald z-statistics, \( \boldsymbol z \)</li>
+<li><code>p_values FLOAT8[]</code> - Array of Wald p-values, \( \boldsymbol p \)</li>
+<li><code>odds_ratios FLOAT8[]</code>: Array of odds ratios, \( \mathit{odds}(c_1), \dots, \mathit{odds}(c_k) \)</li>
+<li><code>condition_no FLOAT8</code> - The condition number of matrix \( X^T A X \) during the iteration immediately <em>preceding</em> convergence (i.e., \( A \) is computed using the coefficients of the previous iteration)</li>
+<li><code>num_iterations INTEGER</code> - The number of iterations before the algorithm terminated</li>
+</ul>
+</dd></dl>
+<dl class="section user"><dt>Usage</dt><dd><ul>
+<li>Get vector of coefficients \( \boldsymbol c \) and all diagnostic statistics:<br />
+ <pre>SELECT * FROM mlogregr('<em>sourceName</em>', '<em>dependentVariable</em>',
+   '<em>numCategories</em>', '<em>independentVariables</em>');</pre></li>
+<li>Get vector of coefficients \( \boldsymbol c \):<br />
+ <pre>SELECT (mlogregr('<em>sourceName</em>', '<em>dependentVariable</em>',
+   '<em>numCategories</em>', '<em>independentVariables</em>')).coef;</pre></li>
+<li>Get a subset of the output columns, e.g., only the array of coefficients \( \boldsymbol c \), the log-likelihood of determination \( l(\boldsymbol c) \), and the array of p-values \( \boldsymbol p \): <pre>SELECT coef, log_likelihood, p_values
+   FROM mlogregr('<em>sourceName</em>', '<em>dependentVariable</em>',
+  '<em>numCategories</em>', '<em>independentVariables</em>');</pre></li>
+</ul>
+</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function starts an iterative algorithm. It is not an aggregate function. Source and column names have to be passed as strings (due to limitations of the SQL syntax). </dd></dl>
+
+</div>
+</div>
+<a id="a116c95de21b112dedf99035a9b243fd7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a116c95de21b112dedf99035a9b243fd7">&#9670;&nbsp;</a></span>mlogregr() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">mlogregr_result mlogregr </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>depvar</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>indepvar</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1ab68f7396f53ae3e32362240d077cbf"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1ab68f7396f53ae3e32362240d077cbf">&#9670;&nbsp;</a></span>mlogregr() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">mlogregr_result mlogregr </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>depvar</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>indepvar</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_num_iterations</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae1b5954340a0c98a6ed06eb5f3bb43b8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae1b5954340a0c98a6ed06eb5f3bb43b8">&#9670;&nbsp;</a></span>mlogregr() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">mlogregr_result mlogregr </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>depvar</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>indepvar</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_num_iterations</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>optimizer</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a00f0c988e1b2b2fee9e4021450840061"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a00f0c988e1b2b2fee9e4021450840061">&#9670;&nbsp;</a></span>mlogregr_predict() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void mlogregr_predict </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>model</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>id_col_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pred_type</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a4c61f2fd5a67a7babb700fdfbd4d146f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4c61f2fd5a67a7babb700fdfbd4d146f">&#9670;&nbsp;</a></span>mlogregr_predict() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void mlogregr_predict </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>model</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>id_col_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a0fdfed54d63cefe260a0b74b9c7bbad5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0fdfed54d63cefe260a0b74b9c7bbad5">&#9670;&nbsp;</a></span>mlogregr_predict() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text mlogregr_predict </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aedc13474e6abbc88451d120ad97e44d4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aedc13474e6abbc88451d120ad97e44d4">&#9670;&nbsp;</a></span>mlogregr_train() <span class="overload">[1/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void mlogregr_train </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>ref_category</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>optimizer_params</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>To include an intercept in the model, set one coordinate in the <code>independentVariables</code> array to 1.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">source_table</td><td>Name of the source relation containing the training data </td></tr>
+    <tr><td class="paramname">output_table</td><td>Name of the output relation to contain the resulting model </td></tr>
+    <tr><td class="paramname">dependent_varname</td><td>Name of the dependent column (of type INTEGER) </td></tr>
+    <tr><td class="paramname">independent_varname</td><td>Name of the independent column (or an array expression) </td></tr>
+    <tr><td class="paramname">ref_category</td><td>The reference category specified by the user </td></tr>
+    <tr><td class="paramname">optimizer_params</td><td>Comma-separated list of parameters for the optimizer function</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>An output table (named 'output_table' above) containing following columns:<ul>
+<li><code>ref_category INTEGER</code> - Reference category</li>
+<li><code>coef FLOAT8[]</code> - Array of coefficients, \( \boldsymbol c \)</li>
+<li><code>log_likelihood FLOAT8</code> - Log-likelihood \( l(\boldsymbol c) \)</li>
+<li><code>std_err FLOAT8[]</code> - Array of standard errors, \( \mathit{se}(c_1), \dots, \mathit{se}(c_k) \)</li>
+<li><code>z_stats FLOAT8[]</code> - Array of Wald z-statistics, \( \boldsymbol z \)</li>
+<li><code>p_values FLOAT8[]</code> - Array of Wald p-values, \( \boldsymbol p \)</li>
+<li><code>odds_ratios FLOAT8[]</code>: Array of odds ratios, \( \mathit{odds}(c_1), \dots, \mathit{odds}(c_k) \)</li>
+<li><code>condition_no FLOAT8</code> - The condition number of matrix \( X^T A X \) during the iteration immediately <em>preceding</em> convergence (i.e., \( A \) is computed using the coefficients of the previous iteration) An output table (named 'output_table'_summary) containing following columns:</li>
+<li><code>regression_type VARCHAR</code> - The regression type run (in this case it will be 'mlogit')</li>
+<li><code>source_table VARCHAR</code> - Source table containing the training data</li>
+<li><code>output_table VARCHAR</code> - Output table containing the trained model</li>
+<li><code>dependent_varname VARCHAR</code> - Name of the dependent column used for training</li>
+<li><code>independent_varname VARCHAR</code> - Name of the independent column used for training (or the ARRAY expression used for training)</li>
+<li><code>ref_category INTEGER</code> - The reference category specified by the user</li>
+<li><code>num_iterations INTEGER</code> - The number of iterations before the algorithm terminated</li>
+<li><code>num_rows_processed INTEGER</code> - The number of rows from training data used for training</li>
+<li><code>num_missing_rows_skipped INTEGER</code> - The number of rows skipped during training</li>
+</ul>
+</dd></dl>
+<dl class="section user"><dt>Usage</dt><dd><ul>
+<li>Get vector of coefficients \( \boldsymbol c \) and all diagnostic statistics:<br />
+ <pre>SELECT mlogregr_train('<em>sourceName</em>', '<em>outputName</em>',
+         '<em>dependentVariable</em>', '<em>independentVariables</em>');
+         SELECT * from <em>outputName</em>;
+   </pre></li>
+<li>Get vector of coefficients \( \boldsymbol c \):<br />
+ <pre>SELECT coef from <em>outputName</em>;</pre></li>
+<li>Get a subset of the output columns, e.g., only the array of coefficients \( \boldsymbol c \), the log-likelihood of determination \( l(\boldsymbol c) \), and the array of p-values \( \boldsymbol p \): <pre>SELECT coef, log_likelihood, p_values
+   FROM <em>outputName</em>;</pre> </li>
+</ul>
+</dd></dl>
+
+</div>
+</div>
+<a id="afea8bd51ec241fa7a749a7c74ae0f580"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afea8bd51ec241fa7a749a7c74ae0f580">&#9670;&nbsp;</a></span>mlogregr_train() <span class="overload">[2/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void mlogregr_train </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>ref_category</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa596f23c7bcfcd47b051d78de0b99c36"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa596f23c7bcfcd47b051d78de0b99c36">&#9670;&nbsp;</a></span>mlogregr_train() <span class="overload">[3/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void mlogregr_train </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a0b4643da1ecfcfaf3a1563c820b3347d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0b4643da1ecfcfaf3a1563c820b3347d">&#9670;&nbsp;</a></span>mlogregr_train() <span class="overload">[4/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar mlogregr_train </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab8b5a7eb69a945435cba5a068576f2e4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab8b5a7eb69a945435cba5a068576f2e4">&#9670;&nbsp;</a></span>mlogregr_train() <span class="overload">[5/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar mlogregr_train </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_ac52a4b89b7b1b1591f2952b5cbd041a.html">regress</a></li><li class="navelem"><a class="el" href="multilogistic_8sql__in.html">multilogistic.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:57 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/multiresponseglm_8sql__in.html b/docs/rc/multiresponseglm_8sql__in.html
new file mode 100644
index 0000000..bc8503e
--- /dev/null
+++ b/docs/rc/multiresponseglm_8sql__in.html
@@ -0,0 +1,240 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: multiresponseglm.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('multiresponseglm_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">multiresponseglm.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>SQL functions for multinomial regression.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ac08c2fc81967cc26f8475cc0495fb4ec"><td class="memItemLeft" align="right" valign="top">bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="multiresponseglm_8sql__in.html#ac08c2fc81967cc26f8475cc0495fb4ec">__multinom_merge_states</a> (bytea8 state1, bytea8 state2)</td></tr>
+<tr class="separator:ac08c2fc81967cc26f8475cc0495fb4ec"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab0f66e577e5734114060cef6bfe9a36b"><td class="memItemLeft" align="right" valign="top">bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="multiresponseglm_8sql__in.html#ab0f66e577e5734114060cef6bfe9a36b">__multinom_final</a> (bytea8 state)</td></tr>
+<tr class="separator:ab0f66e577e5734114060cef6bfe9a36b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afcd02b370d023e2faf028390f2b7f0c7"><td class="memItemLeft" align="right" valign="top">bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="multiresponseglm_8sql__in.html#afcd02b370d023e2faf028390f2b7f0c7">__multinom_logit_transition</a> (bytea8, float8, float8[], bytea8, smallint)</td></tr>
+<tr class="separator:afcd02b370d023e2faf028390f2b7f0c7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><dl class="section date"><dt>Date</dt><dd>July 2014</dd></dl>
+<dl class="section see"><dt>See also</dt><dd>For a brief introduction to multinomial regression, see the module description <a class="el" href="group__grp__multinom.html">Multinomial Regression</a>. </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="ab0f66e577e5734114060cef6bfe9a36b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab0f66e577e5734114060cef6bfe9a36b">&#9670;&nbsp;</a></span>__multinom_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea8 __multinom_final </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="afcd02b370d023e2faf028390f2b7f0c7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afcd02b370d023e2faf028390f2b7f0c7">&#9670;&nbsp;</a></span>__multinom_logit_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea8 __multinom_logit_transition </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">smallint&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac08c2fc81967cc26f8475cc0495fb4ec"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac08c2fc81967cc26f8475cc0495fb4ec">&#9670;&nbsp;</a></span>__multinom_merge_states()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea8 __multinom_merge_states </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_e502304d8bc7f1ef2456a474c6d92acd.html">glm</a></li><li class="navelem"><a class="el" href="multiresponseglm_8sql__in.html">multiresponseglm.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:57 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/nav_f.png b/docs/rc/nav_f.png
new file mode 100644
index 0000000..72a58a5
--- /dev/null
+++ b/docs/rc/nav_f.png
Binary files differ
diff --git a/docs/rc/nav_g.png b/docs/rc/nav_g.png
new file mode 100644
index 0000000..2093a23
--- /dev/null
+++ b/docs/rc/nav_g.png
Binary files differ
diff --git a/docs/rc/nav_h.png b/docs/rc/nav_h.png
new file mode 100644
index 0000000..33389b1
--- /dev/null
+++ b/docs/rc/nav_h.png
Binary files differ
diff --git a/docs/rc/navtree.css b/docs/rc/navtree.css
new file mode 100644
index 0000000..0cc7e77
--- /dev/null
+++ b/docs/rc/navtree.css
@@ -0,0 +1,146 @@
+#nav-tree .children_ul {
+  margin:0;
+  padding:4px;
+}
+
+#nav-tree ul {
+  list-style:none outside none;
+  margin:0px;
+  padding:0px;
+}
+
+#nav-tree li {
+  white-space:nowrap;
+  margin:0px;
+  padding:0px;
+}
+
+#nav-tree .plus {
+  margin:0px;
+}
+
+#nav-tree .selected {
+  background-image: url('tab_a.png');
+  background-repeat:repeat-x;
+  color: #fff;
+  text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+}
+
+#nav-tree img {
+  margin:0px;
+  padding:0px;
+  border:0px;
+  vertical-align: middle;
+}
+
+#nav-tree a {
+  text-decoration:none;
+  padding:0px;
+  margin:0px;
+  outline:none;
+}
+
+#nav-tree .label {
+  margin:0px;
+  padding:0px;
+  font: 12px 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+}
+
+#nav-tree .label a {
+  padding:2px;
+}
+
+#nav-tree .selected a {
+  text-decoration:none;
+  color:#fff;
+}
+
+#nav-tree .children_ul {
+  margin:0px;
+  padding:0px;
+}
+
+#nav-tree .item {
+  margin:0px;
+  padding:0px;
+}
+
+#nav-tree {
+  padding: 0px 0px;
+  background-color: #FAFAFF; 
+  font-size:14px;
+  overflow:auto;
+}
+
+#doc-content {
+  overflow:auto;
+  display:block;
+  padding:0px;
+  margin:0px;
+  -webkit-overflow-scrolling : touch; /* iOS 5+ */
+}
+
+#side-nav {
+  padding:0 6px 0 0;
+  margin: 0px;
+  display:block;
+  position: absolute;
+  left: 0px;
+  width: 250px;
+}
+
+.ui-resizable .ui-resizable-handle {
+  display:block;
+}
+
+.ui-resizable-e {
+  background-image:url("splitbar.png");
+  background-size:100%;
+  background-repeat:no-repeat;
+  background-attachment: scroll;
+  cursor:ew-resize;
+  height:100%;
+  right:0;
+  top:0;
+  width:6px;
+}
+
+.ui-resizable-handle {
+  display:none;
+  font-size:0.1px;
+  position:absolute;
+  z-index:1;
+}
+
+#nav-tree-contents {
+  margin: 6px 0px 0px 0px;
+}
+
+#nav-tree {
+  background-image:url('nav_h.png');
+  background-repeat:repeat-x;
+  background-color: #F9FAFC;
+  -webkit-overflow-scrolling : touch; /* iOS 5+ */
+}
+
+#nav-sync {
+  position:absolute;
+  top:5px;
+  right:24px;
+  z-index:0;
+}
+
+#nav-sync img {
+  opacity:0.3;
+}
+
+#nav-sync img:hover {
+  opacity:0.9;
+}
+
+@media print
+{
+  #nav-tree { display: none; }
+  div.ui-resizable-handle { display: none; position: relative; }
+}
+
diff --git a/docs/rc/navtree.js b/docs/rc/navtree.js
new file mode 100644
index 0000000..e6d31b0
--- /dev/null
+++ b/docs/rc/navtree.js
@@ -0,0 +1,517 @@
+var navTreeSubIndices = new Array();
+var arrowDown = '&#9660;';
+var arrowRight = '&#9658;';
+
+function getData(varName)
+{
+  var i = varName.lastIndexOf('/');
+  var n = i>=0 ? varName.substring(i+1) : varName;
+  return eval(n.replace(/\-/g,'_'));
+}
+
+function stripPath(uri)
+{
+  return uri.substring(uri.lastIndexOf('/')+1);
+}
+
+function stripPath2(uri)
+{
+  var i = uri.lastIndexOf('/');
+  var s = uri.substring(i+1);
+  var m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/);
+  return m ? uri.substring(i-6) : s;
+}
+
+function hashValue()
+{
+  return $(location).attr('hash').substring(1).replace(/[^\w\-]/g,'');
+}
+
+function hashUrl()
+{
+  return '#'+hashValue();
+}
+
+function pathName()
+{
+  return $(location).attr('pathname').replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;\(\)]/g, '');
+}
+
+function localStorageSupported()
+{
+  try {
+    return 'localStorage' in window && window['localStorage'] !== null && window.localStorage.getItem;
+  }
+  catch(e) {
+    return false;
+  }
+}
+
+
+function storeLink(link)
+{
+  if (!$("#nav-sync").hasClass('sync') && localStorageSupported()) {
+      window.localStorage.setItem('navpath',link);
+  }
+}
+
+function deleteLink()
+{
+  if (localStorageSupported()) {
+    window.localStorage.setItem('navpath','');
+  }
+}
+
+function cachedLink()
+{
+  if (localStorageSupported()) {
+    return window.localStorage.getItem('navpath');
+  } else {
+    return '';
+  }
+}
+
+function getScript(scriptName,func,show)
+{
+  var head = document.getElementsByTagName("head")[0];
+  var script = document.createElement('script');
+  script.id = scriptName;
+  script.type = 'text/javascript';
+  script.onload = func;
+  script.src = scriptName+'.js';
+  if ($.browser.msie && $.browser.version<=8) {
+    // script.onload does not work with older versions of IE
+    script.onreadystatechange = function() {
+      if (script.readyState=='complete' || script.readyState=='loaded') {
+        func(); if (show) showRoot();
+      }
+    }
+  }
+  head.appendChild(script); 
+}
+
+function createIndent(o,domNode,node,level)
+{
+  var level=-1;
+  var n = node;
+  while (n.parentNode) { level++; n=n.parentNode; }
+  if (node.childrenData) {
+    var imgNode = document.createElement("span");
+    imgNode.className = 'arrow';
+    imgNode.style.paddingLeft=(16*level).toString()+'px';
+    imgNode.innerHTML=arrowRight;
+    node.plus_img = imgNode;
+    node.expandToggle = document.createElement("a");
+    node.expandToggle.href = "javascript:void(0)";
+    node.expandToggle.onclick = function() {
+      if (node.expanded) {
+        $(node.getChildrenUL()).slideUp("fast");
+        node.plus_img.innerHTML=arrowRight;
+        node.expanded = false;
+      } else {
+        expandNode(o, node, false, false);
+      }
+    }
+    node.expandToggle.appendChild(imgNode);
+    domNode.appendChild(node.expandToggle);
+  } else {
+    var span = document.createElement("span");
+    span.className = 'arrow';
+    span.style.width   = 16*(level+1)+'px';
+    span.innerHTML = '&#160;';
+    domNode.appendChild(span);
+  }
+}
+
+var animationInProgress = false;
+
+function gotoAnchor(anchor,aname,updateLocation)
+{
+  var pos, docContent = $('#doc-content');
+  var ancParent = $(anchor.parent());
+  if (ancParent.hasClass('memItemLeft') ||
+      ancParent.hasClass('fieldname') ||
+      ancParent.hasClass('fieldtype') ||
+      ancParent.is(':header'))
+  {
+    pos = ancParent.position().top;
+  } else if (anchor.position()) {
+    pos = anchor.position().top;
+  }
+  if (pos) {
+    var dist = Math.abs(Math.min(
+               pos-docContent.offset().top,
+               docContent[0].scrollHeight-
+               docContent.height()-docContent.scrollTop()));
+    animationInProgress=true;
+    docContent.animate({
+      scrollTop: pos + docContent.scrollTop() - docContent.offset().top
+    },Math.max(50,Math.min(500,dist)),function(){
+      if (updateLocation) window.location.href=aname;
+      animationInProgress=false;
+    });
+  }
+}
+
+function newNode(o, po, text, link, childrenData, lastNode)
+{
+  var node = new Object();
+  node.children = Array();
+  node.childrenData = childrenData;
+  node.depth = po.depth + 1;
+  node.relpath = po.relpath;
+  node.isLast = lastNode;
+
+  node.li = document.createElement("li");
+  po.getChildrenUL().appendChild(node.li);
+  node.parentNode = po;
+
+  node.itemDiv = document.createElement("div");
+  node.itemDiv.className = "item";
+
+  node.labelSpan = document.createElement("span");
+  node.labelSpan.className = "label";
+
+  createIndent(o,node.itemDiv,node,0);
+  node.itemDiv.appendChild(node.labelSpan);
+  node.li.appendChild(node.itemDiv);
+
+  var a = document.createElement("a");
+  node.labelSpan.appendChild(a);
+  node.label = document.createTextNode(text);
+  node.expanded = false;
+  a.appendChild(node.label);
+  if (link) {
+    var url;
+    if (link.substring(0,1)=='^') {
+      url = link.substring(1);
+      link = url;
+    } else {
+      url = node.relpath+link;
+    }
+    a.className = stripPath(link.replace('#',':'));
+    if (link.indexOf('#')!=-1) {
+      var aname = '#'+link.split('#')[1];
+      var srcPage = stripPath(pathName());
+      var targetPage = stripPath(link.split('#')[0]);
+      a.href = srcPage!=targetPage ? url : "javascript:void(0)";
+      a.onclick = function(){
+        storeLink(link);
+        if (!$(a).parent().parent().hasClass('selected'))
+        {
+          $('.item').removeClass('selected');
+          $('.item').removeAttr('id');
+          $(a).parent().parent().addClass('selected');
+          $(a).parent().parent().attr('id','selected');
+        }
+        var anchor = $(aname);
+        gotoAnchor(anchor,aname,true);
+      };
+    } else {
+      a.href = url;
+      a.onclick = function() { storeLink(link); }
+    }
+  } else {
+    if (childrenData != null)
+    {
+      a.className = "nolink";
+      a.href = "javascript:void(0)";
+      a.onclick = node.expandToggle.onclick;
+    }
+  }
+
+  node.childrenUL = null;
+  node.getChildrenUL = function() {
+    if (!node.childrenUL) {
+      node.childrenUL = document.createElement("ul");
+      node.childrenUL.className = "children_ul";
+      node.childrenUL.style.display = "none";
+      node.li.appendChild(node.childrenUL);
+    }
+    return node.childrenUL;
+  };
+
+  return node;
+}
+
+function showRoot()
+{
+  var headerHeight = $("#top").height();
+  var footerHeight = $("#nav-path").height();
+  var windowHeight = $(window).height() - headerHeight - footerHeight;
+  (function (){ // retry until we can scroll to the selected item
+    try {
+      var navtree=$('#nav-tree');
+      navtree.scrollTo('#selected',0,{offset:-windowHeight/2});
+    } catch (err) {
+      setTimeout(arguments.callee, 0);
+    }
+  })();
+}
+
+function expandNode(o, node, imm, showRoot)
+{
+  if (node.childrenData && !node.expanded) {
+    if (typeof(node.childrenData)==='string') {
+      var varName    = node.childrenData;
+      getScript(node.relpath+varName,function(){
+        node.childrenData = getData(varName);
+        expandNode(o, node, imm, showRoot);
+      }, showRoot);
+    } else {
+      if (!node.childrenVisited) {
+        getNode(o, node);
+      } if (imm || ($.browser.msie && $.browser.version>8)) {
+        // somehow slideDown jumps to the start of tree for IE9 :-(
+        $(node.getChildrenUL()).show();
+      } else {
+        $(node.getChildrenUL()).slideDown("fast");
+      }
+      node.plus_img.innerHTML = arrowDown;
+      node.expanded = true;
+    }
+  }
+}
+
+function glowEffect(n,duration)
+{
+  n.addClass('glow').delay(duration).queue(function(next){
+    $(this).removeClass('glow');next();
+  });
+}
+
+function highlightAnchor()
+{
+  var aname = hashUrl();
+  var anchor = $(aname);
+  if (anchor.parent().attr('class')=='memItemLeft'){
+    var rows = $('.memberdecls tr[class$="'+hashValue()+'"]');
+    glowEffect(rows.children(),300); // member without details
+  } else if (anchor.parent().attr('class')=='fieldname'){
+    glowEffect(anchor.parent().parent(),1000); // enum value
+  } else if (anchor.parent().attr('class')=='fieldtype'){
+    glowEffect(anchor.parent().parent(),1000); // struct field
+  } else if (anchor.parent().is(":header")) {
+    glowEffect(anchor.parent(),1000); // section header
+  } else {
+    glowEffect(anchor.next(),1000); // normal member
+  }
+  gotoAnchor(anchor,aname,false);
+}
+
+function selectAndHighlight(hash,n)
+{
+  var a;
+  if (hash) {
+    var link=stripPath(pathName())+':'+hash.substring(1);
+    a=$('.item a[class$="'+link+'"]');
+  }
+  if (a && a.length) {
+    a.parent().parent().addClass('selected');
+    a.parent().parent().attr('id','selected');
+    highlightAnchor();
+  } else if (n) {
+    $(n.itemDiv).addClass('selected');
+    $(n.itemDiv).attr('id','selected');
+  }
+  if ($('#nav-tree-contents .item:first').hasClass('selected')) {
+    $('#nav-sync').css('top','30px');
+  } else {
+    $('#nav-sync').css('top','5px');
+  }
+  showRoot();
+}
+
+function showNode(o, node, index, hash)
+{
+  if (node && node.childrenData) {
+    if (typeof(node.childrenData)==='string') {
+      var varName    = node.childrenData;
+      getScript(node.relpath+varName,function(){
+        node.childrenData = getData(varName);
+        showNode(o,node,index,hash);
+      },true);
+    } else {
+      if (!node.childrenVisited) {
+        getNode(o, node);
+      }
+      $(node.getChildrenUL()).css({'display':'block'});
+      node.plus_img.innerHTML = arrowDown;
+      node.expanded = true;
+      var n = node.children[o.breadcrumbs[index]];
+      if (index+1<o.breadcrumbs.length) {
+        showNode(o,n,index+1,hash);
+      } else {
+        if (typeof(n.childrenData)==='string') {
+          var varName = n.childrenData;
+          getScript(n.relpath+varName,function(){
+            n.childrenData = getData(varName);
+            node.expanded=false;
+            showNode(o,node,index,hash); // retry with child node expanded
+          },true);
+        } else {
+          var rootBase = stripPath(o.toroot.replace(/\..+$/, ''));
+          if (rootBase=="index" || rootBase=="pages" || rootBase=="search") {
+            expandNode(o, n, true, true);
+          }
+          selectAndHighlight(hash,n);
+        }
+      }
+    }
+  } else {
+    selectAndHighlight(hash);
+  }
+}
+
+function removeToInsertLater(element) {
+  var parentNode = element.parentNode;
+  var nextSibling = element.nextSibling;
+  parentNode.removeChild(element);
+  return function() {
+    if (nextSibling) {
+      parentNode.insertBefore(element, nextSibling);
+    } else {
+      parentNode.appendChild(element);
+    }
+  };
+}
+
+function getNode(o, po)
+{
+  var insertFunction = removeToInsertLater(po.li);
+  po.childrenVisited = true;
+  var l = po.childrenData.length-1;
+  for (var i in po.childrenData) {
+    var nodeData = po.childrenData[i];
+    po.children[i] = newNode(o, po, nodeData[0], nodeData[1], nodeData[2],
+      i==l);
+  }
+  insertFunction();
+}
+
+function gotoNode(o,subIndex,root,hash,relpath)
+{
+  var nti = navTreeSubIndices[subIndex][root+hash];
+  o.breadcrumbs = $.extend(true, [], nti ? nti : navTreeSubIndices[subIndex][root]);
+  if (!o.breadcrumbs && root!=NAVTREE[0][1]) { // fallback: show index
+    navTo(o,NAVTREE[0][1],"",relpath);
+    $('.item').removeClass('selected');
+    $('.item').removeAttr('id');
+  }
+  if (o.breadcrumbs) {
+    o.breadcrumbs.unshift(0); // add 0 for root node
+    showNode(o, o.node, 0, hash);
+  }
+}
+
+function navTo(o,root,hash,relpath)
+{
+  var link = cachedLink();
+  if (link) {
+    var parts = link.split('#');
+    root = parts[0];
+    if (parts.length>1) hash = '#'+parts[1].replace(/[^\w\-]/g,'');
+    else hash='';
+  }
+  if (hash.match(/^#l\d+$/)) {
+    var anchor=$('a[name='+hash.substring(1)+']');
+    glowEffect(anchor.parent(),1000); // line number
+    hash=''; // strip line number anchors
+  }
+  var url=root+hash;
+  var i=-1;
+  while (NAVTREEINDEX[i+1]<=url) i++;
+  if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index
+  if (navTreeSubIndices[i]) {
+    gotoNode(o,i,root,hash,relpath)
+  } else {
+    getScript(relpath+'navtreeindex'+i,function(){
+      navTreeSubIndices[i] = eval('NAVTREEINDEX'+i);
+      if (navTreeSubIndices[i]) {
+        gotoNode(o,i,root,hash,relpath);
+      }
+    },true);
+  }
+}
+
+function showSyncOff(n,relpath)
+{
+    n.html('<img src="'+relpath+'sync_off.png" title="'+SYNCOFFMSG+'"/>');
+}
+
+function showSyncOn(n,relpath)
+{
+    n.html('<img src="'+relpath+'sync_on.png" title="'+SYNCONMSG+'"/>');
+}
+
+function toggleSyncButton(relpath)
+{
+  var navSync = $('#nav-sync');
+  if (navSync.hasClass('sync')) {
+    navSync.removeClass('sync');
+    showSyncOff(navSync,relpath);
+    storeLink(stripPath2(pathName())+hashUrl());
+  } else {
+    navSync.addClass('sync');
+    showSyncOn(navSync,relpath);
+    deleteLink();
+  }
+}
+
+function initNavTree(toroot,relpath)
+{
+  var o = new Object();
+  o.toroot = toroot;
+  o.node = new Object();
+  o.node.li = document.getElementById("nav-tree-contents");
+  o.node.childrenData = NAVTREE;
+  o.node.children = new Array();
+  o.node.childrenUL = document.createElement("ul");
+  o.node.getChildrenUL = function() { return o.node.childrenUL; };
+  o.node.li.appendChild(o.node.childrenUL);
+  o.node.depth = 0;
+  o.node.relpath = relpath;
+  o.node.expanded = false;
+  o.node.isLast = true;
+  o.node.plus_img = document.createElement("span");
+  o.node.plus_img.className = 'arrow';
+  o.node.plus_img.innerHTML = arrowRight;
+
+  if (localStorageSupported()) {
+    var navSync = $('#nav-sync');
+    if (cachedLink()) {
+      showSyncOff(navSync,relpath);
+      navSync.removeClass('sync');
+    } else {
+      showSyncOn(navSync,relpath);
+    }
+    navSync.click(function(){ toggleSyncButton(relpath); });
+  }
+
+  $(window).load(function(){
+    navTo(o,toroot,hashUrl(),relpath);
+    showRoot();
+  });
+
+  $(window).bind('hashchange', function(){
+     if (window.location.hash && window.location.hash.length>1){
+       var a;
+       if ($(location).attr('hash')){
+         var clslink=stripPath(pathName())+':'+hashValue();
+         a=$('.item a[class$="'+clslink.replace(/</g,'\\3c ')+'"]');
+       }
+       if (a==null || !$(a).parent().parent().hasClass('selected')){
+         $('.item').removeClass('selected');
+         $('.item').removeAttr('id');
+       }
+       var link=stripPath2(pathName());
+       navTo(o,link,hashUrl(),relpath);
+     } else if (!animationInProgress) {
+       $('#doc-content').scrollTop(0);
+       $('.item').removeClass('selected');
+       $('.item').removeAttr('id');
+       navTo(o,toroot,hashUrl(),relpath);
+     }
+  })
+}
+
diff --git a/docs/rc/navtreedata.js b/docs/rc/navtreedata.js
new file mode 100644
index 0000000..762cb84
--- /dev/null
+++ b/docs/rc/navtreedata.js
@@ -0,0 +1,14 @@
+var NAVTREE =
+[
+  [ "MADlib", "index.html", [
+    [ "Modules", "modules.html", "modules" ]
+  ] ]
+];
+
+var NAVTREEINDEX =
+[
+"group__grp__apsp.html"
+];
+
+var SYNCONMSG = 'click to disable panel synchronisation';
+var SYNCOFFMSG = 'click to enable panel synchronisation';
\ No newline at end of file
diff --git a/docs/rc/navtreeindex0.js b/docs/rc/navtreeindex0.js
new file mode 100644
index 0000000..1e25c52
--- /dev/null
+++ b/docs/rc/navtreeindex0.js
@@ -0,0 +1,106 @@
+var NAVTREEINDEX0 =
+{
+"group__grp__apsp.html":[0,1,0],
+"group__grp__arima.html":[0,6,0],
+"group__grp__array.html":[0,0,0,0],
+"group__grp__arraysmatrix.html":[0,0,0],
+"group__grp__assoc__rules.html":[0,7,0,0],
+"group__grp__association__rules.html":[0,7,0],
+"group__grp__balance__sampling.html":[0,3,0],
+"group__grp__bayes.html":[0,9,2],
+"group__grp__bfs.html":[0,1,1],
+"group__grp__cg.html":[0,9,0],
+"group__grp__clustered__errors.html":[0,5,3,0],
+"group__grp__clustering.html":[0,7,1],
+"group__grp__cols2vec.html":[0,8,0],
+"group__grp__correlation.html":[0,4,0,1],
+"group__grp__countmin.html":[0,4,0,0,0],
+"group__grp__cox__prop__hazards.html":[0,5,3,1],
+"group__grp__crf.html":[0,5,0],
+"group__grp__datatrans.html":[0,0],
+"group__grp__decision__tree.html":[0,5,5,0],
+"group__grp__dense__linear__solver.html":[0,8,2,0],
+"group__grp__deprecated.html":[0,10],
+"group__grp__desc__stats.html":[0,4,0],
+"group__grp__dl.html":[0,9,1],
+"group__grp__early__stage.html":[0,9],
+"group__grp__elasticnet.html":[0,5,3,2],
+"group__grp__encode__categorical.html":[0,0,1],
+"group__grp__fmsketch.html":[0,4,0,0,1],
+"group__grp__glm.html":[0,5,3,3],
+"group__grp__gpu__configuration.html":[0,9,1,0],
+"group__grp__graph.html":[0,1],
+"group__grp__graph__avg__path__length.html":[0,1,3,0],
+"group__grp__graph__closeness.html":[0,1,3,1],
+"group__grp__graph__diameter.html":[0,1,3,2],
+"group__grp__graph__measures.html":[0,1,3],
+"group__grp__graph__vertex__degrees.html":[0,1,3,3],
+"group__grp__hits.html":[0,1,2],
+"group__grp__indicator.html":[0,10,0],
+"group__grp__inf__stats.html":[0,4,1],
+"group__grp__input__preprocessor__dl.html":[0,9,1,4],
+"group__grp__keras.html":[0,9,1,1],
+"group__grp__keras__model__arch.html":[0,9,1,2],
+"group__grp__keras__run__model__selection.html":[0,9,1,3,0],
+"group__grp__keras__setup__model__selection.html":[0,9,1,3,1],
+"group__grp__kmeans.html":[0,7,1,0],
+"group__grp__knn.html":[0,5,1],
+"group__grp__lda.html":[0,7,3,0],
+"group__grp__linalg.html":[0,0,0,3],
+"group__grp__linear__solver.html":[0,8,2],
+"group__grp__linreg.html":[0,5,3,4],
+"group__grp__lmf.html":[0,0,0,2,0],
+"group__grp__logreg.html":[0,5,3,5],
+"group__grp__marginal.html":[0,5,3,6],
+"group__grp__matrix.html":[0,0,0,1],
+"group__grp__matrix__factorization.html":[0,0,0,2],
+"group__grp__mdl.html":[0,2],
+"group__grp__mfvsketch.html":[0,4,0,0,2],
+"group__grp__minibatch__preprocessing.html":[0,8,3],
+"group__grp__mlogreg.html":[0,10,1],
+"group__grp__model__selection.html":[0,9,1,3],
+"group__grp__multinom.html":[0,5,3,7],
+"group__grp__nn.html":[0,5,2],
+"group__grp__ordinal.html":[0,5,3,8],
+"group__grp__other__functions.html":[0,8],
+"group__grp__pagerank.html":[0,1,4],
+"group__grp__path.html":[0,0,2],
+"group__grp__pca.html":[0,7,2],
+"group__grp__pca__project.html":[0,7,2,1],
+"group__grp__pca__train.html":[0,7,2,0],
+"group__grp__pivot.html":[0,0,3],
+"group__grp__pmml.html":[0,8,4],
+"group__grp__pred.html":[0,2,1],
+"group__grp__prob.html":[0,4,2],
+"group__grp__random__forest.html":[0,5,5,1],
+"group__grp__regml.html":[0,5,3],
+"group__grp__robust.html":[0,5,3,9],
+"group__grp__sample.html":[0,9,3],
+"group__grp__sampling.html":[0,3],
+"group__grp__sessionize.html":[0,0,4],
+"group__grp__sketches.html":[0,4,0,0],
+"group__grp__sparse__linear__solver.html":[0,8,2,1],
+"group__grp__sssp.html":[0,1,5],
+"group__grp__stats.html":[0,4],
+"group__grp__stats__tests.html":[0,4,1,0],
+"group__grp__stemmer.html":[0,0,5],
+"group__grp__strs.html":[0,3,1],
+"group__grp__summary.html":[0,4,0,2],
+"group__grp__super.html":[0,5],
+"group__grp__svd.html":[0,0,0,2,1],
+"group__grp__svec.html":[0,0,0,4],
+"group__grp__svm.html":[0,5,4],
+"group__grp__text__utilities.html":[0,8,5],
+"group__grp__topic__modelling.html":[0,7,3],
+"group__grp__train__test__split.html":[0,2,2],
+"group__grp__tree.html":[0,5,5],
+"group__grp__tsa.html":[0,6],
+"group__grp__unsupervised.html":[0,7],
+"group__grp__utilities.html":[0,8,1],
+"group__grp__validation.html":[0,2,0],
+"group__grp__vec2cols.html":[0,8,6],
+"group__grp__wcc.html":[0,1,6],
+"index.html":[],
+"modules.html":[0],
+"pages.html":[]
+};
diff --git a/docs/rc/open.png b/docs/rc/open.png
new file mode 100644
index 0000000..30f75c7
--- /dev/null
+++ b/docs/rc/open.png
Binary files differ
diff --git a/docs/rc/ordinal_8sql__in.html b/docs/rc/ordinal_8sql__in.html
new file mode 100644
index 0000000..c8f8c0e
--- /dev/null
+++ b/docs/rc/ordinal_8sql__in.html
@@ -0,0 +1,240 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: ordinal.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('ordinal_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">ordinal.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>SQL functions for ordinal regression.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:aea97aa914403a78b150dcaa54b08dc2b"><td class="memItemLeft" align="right" valign="top">bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ordinal_8sql__in.html#aea97aa914403a78b150dcaa54b08dc2b">__ordinal_merge_states</a> (bytea8 state1, bytea8 state2)</td></tr>
+<tr class="separator:aea97aa914403a78b150dcaa54b08dc2b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a43acfb9669b17dc032850322993238bd"><td class="memItemLeft" align="right" valign="top">bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ordinal_8sql__in.html#a43acfb9669b17dc032850322993238bd">__ordinal_final</a> (bytea8 state)</td></tr>
+<tr class="separator:a43acfb9669b17dc032850322993238bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8430c72e6eeccf6f057432e0c09df784"><td class="memItemLeft" align="right" valign="top">bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ordinal_8sql__in.html#a8430c72e6eeccf6f057432e0c09df784">__ordinal_logit_transition</a> (bytea8, float8, float8[], bytea8, smallint)</td></tr>
+<tr class="separator:a8430c72e6eeccf6f057432e0c09df784"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><dl class="section date"><dt>Date</dt><dd>July 2014</dd></dl>
+<dl class="section see"><dt>See also</dt><dd>For a brief introduction to ordinal regression, see the module description <a class="el" href="group__grp__ordinal.html">Ordinal Regression</a>. </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="a43acfb9669b17dc032850322993238bd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a43acfb9669b17dc032850322993238bd">&#9670;&nbsp;</a></span>__ordinal_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea8 __ordinal_final </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8430c72e6eeccf6f057432e0c09df784"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8430c72e6eeccf6f057432e0c09df784">&#9670;&nbsp;</a></span>__ordinal_logit_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea8 __ordinal_logit_transition </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">smallint&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aea97aa914403a78b150dcaa54b08dc2b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aea97aa914403a78b150dcaa54b08dc2b">&#9670;&nbsp;</a></span>__ordinal_merge_states()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea8 __ordinal_merge_states </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_e502304d8bc7f1ef2456a474c6d92acd.html">glm</a></li><li class="navelem"><a class="el" href="ordinal_8sql__in.html">ordinal.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:57 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/pagerank_8sql__in.html b/docs/rc/pagerank_8sql__in.html
new file mode 100644
index 0000000..365ff79
--- /dev/null
+++ b/docs/rc/pagerank_8sql__in.html
@@ -0,0 +1,553 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: pagerank.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('pagerank_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">pagerank.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ae13d4e007bbfc6629f8cf5e938e9c306"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pagerank_8sql__in.html#ae13d4e007bbfc6629f8cf5e938e9c306">pagerank</a> (text vertex_table, text vertex_id, text edge_table, text edge_args, text out_table, float8 damping_factor, integer max_iter, float8 threshold, varchar grouping_cols, integer[] personalization_vertices)</td></tr>
+<tr class="separator:ae13d4e007bbfc6629f8cf5e938e9c306"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac85f61143b581cd969530cea7a5311cc"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pagerank_8sql__in.html#ac85f61143b581cd969530cea7a5311cc">pagerank</a> (text vertex_table, text vertex_id, text edge_table, text edge_args, text out_table, float8 damping_factor, integer max_iter, float8 threshold, varchar grouping_cols)</td></tr>
+<tr class="separator:ac85f61143b581cd969530cea7a5311cc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afef4de2968cdf226c8c866ea74439569"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pagerank_8sql__in.html#afef4de2968cdf226c8c866ea74439569">pagerank</a> (text vertex_table, text vertex_id, text edge_table, text edge_args, text out_table, float8 damping_factor, integer max_iter, float8 threshold)</td></tr>
+<tr class="separator:afef4de2968cdf226c8c866ea74439569"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a89e65d85e3f29c4659257a817c1bceb1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pagerank_8sql__in.html#a89e65d85e3f29c4659257a817c1bceb1">pagerank</a> (text vertex_table, text vertex_id, text edge_table, text edge_args, text out_table, float8 damping_factor, integer max_iter)</td></tr>
+<tr class="separator:a89e65d85e3f29c4659257a817c1bceb1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad5b0fd743404c42dce6a9fc0e35f7645"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pagerank_8sql__in.html#ad5b0fd743404c42dce6a9fc0e35f7645">pagerank</a> (text vertex_table, text vertex_id, text edge_table, text edge_args, text out_table, float8 damping_factor)</td></tr>
+<tr class="separator:ad5b0fd743404c42dce6a9fc0e35f7645"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aae888a524d7fbb9fd3e94c1ee9a4dd42"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pagerank_8sql__in.html#aae888a524d7fbb9fd3e94c1ee9a4dd42">pagerank</a> (text vertex_table, text vertex_id, text edge_table, text edge_args, text out_table)</td></tr>
+<tr class="separator:aae888a524d7fbb9fd3e94c1ee9a4dd42"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5a240ada11e9de64e4b9930a81b81cd6"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pagerank_8sql__in.html#a5a240ada11e9de64e4b9930a81b81cd6">pagerank</a> (varchar message)</td></tr>
+<tr class="separator:a5a240ada11e9de64e4b9930a81b81cd6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2e7d15ac323613c4e2a3275b75f85f6e"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pagerank_8sql__in.html#a2e7d15ac323613c4e2a3275b75f85f6e">pagerank</a> ()</td></tr>
+<tr class="separator:a2e7d15ac323613c4e2a3275b75f85f6e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ae13d4e007bbfc6629f8cf5e938e9c306"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae13d4e007bbfc6629f8cf5e938e9c306">&#9670;&nbsp;</a></span>pagerank() <span class="overload">[1/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void pagerank </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>vertex_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>vertex_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>edge_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>edge_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>damping_factor</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_iter</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>threshold</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>personalization_vertices</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac85f61143b581cd969530cea7a5311cc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac85f61143b581cd969530cea7a5311cc">&#9670;&nbsp;</a></span>pagerank() <span class="overload">[2/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void pagerank </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>vertex_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>vertex_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>edge_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>edge_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>damping_factor</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_iter</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>threshold</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="afef4de2968cdf226c8c866ea74439569"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afef4de2968cdf226c8c866ea74439569">&#9670;&nbsp;</a></span>pagerank() <span class="overload">[3/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void pagerank </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>vertex_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>vertex_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>edge_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>edge_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>damping_factor</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_iter</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>threshold</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a89e65d85e3f29c4659257a817c1bceb1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a89e65d85e3f29c4659257a817c1bceb1">&#9670;&nbsp;</a></span>pagerank() <span class="overload">[4/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void pagerank </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>vertex_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>vertex_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>edge_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>edge_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>damping_factor</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_iter</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ad5b0fd743404c42dce6a9fc0e35f7645"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad5b0fd743404c42dce6a9fc0e35f7645">&#9670;&nbsp;</a></span>pagerank() <span class="overload">[5/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void pagerank </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>vertex_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>vertex_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>edge_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>edge_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>damping_factor</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aae888a524d7fbb9fd3e94c1ee9a4dd42"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aae888a524d7fbb9fd3e94c1ee9a4dd42">&#9670;&nbsp;</a></span>pagerank() <span class="overload">[6/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void pagerank </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>vertex_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>vertex_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>edge_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>edge_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5a240ada11e9de64e4b9930a81b81cd6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5a240ada11e9de64e4b9930a81b81cd6">&#9670;&nbsp;</a></span>pagerank() <span class="overload">[7/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar pagerank </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a2e7d15ac323613c4e2a3275b75f85f6e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2e7d15ac323613c4e2a3275b75f85f6e">&#9670;&nbsp;</a></span>pagerank() <span class="overload">[8/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar pagerank </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_1c3de670490e30b2adf792227ef51e32.html">graph</a></li><li class="navelem"><a class="el" href="pagerank_8sql__in.html">pagerank.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:57 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/path_8sql__in.html b/docs/rc/path_8sql__in.html
new file mode 100644
index 0000000..d50ebff
--- /dev/null
+++ b/docs/rc/path_8sql__in.html
@@ -0,0 +1,477 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: path.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('path_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">path.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>SQL functions for pathing functions.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a841bef9d28833c6ecac9c3f957558c2f"><td class="memItemLeft" align="right" valign="top">path_match_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="path_8sql__in.html#a841bef9d28833c6ecac9c3f957558c2f">path_pattern_match</a> (text symbols, text pattern, float8[] row_id, boolean overlapping_patterns)</td></tr>
+<tr class="separator:a841bef9d28833c6ecac9c3f957558c2f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8de69ef8c9e00f5e27d4de16ad2f157a"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="path_8sql__in.html#a8de69ef8c9e00f5e27d4de16ad2f157a">path</a> (varchar source_table, varchar output_table, varchar partition_expr, varchar order_expr, varchar symbol_expr, varchar pattern_expr, varchar agg_func, boolean persist_rows, boolean overlapping_patterns)</td></tr>
+<tr class="separator:a8de69ef8c9e00f5e27d4de16ad2f157a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adb47d7f926d4800bd443d041fb42c3d0"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="path_8sql__in.html#adb47d7f926d4800bd443d041fb42c3d0">path</a> (varchar source_table, varchar output_table, varchar partition_expr, varchar order_expr, varchar symbol_expr, varchar pattern_expr, varchar agg_func, boolean persist_rows)</td></tr>
+<tr class="separator:adb47d7f926d4800bd443d041fb42c3d0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2b676d9c8c02a98522cc8e0fee5a899d"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="path_8sql__in.html#a2b676d9c8c02a98522cc8e0fee5a899d">path</a> (varchar source_table, varchar output_table, varchar partition_expr, varchar order_expr, varchar symbol_expr, varchar pattern_expr, varchar agg_func)</td></tr>
+<tr class="separator:a2b676d9c8c02a98522cc8e0fee5a899d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac2ca139a2066f39fc7da14824574d789"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="path_8sql__in.html#ac2ca139a2066f39fc7da14824574d789">path</a> (varchar source_table, varchar output_table, varchar partition_expr, varchar order_expr, varchar symbol_expr, varchar pattern_expr)</td></tr>
+<tr class="separator:ac2ca139a2066f39fc7da14824574d789"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aae6088d72cc92f9542a72136acaa372f"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="path_8sql__in.html#aae6088d72cc92f9542a72136acaa372f">path</a> (text message)</td></tr>
+<tr class="separator:aae6088d72cc92f9542a72136acaa372f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af5842a2917fdea02cca12c8104bff022"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="path_8sql__in.html#af5842a2917fdea02cca12c8104bff022">path</a> ()</td></tr>
+<tr class="separator:af5842a2917fdea02cca12c8104bff022"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>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</p>
+<p><a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a></p>
+<p>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.</p>
+<dl class="section date"><dt>Date</dt><dd>Sep 2015 </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="a8de69ef8c9e00f5e27d4de16ad2f157a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8de69ef8c9e00f5e27d4de16ad2f157a">&#9670;&nbsp;</a></span>path() <span class="overload">[1/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text path </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>partition_expr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>order_expr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>symbol_expr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>pattern_expr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>agg_func</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>persist_rows</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>overlapping_patterns</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="adb47d7f926d4800bd443d041fb42c3d0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adb47d7f926d4800bd443d041fb42c3d0">&#9670;&nbsp;</a></span>path() <span class="overload">[2/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text path </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>partition_expr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>order_expr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>symbol_expr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>pattern_expr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>agg_func</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>persist_rows</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a2b676d9c8c02a98522cc8e0fee5a899d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2b676d9c8c02a98522cc8e0fee5a899d">&#9670;&nbsp;</a></span>path() <span class="overload">[3/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text path </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>partition_expr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>order_expr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>symbol_expr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>pattern_expr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>agg_func</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac2ca139a2066f39fc7da14824574d789"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac2ca139a2066f39fc7da14824574d789">&#9670;&nbsp;</a></span>path() <span class="overload">[4/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text path </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>partition_expr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>order_expr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>symbol_expr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>pattern_expr</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aae6088d72cc92f9542a72136acaa372f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aae6088d72cc92f9542a72136acaa372f">&#9670;&nbsp;</a></span>path() <span class="overload">[5/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text path </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="af5842a2917fdea02cca12c8104bff022"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af5842a2917fdea02cca12c8104bff022">&#9670;&nbsp;</a></span>path() <span class="overload">[6/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text path </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a841bef9d28833c6ecac9c3f957558c2f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a841bef9d28833c6ecac9c3f957558c2f">&#9670;&nbsp;</a></span>path_pattern_match()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">path_match_result path_pattern_match </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>symbols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pattern</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>overlapping_patterns</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_8d53e1c0026e7e34b4cd68f8b91426d6.html">utilities</a></li><li class="navelem"><a class="el" href="path_8sql__in.html">path.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:57 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/pca_8sql__in.html b/docs/rc/pca_8sql__in.html
new file mode 100644
index 0000000..5b27940
--- /dev/null
+++ b/docs/rc/pca_8sql__in.html
@@ -0,0 +1,1851 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: pca.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('pca_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">pca.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Principal Component Analysis.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:aa0482e3074f528f681a6cb4a374e25a1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pca_8sql__in.html#aa0482e3074f528f681a6cb4a374e25a1">pca_train</a> (text source_table, text pc_table, text row_id, integer k, text grouping_cols, integer lanczos_iter, boolean use_correlation, text result_summary_table, float8 variance)</td></tr>
+<tr class="separator:aa0482e3074f528f681a6cb4a374e25a1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4cf4caceb80885e288cc0451e6f47695"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pca_8sql__in.html#a4cf4caceb80885e288cc0451e6f47695">pca_train</a> (text source_table, text pc_table, text row_id, integer k, text grouping_cols, integer lanczos_iter, boolean use_correlation, text result_summary_table)</td></tr>
+<tr class="separator:a4cf4caceb80885e288cc0451e6f47695"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5634af9beb7936506ec2f5775c81d038"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pca_8sql__in.html#a5634af9beb7936506ec2f5775c81d038">pca_train</a> (text source_table, text pc_table, text row_id, integer k, text grouping_cols, integer lanczos_iter, boolean use_correlation)</td></tr>
+<tr class="separator:a5634af9beb7936506ec2f5775c81d038"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2d1cfcf6a7c8a9c69808ec8927b900d1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pca_8sql__in.html#a2d1cfcf6a7c8a9c69808ec8927b900d1">pca_train</a> (text source_table, text pc_table, text row_id, integer k, text grouping_cols, integer lanczos_iter)</td></tr>
+<tr class="separator:a2d1cfcf6a7c8a9c69808ec8927b900d1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7b52d3800ed2d529ccd2a1c2417a986d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pca_8sql__in.html#a7b52d3800ed2d529ccd2a1c2417a986d">pca_train</a> (text source_table, text pc_table, text row_id, integer k, text grouping_cols)</td></tr>
+<tr class="separator:a7b52d3800ed2d529ccd2a1c2417a986d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a13f55d8f0ddc1ed37dc06dfd1f797f8d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pca_8sql__in.html#a13f55d8f0ddc1ed37dc06dfd1f797f8d">pca_train</a> (text source_table, text pc_table, text row_id, integer k)</td></tr>
+<tr class="separator:a13f55d8f0ddc1ed37dc06dfd1f797f8d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa3935e186e2db92ddad12574924dc075"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pca_8sql__in.html#aa3935e186e2db92ddad12574924dc075">pca_train</a> (text source_table, text pc_table, text row_id, float8 variance, text grouping_cols, integer lanczos_iter, boolean use_correlation, text result_summary_table)</td></tr>
+<tr class="separator:aa3935e186e2db92ddad12574924dc075"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0fca1853e46de92796f1b2462073bb87"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pca_8sql__in.html#a0fca1853e46de92796f1b2462073bb87">pca_train</a> (text source_table, text pc_table, text row_id, float8 variance, text grouping_cols, integer lanczos_iter, boolean use_correlation)</td></tr>
+<tr class="separator:a0fca1853e46de92796f1b2462073bb87"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7acd4b138ff5edd6e51ff3727842123a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pca_8sql__in.html#a7acd4b138ff5edd6e51ff3727842123a">pca_train</a> (text source_table, text pc_table, text row_id, float8 variance, text grouping_cols, integer lanczos_iter)</td></tr>
+<tr class="separator:a7acd4b138ff5edd6e51ff3727842123a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae7d85a5369594004c207604e486c4a9b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pca_8sql__in.html#ae7d85a5369594004c207604e486c4a9b">pca_train</a> (text source_table, text pc_table, text row_id, float8 variance, text grouping_cols)</td></tr>
+<tr class="separator:ae7d85a5369594004c207604e486c4a9b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3facc2b75c5a57b469d636b0cf71f624"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pca_8sql__in.html#a3facc2b75c5a57b469d636b0cf71f624">pca_train</a> (text source_table, text pc_table, text row_id, float8 variance)</td></tr>
+<tr class="separator:a3facc2b75c5a57b469d636b0cf71f624"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3bdb5967e072a36265fafe9f37164622"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pca_8sql__in.html#a3bdb5967e072a36265fafe9f37164622">pca_train</a> (varchar usage_string)</td></tr>
+<tr class="separator:a3bdb5967e072a36265fafe9f37164622"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a31abf88e67a446a4f789764aa2c61e85"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pca_8sql__in.html#a31abf88e67a446a4f789764aa2c61e85">pca_train</a> ()</td></tr>
+<tr class="separator:a31abf88e67a446a4f789764aa2c61e85"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaf22f179f07b6a88edd410a3f163d80b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pca_8sql__in.html#aaf22f179f07b6a88edd410a3f163d80b">pca_sparse_train</a> (text source_table, text pc_table, text row_id, text col_id, text val_id, integer row_dim, integer col_dim, integer k, text grouping_cols, integer lanczos_iter, boolean use_correlation, text result_summary_table, float8 variance)</td></tr>
+<tr class="separator:aaf22f179f07b6a88edd410a3f163d80b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9c819bc0f3fa1f02234d62cd5a8f391e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pca_8sql__in.html#a9c819bc0f3fa1f02234d62cd5a8f391e">pca_sparse_train</a> (text source_table, text pc_table, text row_id, text col_id, text val_id, integer row_dim, integer col_dim, integer k, text grouping_cols, integer lanczos_iter, boolean use_correlation, text result_summary_table)</td></tr>
+<tr class="separator:a9c819bc0f3fa1f02234d62cd5a8f391e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5f808e855a139ac21876bd8d7f6c94f9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pca_8sql__in.html#a5f808e855a139ac21876bd8d7f6c94f9">pca_sparse_train</a> (text source_table, text pc_table, text row_id, text col_id, text val_id, integer row_dim, integer col_dim, integer k, text grouping_cols, integer lanczos_iter, boolean use_correlation)</td></tr>
+<tr class="separator:a5f808e855a139ac21876bd8d7f6c94f9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ace5236fb2133c297eca85ab788e6dfc2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pca_8sql__in.html#ace5236fb2133c297eca85ab788e6dfc2">pca_sparse_train</a> (text source_table, text pc_table, text row_id, text col_id, text val_id, integer row_dim, integer col_dim, integer k, text grouping_cols, integer lanczos_iter)</td></tr>
+<tr class="separator:ace5236fb2133c297eca85ab788e6dfc2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a370a0cd4c3776db9716783877caaaea5"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pca_8sql__in.html#a370a0cd4c3776db9716783877caaaea5">pca_sparse_train</a> (text source_table, text pc_table, text row_id, text col_id, text val_id, integer row_dim, integer col_dim, integer k, text grouping_cols)</td></tr>
+<tr class="separator:a370a0cd4c3776db9716783877caaaea5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a47c9234d8f49a7467b4e2d172eb6958f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pca_8sql__in.html#a47c9234d8f49a7467b4e2d172eb6958f">pca_sparse_train</a> (text source_table, text pc_table, text row_id, text col_id, text val_id, integer row_dim, integer col_dim, integer k)</td></tr>
+<tr class="separator:a47c9234d8f49a7467b4e2d172eb6958f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abcb783cb9b8cf34520930a25e1264566"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pca_8sql__in.html#abcb783cb9b8cf34520930a25e1264566">pca_sparse_train</a> (text source_table, text pc_table, text row_id, text col_id, text val_id, integer row_dim, integer col_dim, float8 variance, text grouping_cols, integer lanczos_iter, boolean use_correlation, text result_summary_table)</td></tr>
+<tr class="separator:abcb783cb9b8cf34520930a25e1264566"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaac2bea5ee35d3c250fb8ddfb43de7ee"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pca_8sql__in.html#aaac2bea5ee35d3c250fb8ddfb43de7ee">pca_sparse_train</a> (text source_table, text pc_table, text row_id, text col_id, text val_id, integer row_dim, integer col_dim, float8 variance, text grouping_cols, integer lanczos_iter, boolean use_correlation)</td></tr>
+<tr class="separator:aaac2bea5ee35d3c250fb8ddfb43de7ee"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7eefdb60ea3a6ba720c22159708bbf6b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pca_8sql__in.html#a7eefdb60ea3a6ba720c22159708bbf6b">pca_sparse_train</a> (text source_table, text pc_table, text row_id, text col_id, text val_id, integer row_dim, integer col_dim, float8 variance, text grouping_cols, integer lanczos_iter)</td></tr>
+<tr class="separator:a7eefdb60ea3a6ba720c22159708bbf6b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5bde0ac01309c986b8aed5ff3ccb2b04"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pca_8sql__in.html#a5bde0ac01309c986b8aed5ff3ccb2b04">pca_sparse_train</a> (text source_table, text pc_table, text row_id, text col_id, text val_id, integer row_dim, integer col_dim, float8 variance, text grouping_cols)</td></tr>
+<tr class="separator:a5bde0ac01309c986b8aed5ff3ccb2b04"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5258b8d0fdd1697c3ab3e4d954d07ca1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pca_8sql__in.html#a5258b8d0fdd1697c3ab3e4d954d07ca1">pca_sparse_train</a> (text source_table, text pc_table, text row_id, text col_id, text val_id, integer row_dim, integer col_dim, float8 variance)</td></tr>
+<tr class="separator:a5258b8d0fdd1697c3ab3e4d954d07ca1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa3e70c278fc1d4ab52396192691a8a3e"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pca_8sql__in.html#aa3e70c278fc1d4ab52396192691a8a3e">pca_sparse_train</a> (varchar usage_string)</td></tr>
+<tr class="separator:aa3e70c278fc1d4ab52396192691a8a3e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1a62d21cdcc12ff8a54ea572f5af7073"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pca_8sql__in.html#a1a62d21cdcc12ff8a54ea572f5af7073">pca_sparse_train</a> ()</td></tr>
+<tr class="separator:a1a62d21cdcc12ff8a54ea572f5af7073"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2c896b607596a09d707365bb9287e73b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pca_8sql__in.html#a2c896b607596a09d707365bb9287e73b">_pca_union</a> (text source_table, text pc_table, text pc_table_mean, text row_id, integer k, text grouping_cols, integer lanczos_iter, boolean use_correlation, text result_summary_table, text result_summary_table_temp, float8 variance, integer grp_id, text grouping_where_clause, text sparse_where_condition, text select_grouping_cols, text temp_table_columns, boolean is_sparse, text col_id, text val_id, integer row_dim, integer col_dim)</td></tr>
+<tr class="separator:a2c896b607596a09d707365bb9287e73b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><dl class="section see"><dt>See also</dt><dd>For a brief introduction to Principal Component Analysis, see the module description <a class="el" href="group__grp__pca.html">Dimensionality Reduction</a>. </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="a2c896b607596a09d707365bb9287e73b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2c896b607596a09d707365bb9287e73b">&#9670;&nbsp;</a></span>_pca_union()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void _pca_union </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pc_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pc_table_mean</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>k</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>lanczos_iter</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>use_correlation</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>result_summary_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>result_summary_table_temp</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>variance</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>grp_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_where_clause</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>sparse_where_condition</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>select_grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>temp_table_columns</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>is_sparse</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>col_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>val_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>col_dim</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aaf22f179f07b6a88edd410a3f163d80b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aaf22f179f07b6a88edd410a3f163d80b">&#9670;&nbsp;</a></span>pca_sparse_train() <span class="overload">[1/13]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void pca_sparse_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pc_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>col_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>val_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>col_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>k</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>lanczos_iter</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>use_correlation</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>result_summary_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>variance</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a9c819bc0f3fa1f02234d62cd5a8f391e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9c819bc0f3fa1f02234d62cd5a8f391e">&#9670;&nbsp;</a></span>pca_sparse_train() <span class="overload">[2/13]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void pca_sparse_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pc_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>col_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>val_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>col_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>k</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>lanczos_iter</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>use_correlation</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>result_summary_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5f808e855a139ac21876bd8d7f6c94f9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5f808e855a139ac21876bd8d7f6c94f9">&#9670;&nbsp;</a></span>pca_sparse_train() <span class="overload">[3/13]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void pca_sparse_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pc_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>col_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>val_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>col_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>k</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>lanczos_iter</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>use_correlation</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ace5236fb2133c297eca85ab788e6dfc2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ace5236fb2133c297eca85ab788e6dfc2">&#9670;&nbsp;</a></span>pca_sparse_train() <span class="overload">[4/13]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void pca_sparse_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pc_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>col_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>val_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>col_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>k</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>lanczos_iter</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a370a0cd4c3776db9716783877caaaea5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a370a0cd4c3776db9716783877caaaea5">&#9670;&nbsp;</a></span>pca_sparse_train() <span class="overload">[5/13]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void pca_sparse_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pc_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>col_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>val_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>col_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>k</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a47c9234d8f49a7467b4e2d172eb6958f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a47c9234d8f49a7467b4e2d172eb6958f">&#9670;&nbsp;</a></span>pca_sparse_train() <span class="overload">[6/13]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void pca_sparse_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pc_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>col_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>val_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>col_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>k</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="abcb783cb9b8cf34520930a25e1264566"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abcb783cb9b8cf34520930a25e1264566">&#9670;&nbsp;</a></span>pca_sparse_train() <span class="overload">[7/13]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void pca_sparse_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pc_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>col_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>val_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>col_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>variance</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>lanczos_iter</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>use_correlation</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>result_summary_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aaac2bea5ee35d3c250fb8ddfb43de7ee"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aaac2bea5ee35d3c250fb8ddfb43de7ee">&#9670;&nbsp;</a></span>pca_sparse_train() <span class="overload">[8/13]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void pca_sparse_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pc_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>col_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>val_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>col_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>variance</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>lanczos_iter</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>use_correlation</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7eefdb60ea3a6ba720c22159708bbf6b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7eefdb60ea3a6ba720c22159708bbf6b">&#9670;&nbsp;</a></span>pca_sparse_train() <span class="overload">[9/13]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void pca_sparse_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pc_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>col_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>val_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>col_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>variance</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>lanczos_iter</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5bde0ac01309c986b8aed5ff3ccb2b04"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5bde0ac01309c986b8aed5ff3ccb2b04">&#9670;&nbsp;</a></span>pca_sparse_train() <span class="overload">[10/13]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void pca_sparse_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pc_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>col_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>val_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>col_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>variance</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5258b8d0fdd1697c3ab3e4d954d07ca1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5258b8d0fdd1697c3ab3e4d954d07ca1">&#9670;&nbsp;</a></span>pca_sparse_train() <span class="overload">[11/13]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void pca_sparse_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pc_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>col_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>val_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>col_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>variance</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa3e70c278fc1d4ab52396192691a8a3e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa3e70c278fc1d4ab52396192691a8a3e">&#9670;&nbsp;</a></span>pca_sparse_train() <span class="overload">[12/13]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text pca_sparse_train </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>usage_string</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1a62d21cdcc12ff8a54ea572f5af7073"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1a62d21cdcc12ff8a54ea572f5af7073">&#9670;&nbsp;</a></span>pca_sparse_train() <span class="overload">[13/13]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text pca_sparse_train </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa0482e3074f528f681a6cb4a374e25a1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa0482e3074f528f681a6cb4a374e25a1">&#9670;&nbsp;</a></span>pca_train() <span class="overload">[1/13]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void pca_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pc_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>k</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>lanczos_iter</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>use_correlation</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>result_summary_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>variance</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a4cf4caceb80885e288cc0451e6f47695"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4cf4caceb80885e288cc0451e6f47695">&#9670;&nbsp;</a></span>pca_train() <span class="overload">[2/13]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void pca_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pc_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>k</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>lanczos_iter</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>use_correlation</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>result_summary_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5634af9beb7936506ec2f5775c81d038"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5634af9beb7936506ec2f5775c81d038">&#9670;&nbsp;</a></span>pca_train() <span class="overload">[3/13]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void pca_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pc_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>k</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>lanczos_iter</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>use_correlation</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a2d1cfcf6a7c8a9c69808ec8927b900d1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2d1cfcf6a7c8a9c69808ec8927b900d1">&#9670;&nbsp;</a></span>pca_train() <span class="overload">[4/13]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void pca_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pc_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>k</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>lanczos_iter</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7b52d3800ed2d529ccd2a1c2417a986d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7b52d3800ed2d529ccd2a1c2417a986d">&#9670;&nbsp;</a></span>pca_train() <span class="overload">[5/13]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void pca_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pc_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>k</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a13f55d8f0ddc1ed37dc06dfd1f797f8d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a13f55d8f0ddc1ed37dc06dfd1f797f8d">&#9670;&nbsp;</a></span>pca_train() <span class="overload">[6/13]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void pca_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pc_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>k</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa3935e186e2db92ddad12574924dc075"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa3935e186e2db92ddad12574924dc075">&#9670;&nbsp;</a></span>pca_train() <span class="overload">[7/13]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void pca_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pc_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>variance</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>lanczos_iter</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>use_correlation</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>result_summary_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a0fca1853e46de92796f1b2462073bb87"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0fca1853e46de92796f1b2462073bb87">&#9670;&nbsp;</a></span>pca_train() <span class="overload">[8/13]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void pca_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pc_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>variance</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>lanczos_iter</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>use_correlation</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7acd4b138ff5edd6e51ff3727842123a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7acd4b138ff5edd6e51ff3727842123a">&#9670;&nbsp;</a></span>pca_train() <span class="overload">[9/13]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void pca_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pc_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>variance</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>lanczos_iter</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae7d85a5369594004c207604e486c4a9b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae7d85a5369594004c207604e486c4a9b">&#9670;&nbsp;</a></span>pca_train() <span class="overload">[10/13]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void pca_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pc_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>variance</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a3facc2b75c5a57b469d636b0cf71f624"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3facc2b75c5a57b469d636b0cf71f624">&#9670;&nbsp;</a></span>pca_train() <span class="overload">[11/13]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void pca_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pc_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>variance</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a3bdb5967e072a36265fafe9f37164622"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3bdb5967e072a36265fafe9f37164622">&#9670;&nbsp;</a></span>pca_train() <span class="overload">[12/13]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text pca_train </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>usage_string</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a31abf88e67a446a4f789764aa2c61e85"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a31abf88e67a446a4f789764aa2c61e85">&#9670;&nbsp;</a></span>pca_train() <span class="overload">[13/13]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar pca_train </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_9db0190ed89ab407304aec250d1ef64f.html">pca</a></li><li class="navelem"><a class="el" href="pca_8sql__in.html">pca.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:57 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/pca__project_8sql__in.html b/docs/rc/pca__project_8sql__in.html
new file mode 100644
index 0000000..f9c1d5c
--- /dev/null
+++ b/docs/rc/pca__project_8sql__in.html
@@ -0,0 +1,723 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: pca_project.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('pca__project_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">pca_project.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Principal Component Analysis Projection.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a30c86aed79810df5595451481ba74265"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pca__project_8sql__in.html#a30c86aed79810df5595451481ba74265">pca_project</a> (text source_table, text pc_table, text out_table, text row_id, text residual_table, text result_summary_table)</td></tr>
+<tr class="separator:a30c86aed79810df5595451481ba74265"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a075512374d6c3c21c9dfabb8449612b5"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pca__project_8sql__in.html#a075512374d6c3c21c9dfabb8449612b5">pca_project</a> (text source_table, text pc_table, text out_table, text row_id)</td></tr>
+<tr class="separator:a075512374d6c3c21c9dfabb8449612b5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa760c09bdf15997da8a4ca50c6f90961"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pca__project_8sql__in.html#aa760c09bdf15997da8a4ca50c6f90961">pca_project</a> (text source_table, text pc_table, text out_table, text row_id, text residual_table)</td></tr>
+<tr class="separator:aa760c09bdf15997da8a4ca50c6f90961"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a05473fbffb6c1ff77656c212b046eec8"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pca__project_8sql__in.html#a05473fbffb6c1ff77656c212b046eec8">pca_project</a> (text usage_string)</td></tr>
+<tr class="separator:a05473fbffb6c1ff77656c212b046eec8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a62c1f14279f47af3bdbddb52b8c712bf"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pca__project_8sql__in.html#a62c1f14279f47af3bdbddb52b8c712bf">pca_project</a> ()</td></tr>
+<tr class="separator:a62c1f14279f47af3bdbddb52b8c712bf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2ffda9dc6c376df9f31e71b41b7259b3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pca__project_8sql__in.html#a2ffda9dc6c376df9f31e71b41b7259b3">pca_sparse_project</a> (text source_table, text pc_table, text out_table, text row_id, text col_id, text val_id, int4 row_dim, int4 col_dim, text residual_table, text result_summary_table)</td></tr>
+<tr class="separator:a2ffda9dc6c376df9f31e71b41b7259b3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae5b361b468fffb7aeec2330c3b026bd1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pca__project_8sql__in.html#ae5b361b468fffb7aeec2330c3b026bd1">pca_sparse_project</a> (text source_table, text pc_table, text out_table, text row_id, text col_id, text val_id, int4 row_dim, int4 col_dim)</td></tr>
+<tr class="separator:ae5b361b468fffb7aeec2330c3b026bd1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa9c21f739fbc2f8c6e7e6c1a3eaba5cd"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pca__project_8sql__in.html#aa9c21f739fbc2f8c6e7e6c1a3eaba5cd">pca_sparse_project</a> (text source_table, text pc_table, text out_table, text row_id, text col_id, text val_id, int4 row_dim, int4 col_dim, text residual_table)</td></tr>
+<tr class="separator:aa9c21f739fbc2f8c6e7e6c1a3eaba5cd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a326bbd91fea50c9ebd8edcfe963eb535"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pca__project_8sql__in.html#a326bbd91fea50c9ebd8edcfe963eb535">_pca_project_union</a> (text source_table, text pc_table, text out_table, text row_id, text original_row_id, text grouping_cols, text grouping_cols_clause, text residual_table, text result_summary_table, integer grp_id, text grouping_where_clause, text sparse_where_condition, text select_grouping_cols, text grouping_cols_values, text temp_source_table_columns, text temp_pc_table_columns, boolean is_sparse, text col_id, text val_id, integer row_dim, integer col_dim)</td></tr>
+<tr class="separator:a326bbd91fea50c9ebd8edcfe963eb535"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa738137f91d595f312d5dd85f5e9c8ee"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pca__project_8sql__in.html#aa738137f91d595f312d5dd85f5e9c8ee">pca_sparse_project</a> (text usage_string)</td></tr>
+<tr class="separator:aa738137f91d595f312d5dd85f5e9c8ee"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6e62919f439ad5d62992c958a9324dce"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pca__project_8sql__in.html#a6e62919f439ad5d62992c958a9324dce">pca_sparse_project</a> ()</td></tr>
+<tr class="separator:a6e62919f439ad5d62992c958a9324dce"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><dl class="section see"><dt>See also</dt><dd>For a brief introduction to Principal Component Analysis, see the module description <a class="el" href="group__grp__pca.html">Dimensionality Reduction</a>. </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="a326bbd91fea50c9ebd8edcfe963eb535"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a326bbd91fea50c9ebd8edcfe963eb535">&#9670;&nbsp;</a></span>_pca_project_union()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void _pca_project_union </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pc_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>original_row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols_clause</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>residual_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>result_summary_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>grp_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_where_clause</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>sparse_where_condition</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>select_grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols_values</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>temp_source_table_columns</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>temp_pc_table_columns</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>is_sparse</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>col_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>val_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>col_dim</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a30c86aed79810df5595451481ba74265"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a30c86aed79810df5595451481ba74265">&#9670;&nbsp;</a></span>pca_project() <span class="overload">[1/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void pca_project </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pc_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>residual_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>result_summary_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a075512374d6c3c21c9dfabb8449612b5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a075512374d6c3c21c9dfabb8449612b5">&#9670;&nbsp;</a></span>pca_project() <span class="overload">[2/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void pca_project </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pc_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>row_id</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa760c09bdf15997da8a4ca50c6f90961"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa760c09bdf15997da8a4ca50c6f90961">&#9670;&nbsp;</a></span>pca_project() <span class="overload">[3/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void pca_project </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pc_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>residual_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a05473fbffb6c1ff77656c212b046eec8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a05473fbffb6c1ff77656c212b046eec8">&#9670;&nbsp;</a></span>pca_project() <span class="overload">[4/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar pca_project </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>usage_string</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a62c1f14279f47af3bdbddb52b8c712bf"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a62c1f14279f47af3bdbddb52b8c712bf">&#9670;&nbsp;</a></span>pca_project() <span class="overload">[5/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar pca_project </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a2ffda9dc6c376df9f31e71b41b7259b3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2ffda9dc6c376df9f31e71b41b7259b3">&#9670;&nbsp;</a></span>pca_sparse_project() <span class="overload">[1/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void pca_sparse_project </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pc_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>col_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>val_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>row_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>col_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>residual_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>result_summary_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae5b361b468fffb7aeec2330c3b026bd1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae5b361b468fffb7aeec2330c3b026bd1">&#9670;&nbsp;</a></span>pca_sparse_project() <span class="overload">[2/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void pca_sparse_project </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pc_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>col_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>val_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>row_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>col_dim</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa9c21f739fbc2f8c6e7e6c1a3eaba5cd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa9c21f739fbc2f8c6e7e6c1a3eaba5cd">&#9670;&nbsp;</a></span>pca_sparse_project() <span class="overload">[3/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void pca_sparse_project </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pc_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>col_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>val_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>row_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>col_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>residual_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa738137f91d595f312d5dd85f5e9c8ee"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa738137f91d595f312d5dd85f5e9c8ee">&#9670;&nbsp;</a></span>pca_sparse_project() <span class="overload">[4/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar pca_sparse_project </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>usage_string</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a6e62919f439ad5d62992c958a9324dce"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6e62919f439ad5d62992c958a9324dce">&#9670;&nbsp;</a></span>pca_sparse_project() <span class="overload">[5/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar pca_sparse_project </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_9db0190ed89ab407304aec250d1ef64f.html">pca</a></li><li class="navelem"><a class="el" href="pca__project_8sql__in.html">pca_project.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:57 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/pivot_8sql__in.html b/docs/rc/pivot_8sql__in.html
new file mode 100644
index 0000000..3d2aed8
--- /dev/null
+++ b/docs/rc/pivot_8sql__in.html
@@ -0,0 +1,692 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: pivot.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('pivot_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">pivot.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>SQL functions for pivoting.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:aaabcd0b46dea69aa924a02d00119b064"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pivot_8sql__in.html#aaabcd0b46dea69aa924a02d00119b064">pivot</a> (text source_table, text output_table, text index, text pivot_cols, text pivot_values, text aggregate_func, text fill_value, boolean keep_null, boolean output_col_dictionary, text output_type)</td></tr>
+<tr class="memdesc:aaabcd0b46dea69aa924a02d00119b064"><td class="mdescLeft">&#160;</td><td class="mdescRight">Helper function that can be used to pivot tables.  <a href="#aaabcd0b46dea69aa924a02d00119b064">More...</a><br /></td></tr>
+<tr class="separator:aaabcd0b46dea69aa924a02d00119b064"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a54cf9b84a727e8364ea1f30c4ed77cf1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pivot_8sql__in.html#a54cf9b84a727e8364ea1f30c4ed77cf1">pivot</a> (text source_table, text output_table, text index, text pivot_cols, text pivot_values, text aggregate_func, text fill_value, boolean keep_null, boolean output_col_dictionary)</td></tr>
+<tr class="separator:a54cf9b84a727e8364ea1f30c4ed77cf1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9aac423ee5ab1746428712b6318d082e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pivot_8sql__in.html#a9aac423ee5ab1746428712b6318d082e">pivot</a> (text source_table, text output_table, text index, text pivot_cols, text pivot_values, text aggregate_func, text fill_value, boolean keep_null)</td></tr>
+<tr class="separator:a9aac423ee5ab1746428712b6318d082e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa4a81e670839f4c85dd3ec54105834cb"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pivot_8sql__in.html#aa4a81e670839f4c85dd3ec54105834cb">pivot</a> (text source_table, text output_table, text index, text pivot_cols, text pivot_values, text aggregate_func, text fill_value)</td></tr>
+<tr class="separator:aa4a81e670839f4c85dd3ec54105834cb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1d2163cb3a187ae9313712b115c14b75"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pivot_8sql__in.html#a1d2163cb3a187ae9313712b115c14b75">pivot</a> (text source_table, text output_table, text index, text pivot_cols, text pivot_values, text aggregate_func, boolean keep_null)</td></tr>
+<tr class="separator:a1d2163cb3a187ae9313712b115c14b75"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a321c365b023fba333a6b98093fd47492"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pivot_8sql__in.html#a321c365b023fba333a6b98093fd47492">pivot</a> (text source_table, text output_table, text index, text pivot_cols, text pivot_values, text aggregate_func)</td></tr>
+<tr class="separator:a321c365b023fba333a6b98093fd47492"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad6ee7cf2b82f8c01cbc3eb89afc0bab3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pivot_8sql__in.html#ad6ee7cf2b82f8c01cbc3eb89afc0bab3">pivot</a> (text source_table, text output_table, text index, text pivot_cols, text pivot_values, boolean keep_null)</td></tr>
+<tr class="separator:ad6ee7cf2b82f8c01cbc3eb89afc0bab3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4928b16b8473c2f7818fd58a633c5df7"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pivot_8sql__in.html#a4928b16b8473c2f7818fd58a633c5df7">pivot</a> (text source_table, text output_table, text index, text pivot_cols, text pivot_values)</td></tr>
+<tr class="separator:a4928b16b8473c2f7818fd58a633c5df7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a65b0595b546a491f87ae1a8b2c0d33ec"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pivot_8sql__in.html#a65b0595b546a491f87ae1a8b2c0d33ec">pivot</a> (varchar message)</td></tr>
+<tr class="separator:a65b0595b546a491f87ae1a8b2c0d33ec"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a813c48cacf93deb9720a7994ee6d14bb"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pivot_8sql__in.html#a813c48cacf93deb9720a7994ee6d14bb">pivot</a> ()</td></tr>
+<tr class="separator:a813c48cacf93deb9720a7994ee6d14bb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>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</p>
+<p><a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a></p>
+<p>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.</p>
+<dl class="section date"><dt>Date</dt><dd>June 2016</dd></dl>
+<dl class="section see"><dt>See also</dt><dd>Creates a <a class="el" href="pivot_8sql__in.html#aaabcd0b46dea69aa924a02d00119b064" title="Helper function that can be used to pivot tables. ">pivot</a> table for data summarization. </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="aaabcd0b46dea69aa924a02d00119b064"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aaabcd0b46dea69aa924a02d00119b064">&#9670;&nbsp;</a></span>pivot() <span class="overload">[1/10]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void pivot </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>index</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pivot_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pivot_values</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>aggregate_func</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>fill_value</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>keep_null</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>output_col_dictionary</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_type</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">source_table</td><td>The original data table </td></tr>
+    <tr><td class="paramname">output_table</td><td>The output table that contains the dummy variable columns </td></tr>
+    <tr><td class="paramname">index</td><td>The index columns to group by the records by </td></tr>
+    <tr><td class="paramname">pivot_cols</td><td>The columns to pivot the table </td></tr>
+    <tr><td class="paramname">pivot_values</td><td>The value columns to be summarized in the pivoted table </td></tr>
+    <tr><td class="paramname">aggregate_func</td><td>The aggregate function to be applied to the values </td></tr>
+    <tr><td class="paramname">fill_value</td><td>If specified, determines how to fill NULL values resulting from pivot operation </td></tr>
+    <tr><td class="paramname">keep_null</td><td>The flag for determining how to handle NULL values in pivot columns </td></tr>
+    <tr><td class="paramname">output_col_dictionary</td><td>The flag for enabling the creation of the output dictionary for shorter column names </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Void </dd></dl>
+
+</div>
+</div>
+<a id="a54cf9b84a727e8364ea1f30c4ed77cf1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a54cf9b84a727e8364ea1f30c4ed77cf1">&#9670;&nbsp;</a></span>pivot() <span class="overload">[2/10]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void pivot </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>index</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pivot_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pivot_values</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>aggregate_func</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>fill_value</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>keep_null</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>output_col_dictionary</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a9aac423ee5ab1746428712b6318d082e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9aac423ee5ab1746428712b6318d082e">&#9670;&nbsp;</a></span>pivot() <span class="overload">[3/10]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void pivot </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>index</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pivot_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pivot_values</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>aggregate_func</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>fill_value</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>keep_null</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa4a81e670839f4c85dd3ec54105834cb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa4a81e670839f4c85dd3ec54105834cb">&#9670;&nbsp;</a></span>pivot() <span class="overload">[4/10]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void pivot </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>index</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pivot_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pivot_values</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>aggregate_func</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>fill_value</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1d2163cb3a187ae9313712b115c14b75"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1d2163cb3a187ae9313712b115c14b75">&#9670;&nbsp;</a></span>pivot() <span class="overload">[5/10]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void pivot </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>index</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pivot_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pivot_values</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>aggregate_func</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>keep_null</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a321c365b023fba333a6b98093fd47492"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a321c365b023fba333a6b98093fd47492">&#9670;&nbsp;</a></span>pivot() <span class="overload">[6/10]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void pivot </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>index</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pivot_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pivot_values</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>aggregate_func</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ad6ee7cf2b82f8c01cbc3eb89afc0bab3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad6ee7cf2b82f8c01cbc3eb89afc0bab3">&#9670;&nbsp;</a></span>pivot() <span class="overload">[7/10]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void pivot </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>index</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pivot_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pivot_values</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>keep_null</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a4928b16b8473c2f7818fd58a633c5df7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4928b16b8473c2f7818fd58a633c5df7">&#9670;&nbsp;</a></span>pivot() <span class="overload">[8/10]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void pivot </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>index</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pivot_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pivot_values</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a65b0595b546a491f87ae1a8b2c0d33ec"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a65b0595b546a491f87ae1a8b2c0d33ec">&#9670;&nbsp;</a></span>pivot() <span class="overload">[9/10]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar pivot </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a813c48cacf93deb9720a7994ee6d14bb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a813c48cacf93deb9720a7994ee6d14bb">&#9670;&nbsp;</a></span>pivot() <span class="overload">[10/10]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar pivot </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_8d53e1c0026e7e34b4cd68f8b91426d6.html">utilities</a></li><li class="navelem"><a class="el" href="pivot_8sql__in.html">pivot.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:57 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/pivotalr__arrayops_8sql__in.html b/docs/rc/pivotalr__arrayops_8sql__in.html
new file mode 100644
index 0000000..571696c
--- /dev/null
+++ b/docs/rc/pivotalr__arrayops_8sql__in.html
@@ -0,0 +1,282 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: pivotalr_arrayops.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('pivotalr__arrayops_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">pivotalr_arrayops.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a7aee64ab0f57185432fb0709f7769f6a"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pivotalr__arrayops_8sql__in.html#a7aee64ab0f57185432fb0709f7769f6a">__pivotalr_crossprod_transition</a> (float8[] current_state, float8[] left_arr, float8[] right_arr)</td></tr>
+<tr class="separator:a7aee64ab0f57185432fb0709f7769f6a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1ce8de76ca7156f2608ff5142921b7ef"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pivotalr__arrayops_8sql__in.html#a1ce8de76ca7156f2608ff5142921b7ef">__pivotalr_crossprod_merge</a> (float8[] left_state, float8[] right_state)</td></tr>
+<tr class="separator:a1ce8de76ca7156f2608ff5142921b7ef"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a588d5855d1673f7bcbc2a1c983081f76"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pivotalr__arrayops_8sql__in.html#a588d5855d1673f7bcbc2a1c983081f76">crossprod</a> (float8[], float8[])</td></tr>
+<tr class="separator:a588d5855d1673f7bcbc2a1c983081f76"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2667b2584e46a241c98358d8a7db4be4"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pivotalr__arrayops_8sql__in.html#a2667b2584e46a241c98358d8a7db4be4">__pivotalr_crossprod_sym_transition</a> (float8[] current_state, float8[] arr)</td></tr>
+<tr class="separator:a2667b2584e46a241c98358d8a7db4be4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa1e36bf44b3206314c186bba80179c9c"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pivotalr__arrayops_8sql__in.html#aa1e36bf44b3206314c186bba80179c9c">crossprod_sym</a> (float8[])</td></tr>
+<tr class="separator:aa1e36bf44b3206314c186bba80179c9c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a1ce8de76ca7156f2608ff5142921b7ef"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1ce8de76ca7156f2608ff5142921b7ef">&#9670;&nbsp;</a></span>__pivotalr_crossprod_merge()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __pivotalr_crossprod_merge </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>left_state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>right_state</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a2667b2584e46a241c98358d8a7db4be4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2667b2584e46a241c98358d8a7db4be4">&#9670;&nbsp;</a></span>__pivotalr_crossprod_sym_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __pivotalr_crossprod_sym_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>current_state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>arr</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7aee64ab0f57185432fb0709f7769f6a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7aee64ab0f57185432fb0709f7769f6a">&#9670;&nbsp;</a></span>__pivotalr_crossprod_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __pivotalr_crossprod_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>current_state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>left_arr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>right_arr</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a588d5855d1673f7bcbc2a1c983081f76"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a588d5855d1673f7bcbc2a1c983081f76">&#9670;&nbsp;</a></span>crossprod()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] crossprod </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[]&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa1e36bf44b3206314c186bba80179c9c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa1e36bf44b3206314c186bba80179c9c">&#9670;&nbsp;</a></span>crossprod_sym()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] crossprod_sym </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[]</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_9e42ee0a0235722f482630aa6cc99334.html">linalg</a></li><li class="navelem"><a class="el" href="pivotalr__arrayops_8sql__in.html">pivotalr_arrayops.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:57 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/porter__stemmer_8sql__in.html b/docs/rc/porter__stemmer_8sql__in.html
new file mode 100644
index 0000000..b2dbb4f
--- /dev/null
+++ b/docs/rc/porter__stemmer_8sql__in.html
@@ -0,0 +1,238 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: porter_stemmer.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('porter__stemmer_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">porter_stemmer.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>implementation of porter stemmer operations in SQL  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:aca5bc24a9a8f5c33470b9f0bf0b3c515"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="porter__stemmer_8sql__in.html#aca5bc24a9a8f5c33470b9f0bf0b3c515">stem_token</a> (text token)</td></tr>
+<tr class="memdesc:aca5bc24a9a8f5c33470b9f0bf0b3c515"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns stem of input token. Returns NULL if input token is NULL.  <a href="#aca5bc24a9a8f5c33470b9f0bf0b3c515">More...</a><br /></td></tr>
+<tr class="separator:aca5bc24a9a8f5c33470b9f0bf0b3c515"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1ac3a2fd645ddf807b36a1328134a4ea"><td class="memItemLeft" align="right" valign="top">text []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="porter__stemmer_8sql__in.html#a1ac3a2fd645ddf807b36a1328134a4ea">stem_token_arr</a> (text[] token_arr)</td></tr>
+<tr class="memdesc:a1ac3a2fd645ddf807b36a1328134a4ea"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns stems in an array of input token array. Returns NULL element for corresponding input NULL token.  <a href="#a1ac3a2fd645ddf807b36a1328134a4ea">More...</a><br /></td></tr>
+<tr class="separator:a1ac3a2fd645ddf807b36a1328134a4ea"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae074993f351b069eaa7831e8afb979ae"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="porter__stemmer_8sql__in.html#ae074993f351b069eaa7831e8afb979ae">stem_token</a> ()</td></tr>
+<tr class="separator:ae074993f351b069eaa7831e8afb979ae"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a23ebfbea896802dd4c489773819f6cd8"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="porter__stemmer_8sql__in.html#a23ebfbea896802dd4c489773819f6cd8">stem_token_arr</a> ()</td></tr>
+<tr class="separator:a23ebfbea896802dd4c489773819f6cd8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>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</p>
+<p><a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a></p>
+<p>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.</p>
+<dl class="section date"><dt>Date</dt><dd>September 2015 </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="aca5bc24a9a8f5c33470b9f0bf0b3c515"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aca5bc24a9a8f5c33470b9f0bf0b3c515">&#9670;&nbsp;</a></span>stem_token() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text stem_token </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>token</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">token</td><td>Text token </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>stem of token. </dd></dl>
+
+</div>
+</div>
+<a id="ae074993f351b069eaa7831e8afb979ae"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae074993f351b069eaa7831e8afb979ae">&#9670;&nbsp;</a></span>stem_token() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text stem_token </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1ac3a2fd645ddf807b36a1328134a4ea"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1ac3a2fd645ddf807b36a1328134a4ea">&#9670;&nbsp;</a></span>stem_token_arr() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text [] stem_token_arr </td>
+          <td>(</td>
+          <td class="paramtype">text []&#160;</td>
+          <td class="paramname"><em>token_arr</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">token_arr</td><td>Text[] token </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>stems array of input token array. </dd></dl>
+
+</div>
+</div>
+<a id="a23ebfbea896802dd4c489773819f6cd8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a23ebfbea896802dd4c489773819f6cd8">&#9670;&nbsp;</a></span>stem_token_arr() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text stem_token_arr </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_704eb8350b43e1ca74c0f90ed1ba450e.html">methods</a></li><li class="navelem"><a class="el" href="dir_b10c028a6a58d6e0840bc150baba59b9.html">stemmer</a></li><li class="navelem"><a class="el" href="dir_e2e6d80cc57daae810c80cbdae687e33.html">src</a></li><li class="navelem"><a class="el" href="dir_3749b33f41e0a82f4dfb20be7f91dfa3.html">pg_gp</a></li><li class="navelem"><a class="el" href="porter__stemmer_8sql__in.html">porter_stemmer.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:57 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/pred__metrics_8sql__in.html b/docs/rc/pred__metrics_8sql__in.html
new file mode 100644
index 0000000..c9fc343
--- /dev/null
+++ b/docs/rc/pred__metrics_8sql__in.html
@@ -0,0 +1,1382 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: pred_metrics.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('pred__metrics_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">pred_metrics.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>A collection of summary statistics to gauge model accuracy based on predicted values vs. ground-truth values.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a62b746073072a8a7ab2e8b10189b3b8f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pred__metrics_8sql__in.html#a62b746073072a8a7ab2e8b10189b3b8f">mean_abs_error</a> (text table_in, text table_out, text prediction_col, text observed_col, text grouping_cols)</td></tr>
+<tr class="memdesc:a62b746073072a8a7ab2e8b10189b3b8f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Mean Absolute Error.  <a href="#a62b746073072a8a7ab2e8b10189b3b8f">More...</a><br /></td></tr>
+<tr class="separator:a62b746073072a8a7ab2e8b10189b3b8f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5640dad3c1daee2ae20234cd6281e1f9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pred__metrics_8sql__in.html#a5640dad3c1daee2ae20234cd6281e1f9">mean_abs_error</a> (text table_in, text table_out, text prediction_col, text observed_col)</td></tr>
+<tr class="separator:a5640dad3c1daee2ae20234cd6281e1f9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad9bcfc60fa213b640b6892609cda87ef"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pred__metrics_8sql__in.html#ad9bcfc60fa213b640b6892609cda87ef">mean_abs_error</a> (text message)</td></tr>
+<tr class="separator:ad9bcfc60fa213b640b6892609cda87ef"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7b7cb1726f0c0630f6275f003a8b3c1f"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pred__metrics_8sql__in.html#a7b7cb1726f0c0630f6275f003a8b3c1f">mean_abs_error</a> ()</td></tr>
+<tr class="separator:a7b7cb1726f0c0630f6275f003a8b3c1f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac065af35e165ee070488e52ae6defeb4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pred__metrics_8sql__in.html#ac065af35e165ee070488e52ae6defeb4">mean_abs_perc_error</a> (text table_in, text table_out, text prediction_col, text observed_col, text grouping_cols)</td></tr>
+<tr class="memdesc:ac065af35e165ee070488e52ae6defeb4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Mean Absolute Percentage Error.  <a href="#ac065af35e165ee070488e52ae6defeb4">More...</a><br /></td></tr>
+<tr class="separator:ac065af35e165ee070488e52ae6defeb4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a27125644edf424100624332dcc119458"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pred__metrics_8sql__in.html#a27125644edf424100624332dcc119458">mean_abs_perc_error</a> (text table_in, text table_out, text prediction_col, text observed_col)</td></tr>
+<tr class="separator:a27125644edf424100624332dcc119458"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6a88be3e0b687fa54390f74897432f35"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pred__metrics_8sql__in.html#a6a88be3e0b687fa54390f74897432f35">mean_abs_perc_error</a> (text message)</td></tr>
+<tr class="separator:a6a88be3e0b687fa54390f74897432f35"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a358ac764059e162baa03b3786328ef03"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pred__metrics_8sql__in.html#a358ac764059e162baa03b3786328ef03">mean_abs_perc_error</a> ()</td></tr>
+<tr class="separator:a358ac764059e162baa03b3786328ef03"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a000a818f3463898be8cb439ab12de657"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pred__metrics_8sql__in.html#a000a818f3463898be8cb439ab12de657">mean_perc_error</a> (text table_in, text table_out, text prediction_col, text observed_col, text grouping_cols)</td></tr>
+<tr class="memdesc:a000a818f3463898be8cb439ab12de657"><td class="mdescLeft">&#160;</td><td class="mdescRight">Mean Percentage Error.  <a href="#a000a818f3463898be8cb439ab12de657">More...</a><br /></td></tr>
+<tr class="separator:a000a818f3463898be8cb439ab12de657"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adcd1cee1d1abc41c4c8404e3dfe1e128"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pred__metrics_8sql__in.html#adcd1cee1d1abc41c4c8404e3dfe1e128">mean_perc_error</a> (text table_in, text table_out, text prediction_col, text observed_col)</td></tr>
+<tr class="separator:adcd1cee1d1abc41c4c8404e3dfe1e128"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3011fb3e57a5606959da30aac0abd801"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pred__metrics_8sql__in.html#a3011fb3e57a5606959da30aac0abd801">mean_perc_error</a> (text message)</td></tr>
+<tr class="separator:a3011fb3e57a5606959da30aac0abd801"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae5b776a2b671403b62a2b94a8de76574"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pred__metrics_8sql__in.html#ae5b776a2b671403b62a2b94a8de76574">mean_perc_error</a> ()</td></tr>
+<tr class="separator:ae5b776a2b671403b62a2b94a8de76574"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac171ed21c9230f7ac42fe5d0108362d6"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pred__metrics_8sql__in.html#ac171ed21c9230f7ac42fe5d0108362d6">mean_squared_error</a> (text table_in, text table_out, text prediction_col, text observed_col, text grouping_cols)</td></tr>
+<tr class="memdesc:ac171ed21c9230f7ac42fe5d0108362d6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Mean Squared Error.  <a href="#ac171ed21c9230f7ac42fe5d0108362d6">More...</a><br /></td></tr>
+<tr class="separator:ac171ed21c9230f7ac42fe5d0108362d6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ada2f6933ef0f9ecc6e40e0cdd48a2ff4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pred__metrics_8sql__in.html#ada2f6933ef0f9ecc6e40e0cdd48a2ff4">mean_squared_error</a> (text table_in, text table_out, text prediction_col, text observed_col)</td></tr>
+<tr class="separator:ada2f6933ef0f9ecc6e40e0cdd48a2ff4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9233da7d17f5a09bd345dcedabd5e509"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pred__metrics_8sql__in.html#a9233da7d17f5a09bd345dcedabd5e509">mean_squared_error</a> (text message)</td></tr>
+<tr class="separator:a9233da7d17f5a09bd345dcedabd5e509"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a335747f3e5c611fb426b693aa270d340"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pred__metrics_8sql__in.html#a335747f3e5c611fb426b693aa270d340">mean_squared_error</a> ()</td></tr>
+<tr class="separator:a335747f3e5c611fb426b693aa270d340"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2e00cc6c0666528b7ed420a89a3b6413"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pred__metrics_8sql__in.html#a2e00cc6c0666528b7ed420a89a3b6413">r2_score</a> (text table_in, text table_out, text prediction_col, text observed_col, text grouping_cols)</td></tr>
+<tr class="memdesc:a2e00cc6c0666528b7ed420a89a3b6413"><td class="mdescLeft">&#160;</td><td class="mdescRight">R2 Score.  <a href="#a2e00cc6c0666528b7ed420a89a3b6413">More...</a><br /></td></tr>
+<tr class="separator:a2e00cc6c0666528b7ed420a89a3b6413"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aee34887f9fe23e90cd130ec0c2666008"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pred__metrics_8sql__in.html#aee34887f9fe23e90cd130ec0c2666008">r2_score</a> (text table_in, text table_out, text prediction_col, text observed_col)</td></tr>
+<tr class="separator:aee34887f9fe23e90cd130ec0c2666008"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0061e653014344317bd9a0e9f964a3e2"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pred__metrics_8sql__in.html#a0061e653014344317bd9a0e9f964a3e2">r2_score</a> (text message)</td></tr>
+<tr class="separator:a0061e653014344317bd9a0e9f964a3e2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae858a4cf95d805da71db17d1018d500f"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pred__metrics_8sql__in.html#ae858a4cf95d805da71db17d1018d500f">r2_score</a> ()</td></tr>
+<tr class="separator:ae858a4cf95d805da71db17d1018d500f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a129d96c2f4645d026634d9e1826ed9a0"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pred__metrics_8sql__in.html#a129d96c2f4645d026634d9e1826ed9a0">adjusted_r2_score</a> (text table_in, text table_out, text prediction_col, text observed_col, integer num_predictors, integer training_size, text grouping_cols)</td></tr>
+<tr class="memdesc:a129d96c2f4645d026634d9e1826ed9a0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Adjusted R2 Score.  <a href="#a129d96c2f4645d026634d9e1826ed9a0">More...</a><br /></td></tr>
+<tr class="separator:a129d96c2f4645d026634d9e1826ed9a0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad50bf1fb684d2e285ad26478f9a2aa84"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pred__metrics_8sql__in.html#ad50bf1fb684d2e285ad26478f9a2aa84">adjusted_r2_score</a> (text table_in, text table_out, text prediction_col, text observed_col, integer num_predictors, integer training_size)</td></tr>
+<tr class="separator:ad50bf1fb684d2e285ad26478f9a2aa84"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a424d641abd6653a870f7a835778450c7"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pred__metrics_8sql__in.html#a424d641abd6653a870f7a835778450c7">adjusted_r2_score</a> (text message)</td></tr>
+<tr class="separator:a424d641abd6653a870f7a835778450c7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a70d9e59f0f44519b173a82b9731e1cc1"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pred__metrics_8sql__in.html#a70d9e59f0f44519b173a82b9731e1cc1">adjusted_r2_score</a> ()</td></tr>
+<tr class="separator:a70d9e59f0f44519b173a82b9731e1cc1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aedc849fa15c7c788cf17bb74244082a0"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pred__metrics_8sql__in.html#aedc849fa15c7c788cf17bb74244082a0">binary_classifier</a> (text table_in, text table_out, text prediction_col, text observed_col, text grouping_cols)</td></tr>
+<tr class="memdesc:aedc849fa15c7c788cf17bb74244082a0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Binary Classifier.  <a href="#aedc849fa15c7c788cf17bb74244082a0">More...</a><br /></td></tr>
+<tr class="separator:aedc849fa15c7c788cf17bb74244082a0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a41dff9da82f7a1a421ed58f183eb6651"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pred__metrics_8sql__in.html#a41dff9da82f7a1a421ed58f183eb6651">binary_classifier</a> (text table_in, text table_out, text prediction_col, text observed_col)</td></tr>
+<tr class="separator:a41dff9da82f7a1a421ed58f183eb6651"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afe32ecfa017b25b544654bf3c5836efc"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pred__metrics_8sql__in.html#afe32ecfa017b25b544654bf3c5836efc">binary_classifier</a> (text message)</td></tr>
+<tr class="separator:afe32ecfa017b25b544654bf3c5836efc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1687dbb9561ff60738a1549a37c1fe73"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pred__metrics_8sql__in.html#a1687dbb9561ff60738a1549a37c1fe73">binary_classifier</a> ()</td></tr>
+<tr class="separator:a1687dbb9561ff60738a1549a37c1fe73"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac9a3057fb15ed515509de58c829bb591"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pred__metrics_8sql__in.html#ac9a3057fb15ed515509de58c829bb591">area_under_roc</a> (text table_in, text table_out, text prediction_col, text observed_col, text grouping_cols)</td></tr>
+<tr class="memdesc:ac9a3057fb15ed515509de58c829bb591"><td class="mdescLeft">&#160;</td><td class="mdescRight">Area under ROC Curve.  <a href="#ac9a3057fb15ed515509de58c829bb591">More...</a><br /></td></tr>
+<tr class="separator:ac9a3057fb15ed515509de58c829bb591"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9c0f1d6fa8ac88b1151710795d762e47"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pred__metrics_8sql__in.html#a9c0f1d6fa8ac88b1151710795d762e47">area_under_roc</a> (text table_in, text table_out, text prediction_col, text observed_col)</td></tr>
+<tr class="separator:a9c0f1d6fa8ac88b1151710795d762e47"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a92da7daab6584c8981b85a3c4f830c3b"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pred__metrics_8sql__in.html#a92da7daab6584c8981b85a3c4f830c3b">area_under_roc</a> (text message)</td></tr>
+<tr class="separator:a92da7daab6584c8981b85a3c4f830c3b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a341c337551c0bf8785093b48bbf10cc9"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pred__metrics_8sql__in.html#a341c337551c0bf8785093b48bbf10cc9">area_under_roc</a> ()</td></tr>
+<tr class="separator:a341c337551c0bf8785093b48bbf10cc9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3a6234adcb53ff4f77620774f0c7c054"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pred__metrics_8sql__in.html#a3a6234adcb53ff4f77620774f0c7c054">confusion_matrix</a> (text table_in, text table_out, text prediction_col, text observed_col)</td></tr>
+<tr class="memdesc:a3a6234adcb53ff4f77620774f0c7c054"><td class="mdescLeft">&#160;</td><td class="mdescRight">Confusion Matrix.  <a href="#a3a6234adcb53ff4f77620774f0c7c054">More...</a><br /></td></tr>
+<tr class="separator:a3a6234adcb53ff4f77620774f0c7c054"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad66709b77e74920ee9711cda1617a273"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pred__metrics_8sql__in.html#ad66709b77e74920ee9711cda1617a273">confusion_matrix</a> (text message)</td></tr>
+<tr class="separator:ad66709b77e74920ee9711cda1617a273"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa70c6d5ca1ac9d4e6504f15f6b19a9e4"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pred__metrics_8sql__in.html#aa70c6d5ca1ac9d4e6504f15f6b19a9e4">confusion_matrix</a> ()</td></tr>
+<tr class="separator:aa70c6d5ca1ac9d4e6504f15f6b19a9e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>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</p>
+<p><a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a></p>
+<p>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.</p>
+<dl class="section date"><dt>Date</dt><dd>April 2016 </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="a129d96c2f4645d026634d9e1826ed9a0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a129d96c2f4645d026634d9e1826ed9a0">&#9670;&nbsp;</a></span>adjusted_r2_score() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void adjusted_r2_score </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>table_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>table_out</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>prediction_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>observed_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_predictors</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>training_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">table_in</td><td>Name of the input table. </td></tr>
+    <tr><td class="paramname">table_out</td><td>Name of the output table. </td></tr>
+    <tr><td class="paramname">prediction_col</td><td>Name of the column of predicted values from input table. </td></tr>
+    <tr><td class="paramname">observed_col</td><td>Name of the column of observed values from input table. </td></tr>
+    <tr><td class="paramname">num_predictors</td><td>The number of parameters in the predicting model, not counting the constant term. </td></tr>
+    <tr><td class="paramname">training_size</td><td>The number of rows used for training, excluding any NULL rows. </td></tr>
+    <tr><td class="paramname">grouping_cols</td><td>Name of the column of grouping values from input table. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="ad50bf1fb684d2e285ad26478f9a2aa84"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad50bf1fb684d2e285ad26478f9a2aa84">&#9670;&nbsp;</a></span>adjusted_r2_score() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void adjusted_r2_score </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>table_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>table_out</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>prediction_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>observed_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_predictors</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>training_size</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a424d641abd6653a870f7a835778450c7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a424d641abd6653a870f7a835778450c7">&#9670;&nbsp;</a></span>adjusted_r2_score() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text adjusted_r2_score </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a70d9e59f0f44519b173a82b9731e1cc1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a70d9e59f0f44519b173a82b9731e1cc1">&#9670;&nbsp;</a></span>adjusted_r2_score() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text adjusted_r2_score </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac9a3057fb15ed515509de58c829bb591"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac9a3057fb15ed515509de58c829bb591">&#9670;&nbsp;</a></span>area_under_roc() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void area_under_roc </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>table_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>table_out</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>prediction_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>observed_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">table_in</td><td>Name of the input table. </td></tr>
+    <tr><td class="paramname">table_out</td><td>Name of the output table. </td></tr>
+    <tr><td class="paramname">prediction_col</td><td>Name of the column of predicted values from input table. </td></tr>
+    <tr><td class="paramname">observed_col</td><td>Name of the column of observed values from input table. </td></tr>
+    <tr><td class="paramname">grouping_cols</td><td>Name of the column of grouping values from input table. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a9c0f1d6fa8ac88b1151710795d762e47"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9c0f1d6fa8ac88b1151710795d762e47">&#9670;&nbsp;</a></span>area_under_roc() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void area_under_roc </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>table_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>table_out</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>prediction_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>observed_col</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a92da7daab6584c8981b85a3c4f830c3b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a92da7daab6584c8981b85a3c4f830c3b">&#9670;&nbsp;</a></span>area_under_roc() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text area_under_roc </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a341c337551c0bf8785093b48bbf10cc9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a341c337551c0bf8785093b48bbf10cc9">&#9670;&nbsp;</a></span>area_under_roc() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text area_under_roc </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aedc849fa15c7c788cf17bb74244082a0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aedc849fa15c7c788cf17bb74244082a0">&#9670;&nbsp;</a></span>binary_classifier() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void binary_classifier </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>table_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>table_out</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>prediction_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>observed_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">table_in</td><td>Name of the input table. </td></tr>
+    <tr><td class="paramname">table_out</td><td>Name of the output table. </td></tr>
+    <tr><td class="paramname">prediction_col</td><td>Name of the column of predicted values from input table. </td></tr>
+    <tr><td class="paramname">observed_col</td><td>Name of the column of observed values from input table. </td></tr>
+    <tr><td class="paramname">grouping_cols</td><td>Name of the column of grouping values from input table. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a41dff9da82f7a1a421ed58f183eb6651"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a41dff9da82f7a1a421ed58f183eb6651">&#9670;&nbsp;</a></span>binary_classifier() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void binary_classifier </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>table_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>table_out</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>prediction_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>observed_col</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="afe32ecfa017b25b544654bf3c5836efc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afe32ecfa017b25b544654bf3c5836efc">&#9670;&nbsp;</a></span>binary_classifier() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text binary_classifier </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1687dbb9561ff60738a1549a37c1fe73"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1687dbb9561ff60738a1549a37c1fe73">&#9670;&nbsp;</a></span>binary_classifier() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text binary_classifier </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a3a6234adcb53ff4f77620774f0c7c054"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3a6234adcb53ff4f77620774f0c7c054">&#9670;&nbsp;</a></span>confusion_matrix() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void confusion_matrix </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>table_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>table_out</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>prediction_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>observed_col</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">table_in</td><td>Name of the input table. </td></tr>
+    <tr><td class="paramname">table_out</td><td>Name of the output table. </td></tr>
+    <tr><td class="paramname">prediction_col</td><td>Name of the column of predicted values from input table. </td></tr>
+    <tr><td class="paramname">observed_col</td><td>Name of the column of observed values from input table. </td></tr>
+    <tr><td class="paramname">grouping_cols</td><td>Name of the column of grouping values from input table. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="ad66709b77e74920ee9711cda1617a273"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad66709b77e74920ee9711cda1617a273">&#9670;&nbsp;</a></span>confusion_matrix() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text confusion_matrix </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa70c6d5ca1ac9d4e6504f15f6b19a9e4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa70c6d5ca1ac9d4e6504f15f6b19a9e4">&#9670;&nbsp;</a></span>confusion_matrix() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text confusion_matrix </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a62b746073072a8a7ab2e8b10189b3b8f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a62b746073072a8a7ab2e8b10189b3b8f">&#9670;&nbsp;</a></span>mean_abs_error() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void mean_abs_error </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>table_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>table_out</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>prediction_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>observed_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">table_in</td><td>Name of the input table. </td></tr>
+    <tr><td class="paramname">table_out</td><td>Name of the output table. </td></tr>
+    <tr><td class="paramname">prediction_col</td><td>Name of the column of predicted values from input table. </td></tr>
+    <tr><td class="paramname">observed_col</td><td>Name of the column of observed values from input table. </td></tr>
+    <tr><td class="paramname">grouping_cols</td><td>Name of the column of grouping values from input table. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a5640dad3c1daee2ae20234cd6281e1f9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5640dad3c1daee2ae20234cd6281e1f9">&#9670;&nbsp;</a></span>mean_abs_error() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void mean_abs_error </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>table_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>table_out</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>prediction_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>observed_col</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ad9bcfc60fa213b640b6892609cda87ef"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad9bcfc60fa213b640b6892609cda87ef">&#9670;&nbsp;</a></span>mean_abs_error() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text mean_abs_error </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7b7cb1726f0c0630f6275f003a8b3c1f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7b7cb1726f0c0630f6275f003a8b3c1f">&#9670;&nbsp;</a></span>mean_abs_error() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text mean_abs_error </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac065af35e165ee070488e52ae6defeb4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac065af35e165ee070488e52ae6defeb4">&#9670;&nbsp;</a></span>mean_abs_perc_error() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void mean_abs_perc_error </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>table_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>table_out</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>prediction_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>observed_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">table_in</td><td>Name of the input table. </td></tr>
+    <tr><td class="paramname">table_out</td><td>Name of the output table. </td></tr>
+    <tr><td class="paramname">prediction_col</td><td>Name of the column of predicted values from input table. </td></tr>
+    <tr><td class="paramname">observed_col</td><td>Name of the column of observed values from input table. </td></tr>
+    <tr><td class="paramname">grouping_cols</td><td>Name of the column of grouping values from input table. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a27125644edf424100624332dcc119458"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a27125644edf424100624332dcc119458">&#9670;&nbsp;</a></span>mean_abs_perc_error() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void mean_abs_perc_error </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>table_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>table_out</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>prediction_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>observed_col</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a6a88be3e0b687fa54390f74897432f35"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6a88be3e0b687fa54390f74897432f35">&#9670;&nbsp;</a></span>mean_abs_perc_error() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text mean_abs_perc_error </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a358ac764059e162baa03b3786328ef03"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a358ac764059e162baa03b3786328ef03">&#9670;&nbsp;</a></span>mean_abs_perc_error() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text mean_abs_perc_error </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a000a818f3463898be8cb439ab12de657"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a000a818f3463898be8cb439ab12de657">&#9670;&nbsp;</a></span>mean_perc_error() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void mean_perc_error </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>table_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>table_out</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>prediction_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>observed_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">table_in</td><td>Name of the input table. </td></tr>
+    <tr><td class="paramname">table_out</td><td>Name of the output table. </td></tr>
+    <tr><td class="paramname">prediction_col</td><td>Name of the column of predicted values from input table. </td></tr>
+    <tr><td class="paramname">observed_col</td><td>Name of the column of observed values from input table. </td></tr>
+    <tr><td class="paramname">grouping_cols</td><td>Name of the column of grouping values from input table. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="adcd1cee1d1abc41c4c8404e3dfe1e128"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adcd1cee1d1abc41c4c8404e3dfe1e128">&#9670;&nbsp;</a></span>mean_perc_error() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void mean_perc_error </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>table_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>table_out</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>prediction_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>observed_col</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a3011fb3e57a5606959da30aac0abd801"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3011fb3e57a5606959da30aac0abd801">&#9670;&nbsp;</a></span>mean_perc_error() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text mean_perc_error </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae5b776a2b671403b62a2b94a8de76574"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae5b776a2b671403b62a2b94a8de76574">&#9670;&nbsp;</a></span>mean_perc_error() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text mean_perc_error </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac171ed21c9230f7ac42fe5d0108362d6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac171ed21c9230f7ac42fe5d0108362d6">&#9670;&nbsp;</a></span>mean_squared_error() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void mean_squared_error </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>table_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>table_out</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>prediction_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>observed_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">table_in</td><td>Name of the input table. </td></tr>
+    <tr><td class="paramname">table_out</td><td>Name of the output table. </td></tr>
+    <tr><td class="paramname">prediction_col</td><td>Name of the column of predicted values from input table. </td></tr>
+    <tr><td class="paramname">observed_col</td><td>Name of the column of observed values from input table. </td></tr>
+    <tr><td class="paramname">grouping_cols</td><td>Name of the column of grouping values from input table. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="ada2f6933ef0f9ecc6e40e0cdd48a2ff4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ada2f6933ef0f9ecc6e40e0cdd48a2ff4">&#9670;&nbsp;</a></span>mean_squared_error() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void mean_squared_error </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>table_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>table_out</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>prediction_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>observed_col</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a9233da7d17f5a09bd345dcedabd5e509"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9233da7d17f5a09bd345dcedabd5e509">&#9670;&nbsp;</a></span>mean_squared_error() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text mean_squared_error </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a335747f3e5c611fb426b693aa270d340"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a335747f3e5c611fb426b693aa270d340">&#9670;&nbsp;</a></span>mean_squared_error() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text mean_squared_error </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a2e00cc6c0666528b7ed420a89a3b6413"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2e00cc6c0666528b7ed420a89a3b6413">&#9670;&nbsp;</a></span>r2_score() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void r2_score </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>table_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>table_out</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>prediction_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>observed_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">table_in</td><td>Name of the input table. </td></tr>
+    <tr><td class="paramname">table_out</td><td>Name of the output table. </td></tr>
+    <tr><td class="paramname">prediction_col</td><td>Name of the column of predicted values from input table. </td></tr>
+    <tr><td class="paramname">observed_col</td><td>Name of the column of observed values from input table. </td></tr>
+    <tr><td class="paramname">grouping_cols</td><td>Name of the column of grouping values from input table. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="aee34887f9fe23e90cd130ec0c2666008"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aee34887f9fe23e90cd130ec0c2666008">&#9670;&nbsp;</a></span>r2_score() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void r2_score </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>table_in</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>table_out</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>prediction_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>observed_col</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a0061e653014344317bd9a0e9f964a3e2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0061e653014344317bd9a0e9f964a3e2">&#9670;&nbsp;</a></span>r2_score() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text r2_score </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae858a4cf95d805da71db17d1018d500f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae858a4cf95d805da71db17d1018d500f">&#9670;&nbsp;</a></span>r2_score() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text r2_score </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_505cd743a8a717435eca324f49291a46.html">stats</a></li><li class="navelem"><a class="el" href="pred__metrics_8sql__in.html">pred_metrics.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:57 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/prob_8sql__in.html b/docs/rc/prob_8sql__in.html
new file mode 100644
index 0000000..ebd7aa5
--- /dev/null
+++ b/docs/rc/prob_8sql__in.html
@@ -0,0 +1,4121 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: prob.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('prob_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">prob.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>SQL functions for evaluating probability functions.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:aea21a931dc5578a570e3370af3d8d43a"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#aea21a931dc5578a570e3370af3d8d43a">bernoulli_cdf</a> (float8 x, float8 sp)</td></tr>
+<tr class="memdesc:aea21a931dc5578a570e3370af3d8d43a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Bernoulli cumulative distribution function.  <a href="#aea21a931dc5578a570e3370af3d8d43a">More...</a><br /></td></tr>
+<tr class="separator:aea21a931dc5578a570e3370af3d8d43a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a434b3ad1f3964835834dc2a942b820ef"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a434b3ad1f3964835834dc2a942b820ef">bernoulli_pmf</a> (int4 x, float8 sp)</td></tr>
+<tr class="memdesc:a434b3ad1f3964835834dc2a942b820ef"><td class="mdescLeft">&#160;</td><td class="mdescRight">Bernoulli probability mass function.  <a href="#a434b3ad1f3964835834dc2a942b820ef">More...</a><br /></td></tr>
+<tr class="separator:a434b3ad1f3964835834dc2a942b820ef"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7133c2e86fd2f6384416ee0e4fd3a60b"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a7133c2e86fd2f6384416ee0e4fd3a60b">bernoulli_quantile</a> (float8 p, float8 sp)</td></tr>
+<tr class="memdesc:a7133c2e86fd2f6384416ee0e4fd3a60b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Bernoulli quantile function.  <a href="#a7133c2e86fd2f6384416ee0e4fd3a60b">More...</a><br /></td></tr>
+<tr class="separator:a7133c2e86fd2f6384416ee0e4fd3a60b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a72e1cca872da35592075dbcfb18aed3f"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a72e1cca872da35592075dbcfb18aed3f">beta_cdf</a> (float8 x, float8 alpha, float8 beta)</td></tr>
+<tr class="memdesc:a72e1cca872da35592075dbcfb18aed3f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Beta cumulative distribution function.  <a href="#a72e1cca872da35592075dbcfb18aed3f">More...</a><br /></td></tr>
+<tr class="separator:a72e1cca872da35592075dbcfb18aed3f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa105049e6e3bb9b3891b0ed1b343e28e"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#aa105049e6e3bb9b3891b0ed1b343e28e">beta_pdf</a> (float8 x, float8 alpha, float8 beta)</td></tr>
+<tr class="memdesc:aa105049e6e3bb9b3891b0ed1b343e28e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Beta probability density function.  <a href="#aa105049e6e3bb9b3891b0ed1b343e28e">More...</a><br /></td></tr>
+<tr class="separator:aa105049e6e3bb9b3891b0ed1b343e28e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a32433aa742c0504d33e98e28a3e2f190"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a32433aa742c0504d33e98e28a3e2f190">beta_quantile</a> (float8 p, float8 alpha, float8 beta)</td></tr>
+<tr class="memdesc:a32433aa742c0504d33e98e28a3e2f190"><td class="mdescLeft">&#160;</td><td class="mdescRight">Beta quantile function.  <a href="#a32433aa742c0504d33e98e28a3e2f190">More...</a><br /></td></tr>
+<tr class="separator:a32433aa742c0504d33e98e28a3e2f190"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa5000bad6e2e4af1c8cbfec7ea884476"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#aa5000bad6e2e4af1c8cbfec7ea884476">binomial_cdf</a> (float8 x, int4 n, float8 sp)</td></tr>
+<tr class="memdesc:aa5000bad6e2e4af1c8cbfec7ea884476"><td class="mdescLeft">&#160;</td><td class="mdescRight">Binomial cumulative distribution function.  <a href="#aa5000bad6e2e4af1c8cbfec7ea884476">More...</a><br /></td></tr>
+<tr class="separator:aa5000bad6e2e4af1c8cbfec7ea884476"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa0614475b8685bf8e37533d2ac5bb116"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#aa0614475b8685bf8e37533d2ac5bb116">binomial_pmf</a> (int4 x, int4 n, float8 sp)</td></tr>
+<tr class="memdesc:aa0614475b8685bf8e37533d2ac5bb116"><td class="mdescLeft">&#160;</td><td class="mdescRight">Binomial probability mass function.  <a href="#aa0614475b8685bf8e37533d2ac5bb116">More...</a><br /></td></tr>
+<tr class="separator:aa0614475b8685bf8e37533d2ac5bb116"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a49f421c58d2e1abd63b83d71af9edf21"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a49f421c58d2e1abd63b83d71af9edf21">binomial_quantile</a> (float8 p, int4 n, float8 sp)</td></tr>
+<tr class="memdesc:a49f421c58d2e1abd63b83d71af9edf21"><td class="mdescLeft">&#160;</td><td class="mdescRight">Binomial quantile function.  <a href="#a49f421c58d2e1abd63b83d71af9edf21">More...</a><br /></td></tr>
+<tr class="separator:a49f421c58d2e1abd63b83d71af9edf21"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2d8874c2a5679403a473bfedb14467a4"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a2d8874c2a5679403a473bfedb14467a4">cauchy_cdf</a> (float8 x, float8 location, float8 scale)</td></tr>
+<tr class="memdesc:a2d8874c2a5679403a473bfedb14467a4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Cauchy cumulative distribution function.  <a href="#a2d8874c2a5679403a473bfedb14467a4">More...</a><br /></td></tr>
+<tr class="separator:a2d8874c2a5679403a473bfedb14467a4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aebfad9365a7fc7a553c3b5c7931f2450"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#aebfad9365a7fc7a553c3b5c7931f2450">cauchy_pdf</a> (float8 x, float8 location, float8 scale)</td></tr>
+<tr class="memdesc:aebfad9365a7fc7a553c3b5c7931f2450"><td class="mdescLeft">&#160;</td><td class="mdescRight">Cauchy probability density function.  <a href="#aebfad9365a7fc7a553c3b5c7931f2450">More...</a><br /></td></tr>
+<tr class="separator:aebfad9365a7fc7a553c3b5c7931f2450"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae8aa9b741e89c8d9236a682d218006e0"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#ae8aa9b741e89c8d9236a682d218006e0">cauchy_quantile</a> (float8 p, float8 location, float8 scale)</td></tr>
+<tr class="memdesc:ae8aa9b741e89c8d9236a682d218006e0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Cauchy quantile function.  <a href="#ae8aa9b741e89c8d9236a682d218006e0">More...</a><br /></td></tr>
+<tr class="separator:ae8aa9b741e89c8d9236a682d218006e0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a230513b6b549d5b445cbacbdbab42c15"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a230513b6b549d5b445cbacbdbab42c15">chi_squared_cdf</a> (float8 x, float8 df)</td></tr>
+<tr class="memdesc:a230513b6b549d5b445cbacbdbab42c15"><td class="mdescLeft">&#160;</td><td class="mdescRight">Chi-squared cumulative distribution function.  <a href="#a230513b6b549d5b445cbacbdbab42c15">More...</a><br /></td></tr>
+<tr class="separator:a230513b6b549d5b445cbacbdbab42c15"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a90bccc717d7052e83bafd7f160a783b1"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a90bccc717d7052e83bafd7f160a783b1">chi_squared_pdf</a> (float8 x, float8 df)</td></tr>
+<tr class="memdesc:a90bccc717d7052e83bafd7f160a783b1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Chi-squared distribution probability density function.  <a href="#a90bccc717d7052e83bafd7f160a783b1">More...</a><br /></td></tr>
+<tr class="separator:a90bccc717d7052e83bafd7f160a783b1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad125307fe65a33b60f6dd524037d4548"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#ad125307fe65a33b60f6dd524037d4548">chi_squared_quantile</a> (float8 p, float8 df)</td></tr>
+<tr class="memdesc:ad125307fe65a33b60f6dd524037d4548"><td class="mdescLeft">&#160;</td><td class="mdescRight">Chi-squared distribution quantile function.  <a href="#ad125307fe65a33b60f6dd524037d4548">More...</a><br /></td></tr>
+<tr class="separator:ad125307fe65a33b60f6dd524037d4548"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6d1bf6816f56b8e5ba6bf6ca94752f46"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a6d1bf6816f56b8e5ba6bf6ca94752f46">exponential_cdf</a> (float8 x, float8 lambda)</td></tr>
+<tr class="memdesc:a6d1bf6816f56b8e5ba6bf6ca94752f46"><td class="mdescLeft">&#160;</td><td class="mdescRight">Exponential cumulative distribution function.  <a href="#a6d1bf6816f56b8e5ba6bf6ca94752f46">More...</a><br /></td></tr>
+<tr class="separator:a6d1bf6816f56b8e5ba6bf6ca94752f46"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a18a5458c4bc85f0c4ea321317f90bdbb"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a18a5458c4bc85f0c4ea321317f90bdbb">exponential_pdf</a> (float8 x, float8 lambda)</td></tr>
+<tr class="memdesc:a18a5458c4bc85f0c4ea321317f90bdbb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Exponential probability density function.  <a href="#a18a5458c4bc85f0c4ea321317f90bdbb">More...</a><br /></td></tr>
+<tr class="separator:a18a5458c4bc85f0c4ea321317f90bdbb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae3687b8e69a402154b829a6531b1b279"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#ae3687b8e69a402154b829a6531b1b279">exponential_quantile</a> (float8 p, float8 lambda)</td></tr>
+<tr class="memdesc:ae3687b8e69a402154b829a6531b1b279"><td class="mdescLeft">&#160;</td><td class="mdescRight">Exponential quantile function.  <a href="#ae3687b8e69a402154b829a6531b1b279">More...</a><br /></td></tr>
+<tr class="separator:ae3687b8e69a402154b829a6531b1b279"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acffffe04c15eccd2e88cdac250bccc68"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#acffffe04c15eccd2e88cdac250bccc68">extreme_value_cdf</a> (float8 x, float8 location, float8 scale)</td></tr>
+<tr class="memdesc:acffffe04c15eccd2e88cdac250bccc68"><td class="mdescLeft">&#160;</td><td class="mdescRight">Extreme Value cumulative distribution function.  <a href="#acffffe04c15eccd2e88cdac250bccc68">More...</a><br /></td></tr>
+<tr class="separator:acffffe04c15eccd2e88cdac250bccc68"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a03a3494462f4cb8c9fb6212e72b0b2e9"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a03a3494462f4cb8c9fb6212e72b0b2e9">extreme_value_pdf</a> (float8 x, float8 location, float8 scale)</td></tr>
+<tr class="memdesc:a03a3494462f4cb8c9fb6212e72b0b2e9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Extreme Value probability density function.  <a href="#a03a3494462f4cb8c9fb6212e72b0b2e9">More...</a><br /></td></tr>
+<tr class="separator:a03a3494462f4cb8c9fb6212e72b0b2e9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aeb5a7d295b83a891774a4fb0ef27c458"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#aeb5a7d295b83a891774a4fb0ef27c458">extreme_value_quantile</a> (float8 p, float8 location, float8 scale)</td></tr>
+<tr class="memdesc:aeb5a7d295b83a891774a4fb0ef27c458"><td class="mdescLeft">&#160;</td><td class="mdescRight">Extreme Value quantile function.  <a href="#aeb5a7d295b83a891774a4fb0ef27c458">More...</a><br /></td></tr>
+<tr class="separator:aeb5a7d295b83a891774a4fb0ef27c458"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6c5b3e35531e44098f9d0cbef14cb8a6"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a6c5b3e35531e44098f9d0cbef14cb8a6">fisher_f_cdf</a> (float8 x, float8 df1, float8 df2)</td></tr>
+<tr class="memdesc:a6c5b3e35531e44098f9d0cbef14cb8a6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Fisher F cumulative distribution function.  <a href="#a6c5b3e35531e44098f9d0cbef14cb8a6">More...</a><br /></td></tr>
+<tr class="separator:a6c5b3e35531e44098f9d0cbef14cb8a6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1c7937426379a8913519a6abc5a38ac2"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a1c7937426379a8913519a6abc5a38ac2">fisher_f_pdf</a> (float8 x, float8 df1, float8 df2)</td></tr>
+<tr class="memdesc:a1c7937426379a8913519a6abc5a38ac2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Fisher F probability density function.  <a href="#a1c7937426379a8913519a6abc5a38ac2">More...</a><br /></td></tr>
+<tr class="separator:a1c7937426379a8913519a6abc5a38ac2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab6ed888a5338a0bee9c55edf4d33847f"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#ab6ed888a5338a0bee9c55edf4d33847f">fisher_f_quantile</a> (float8 p, float8 df1, float8 df2)</td></tr>
+<tr class="memdesc:ab6ed888a5338a0bee9c55edf4d33847f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Fisher F quantile function.  <a href="#ab6ed888a5338a0bee9c55edf4d33847f">More...</a><br /></td></tr>
+<tr class="separator:ab6ed888a5338a0bee9c55edf4d33847f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab6760b0486bad2f1ab0635eb59404e7c"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#ab6760b0486bad2f1ab0635eb59404e7c">gamma_cdf</a> (float8 x, float8 shape, float8 scale)</td></tr>
+<tr class="memdesc:ab6760b0486bad2f1ab0635eb59404e7c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Gamma cumulative distribution function.  <a href="#ab6760b0486bad2f1ab0635eb59404e7c">More...</a><br /></td></tr>
+<tr class="separator:ab6760b0486bad2f1ab0635eb59404e7c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6c37e3bda2596accbb46525321a328c4"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a6c37e3bda2596accbb46525321a328c4">gamma_pdf</a> (float8 x, float8 shape, float8 scale)</td></tr>
+<tr class="memdesc:a6c37e3bda2596accbb46525321a328c4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Gamma probability density function.  <a href="#a6c37e3bda2596accbb46525321a328c4">More...</a><br /></td></tr>
+<tr class="separator:a6c37e3bda2596accbb46525321a328c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac48bbd491bd34831415705c3a0b7bf29"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#ac48bbd491bd34831415705c3a0b7bf29">gamma_quantile</a> (float8 p, float8 shape, float8 scale)</td></tr>
+<tr class="memdesc:ac48bbd491bd34831415705c3a0b7bf29"><td class="mdescLeft">&#160;</td><td class="mdescRight">Gamma quantile function.  <a href="#ac48bbd491bd34831415705c3a0b7bf29">More...</a><br /></td></tr>
+<tr class="separator:ac48bbd491bd34831415705c3a0b7bf29"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a00879bdf7d48ceddedb3b4cc33511497"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a00879bdf7d48ceddedb3b4cc33511497">geometric_cdf</a> (float8 x, float8 sp)</td></tr>
+<tr class="memdesc:a00879bdf7d48ceddedb3b4cc33511497"><td class="mdescLeft">&#160;</td><td class="mdescRight">Geometric cumulative distribution function.  <a href="#a00879bdf7d48ceddedb3b4cc33511497">More...</a><br /></td></tr>
+<tr class="separator:a00879bdf7d48ceddedb3b4cc33511497"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5e08db93bd448a1e2164e106ce5781a4"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a5e08db93bd448a1e2164e106ce5781a4">geometric_pmf</a> (int4 x, float8 sp)</td></tr>
+<tr class="memdesc:a5e08db93bd448a1e2164e106ce5781a4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Geometric probability mass function.  <a href="#a5e08db93bd448a1e2164e106ce5781a4">More...</a><br /></td></tr>
+<tr class="separator:a5e08db93bd448a1e2164e106ce5781a4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a62674ca958aec0533cdf0a74a1dadea9"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a62674ca958aec0533cdf0a74a1dadea9">geometric_quantile</a> (float8 p, float8 sp)</td></tr>
+<tr class="memdesc:a62674ca958aec0533cdf0a74a1dadea9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Geometric quantile function.  <a href="#a62674ca958aec0533cdf0a74a1dadea9">More...</a><br /></td></tr>
+<tr class="separator:a62674ca958aec0533cdf0a74a1dadea9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5c48e7fa2fc7bcbc69c7f4da663d457f"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a5c48e7fa2fc7bcbc69c7f4da663d457f">hypergeometric_cdf</a> (float8 x, int4 r, int4 n, int4 N)</td></tr>
+<tr class="memdesc:a5c48e7fa2fc7bcbc69c7f4da663d457f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Hypergeometric cumulative distribution function.  <a href="#a5c48e7fa2fc7bcbc69c7f4da663d457f">More...</a><br /></td></tr>
+<tr class="separator:a5c48e7fa2fc7bcbc69c7f4da663d457f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afbd2f8d9fb30fb179f59cc14f1fd8d6d"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#afbd2f8d9fb30fb179f59cc14f1fd8d6d">hypergeometric_pmf</a> (int4 x, int4 r, int4 n, int4 N)</td></tr>
+<tr class="memdesc:afbd2f8d9fb30fb179f59cc14f1fd8d6d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Hypergeometric probability mass function.  <a href="#afbd2f8d9fb30fb179f59cc14f1fd8d6d">More...</a><br /></td></tr>
+<tr class="separator:afbd2f8d9fb30fb179f59cc14f1fd8d6d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a813cc27fe097e797ed0fb6022c7bb79a"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a813cc27fe097e797ed0fb6022c7bb79a">hypergeometric_quantile</a> (float8 p, int4 r, int4 n, int4 N)</td></tr>
+<tr class="memdesc:a813cc27fe097e797ed0fb6022c7bb79a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Hypergeometric quantile function.  <a href="#a813cc27fe097e797ed0fb6022c7bb79a">More...</a><br /></td></tr>
+<tr class="separator:a813cc27fe097e797ed0fb6022c7bb79a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a85e9c16aa2c6973ddeb7883a5f153d93"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a85e9c16aa2c6973ddeb7883a5f153d93">inverse_gamma_cdf</a> (float8 x, float8 shape, float8 scale)</td></tr>
+<tr class="memdesc:a85e9c16aa2c6973ddeb7883a5f153d93"><td class="mdescLeft">&#160;</td><td class="mdescRight">Inverse Gamma cumulative distribution function.  <a href="#a85e9c16aa2c6973ddeb7883a5f153d93">More...</a><br /></td></tr>
+<tr class="separator:a85e9c16aa2c6973ddeb7883a5f153d93"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a126211c2172a43a654288fa72a2349f9"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a126211c2172a43a654288fa72a2349f9">inverse_gamma_pdf</a> (float8 x, float8 shape, float8 scale)</td></tr>
+<tr class="memdesc:a126211c2172a43a654288fa72a2349f9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Inverse Gamma probability density function.  <a href="#a126211c2172a43a654288fa72a2349f9">More...</a><br /></td></tr>
+<tr class="separator:a126211c2172a43a654288fa72a2349f9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5876aae01f14729866d4fd52918a65ba"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a5876aae01f14729866d4fd52918a65ba">inverse_gamma_quantile</a> (float8 p, float8 shape, float8 scale)</td></tr>
+<tr class="memdesc:a5876aae01f14729866d4fd52918a65ba"><td class="mdescLeft">&#160;</td><td class="mdescRight">Inverse Gamma quantile function.  <a href="#a5876aae01f14729866d4fd52918a65ba">More...</a><br /></td></tr>
+<tr class="separator:a5876aae01f14729866d4fd52918a65ba"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aeef43f74f583bdff17bd074d9c0d9607"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#aeef43f74f583bdff17bd074d9c0d9607">kolmogorov_cdf</a> (float8 x)</td></tr>
+<tr class="memdesc:aeef43f74f583bdff17bd074d9c0d9607"><td class="mdescLeft">&#160;</td><td class="mdescRight">Kolmogorov cumulative distribution function.  <a href="#aeef43f74f583bdff17bd074d9c0d9607">More...</a><br /></td></tr>
+<tr class="separator:aeef43f74f583bdff17bd074d9c0d9607"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a64e197de8da3761acdeec9db7e211703"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a64e197de8da3761acdeec9db7e211703">laplace_cdf</a> (float8 x, float8 <a class="el" href="svec__util_8sql__in.html#a546b947319c9f48237120a31929bdfd9">mean</a>, float8 scale)</td></tr>
+<tr class="memdesc:a64e197de8da3761acdeec9db7e211703"><td class="mdescLeft">&#160;</td><td class="mdescRight">Laplace cumulative distribution function.  <a href="#a64e197de8da3761acdeec9db7e211703">More...</a><br /></td></tr>
+<tr class="separator:a64e197de8da3761acdeec9db7e211703"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a750278ad29d514793f76e159b773f410"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a750278ad29d514793f76e159b773f410">laplace_pdf</a> (float8 x, float8 <a class="el" href="svec__util_8sql__in.html#a546b947319c9f48237120a31929bdfd9">mean</a>, float8 scale)</td></tr>
+<tr class="memdesc:a750278ad29d514793f76e159b773f410"><td class="mdescLeft">&#160;</td><td class="mdescRight">Laplace probability density function.  <a href="#a750278ad29d514793f76e159b773f410">More...</a><br /></td></tr>
+<tr class="separator:a750278ad29d514793f76e159b773f410"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a77f94fc43d4777fc4f68d18e29454a81"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a77f94fc43d4777fc4f68d18e29454a81">laplace_quantile</a> (float8 p, float8 <a class="el" href="svec__util_8sql__in.html#a546b947319c9f48237120a31929bdfd9">mean</a>, float8 scale)</td></tr>
+<tr class="memdesc:a77f94fc43d4777fc4f68d18e29454a81"><td class="mdescLeft">&#160;</td><td class="mdescRight">Laplace quantile function.  <a href="#a77f94fc43d4777fc4f68d18e29454a81">More...</a><br /></td></tr>
+<tr class="separator:a77f94fc43d4777fc4f68d18e29454a81"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a140f674876813d5e786a4d8ba8d75c87"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a140f674876813d5e786a4d8ba8d75c87">logistic_cdf</a> (float8 x, float8 <a class="el" href="svec__util_8sql__in.html#a546b947319c9f48237120a31929bdfd9">mean</a>, float8 scale)</td></tr>
+<tr class="memdesc:a140f674876813d5e786a4d8ba8d75c87"><td class="mdescLeft">&#160;</td><td class="mdescRight">Logistic cumulative distribution function.  <a href="#a140f674876813d5e786a4d8ba8d75c87">More...</a><br /></td></tr>
+<tr class="separator:a140f674876813d5e786a4d8ba8d75c87"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afa38eb6c61d3c9825d5c172e6c17dbf7"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#afa38eb6c61d3c9825d5c172e6c17dbf7">logistic_pdf</a> (float8 x, float8 <a class="el" href="svec__util_8sql__in.html#a546b947319c9f48237120a31929bdfd9">mean</a>, float8 scale)</td></tr>
+<tr class="memdesc:afa38eb6c61d3c9825d5c172e6c17dbf7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Logistic probability density function.  <a href="#afa38eb6c61d3c9825d5c172e6c17dbf7">More...</a><br /></td></tr>
+<tr class="separator:afa38eb6c61d3c9825d5c172e6c17dbf7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5a77a0bc5884af2a914a955174892ae2"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a5a77a0bc5884af2a914a955174892ae2">logistic_quantile</a> (float8 p, float8 <a class="el" href="svec__util_8sql__in.html#a546b947319c9f48237120a31929bdfd9">mean</a>, float8 scale)</td></tr>
+<tr class="memdesc:a5a77a0bc5884af2a914a955174892ae2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Logistic quantile function.  <a href="#a5a77a0bc5884af2a914a955174892ae2">More...</a><br /></td></tr>
+<tr class="separator:a5a77a0bc5884af2a914a955174892ae2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4c05b347f8feb64e1236d21b850af61e"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a4c05b347f8feb64e1236d21b850af61e">lognormal_cdf</a> (float8 x, float8 location, float8 scale)</td></tr>
+<tr class="memdesc:a4c05b347f8feb64e1236d21b850af61e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Log-normal cumulative distribution function.  <a href="#a4c05b347f8feb64e1236d21b850af61e">More...</a><br /></td></tr>
+<tr class="separator:a4c05b347f8feb64e1236d21b850af61e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7370b797bf450f9aa54d4fea4d64d611"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a7370b797bf450f9aa54d4fea4d64d611">lognormal_pdf</a> (float8 x, float8 location, float8 scale)</td></tr>
+<tr class="memdesc:a7370b797bf450f9aa54d4fea4d64d611"><td class="mdescLeft">&#160;</td><td class="mdescRight">Log-normal probability density function.  <a href="#a7370b797bf450f9aa54d4fea4d64d611">More...</a><br /></td></tr>
+<tr class="separator:a7370b797bf450f9aa54d4fea4d64d611"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aab3a6de990ae5a81834274a1cf9cad8f"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#aab3a6de990ae5a81834274a1cf9cad8f">lognormal_quantile</a> (float8 p, float8 location, float8 scale)</td></tr>
+<tr class="memdesc:aab3a6de990ae5a81834274a1cf9cad8f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Log-normal quantile function.  <a href="#aab3a6de990ae5a81834274a1cf9cad8f">More...</a><br /></td></tr>
+<tr class="separator:aab3a6de990ae5a81834274a1cf9cad8f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad0a7e4474f828869fb90e62f8e6f04d7"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#ad0a7e4474f828869fb90e62f8e6f04d7">negative_binomial_cdf</a> (float8 x, float8 r, float8 sp)</td></tr>
+<tr class="memdesc:ad0a7e4474f828869fb90e62f8e6f04d7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Negative binomial cumulative distribution function.  <a href="#ad0a7e4474f828869fb90e62f8e6f04d7">More...</a><br /></td></tr>
+<tr class="separator:ad0a7e4474f828869fb90e62f8e6f04d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab9cbc30424eba30f2df2a32a7e45f138"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#ab9cbc30424eba30f2df2a32a7e45f138">negative_binomial_pmf</a> (int4 x, float8 r, float8 sp)</td></tr>
+<tr class="memdesc:ab9cbc30424eba30f2df2a32a7e45f138"><td class="mdescLeft">&#160;</td><td class="mdescRight">Negative binomial probability mass function.  <a href="#ab9cbc30424eba30f2df2a32a7e45f138">More...</a><br /></td></tr>
+<tr class="separator:ab9cbc30424eba30f2df2a32a7e45f138"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad9e541de8b41da2e7b7434f862db4845"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#ad9e541de8b41da2e7b7434f862db4845">negative_binomial_quantile</a> (float8 p, float8 r, float8 sp)</td></tr>
+<tr class="memdesc:ad9e541de8b41da2e7b7434f862db4845"><td class="mdescLeft">&#160;</td><td class="mdescRight">Negative binomial quantile function.  <a href="#ad9e541de8b41da2e7b7434f862db4845">More...</a><br /></td></tr>
+<tr class="separator:ad9e541de8b41da2e7b7434f862db4845"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1361569bd86e41f796c70f8cb277010e"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a1361569bd86e41f796c70f8cb277010e">non_central_beta_cdf</a> (float8 x, float8 alpha, float8 beta, float8 ncp)</td></tr>
+<tr class="memdesc:a1361569bd86e41f796c70f8cb277010e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Noncentral beta cumulative distribution function.  <a href="#a1361569bd86e41f796c70f8cb277010e">More...</a><br /></td></tr>
+<tr class="separator:a1361569bd86e41f796c70f8cb277010e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad4a12c083054f0e2d316ae76c9aaeef7"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#ad4a12c083054f0e2d316ae76c9aaeef7">non_central_beta_pdf</a> (float8 x, float8 alpha, float8 beta, float8 ncp)</td></tr>
+<tr class="memdesc:ad4a12c083054f0e2d316ae76c9aaeef7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Noncentral beta probability density function.  <a href="#ad4a12c083054f0e2d316ae76c9aaeef7">More...</a><br /></td></tr>
+<tr class="separator:ad4a12c083054f0e2d316ae76c9aaeef7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3073b409eaee3faa6d43df014662c279"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a3073b409eaee3faa6d43df014662c279">non_central_beta_quantile</a> (float8 p, float8 alpha, float8 beta, float8 ncp)</td></tr>
+<tr class="memdesc:a3073b409eaee3faa6d43df014662c279"><td class="mdescLeft">&#160;</td><td class="mdescRight">Noncentral beta quantile function.  <a href="#a3073b409eaee3faa6d43df014662c279">More...</a><br /></td></tr>
+<tr class="separator:a3073b409eaee3faa6d43df014662c279"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab4b7d2cf10bb031328dcc34c6ff494ad"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#ab4b7d2cf10bb031328dcc34c6ff494ad">non_central_chi_squared_cdf</a> (float8 x, float8 df, float8 ncp)</td></tr>
+<tr class="memdesc:ab4b7d2cf10bb031328dcc34c6ff494ad"><td class="mdescLeft">&#160;</td><td class="mdescRight">Noncentral chi-squared cumulative distribution function.  <a href="#ab4b7d2cf10bb031328dcc34c6ff494ad">More...</a><br /></td></tr>
+<tr class="separator:ab4b7d2cf10bb031328dcc34c6ff494ad"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa7a563183224593d1e0d623a3c5489d8"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#aa7a563183224593d1e0d623a3c5489d8">non_central_chi_squared_pdf</a> (float8 x, float8 df, float8 ncp)</td></tr>
+<tr class="memdesc:aa7a563183224593d1e0d623a3c5489d8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Noncentral chi-squared distribution probability density function.  <a href="#aa7a563183224593d1e0d623a3c5489d8">More...</a><br /></td></tr>
+<tr class="separator:aa7a563183224593d1e0d623a3c5489d8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad694e29187b629ae683ef1235d2b9270"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#ad694e29187b629ae683ef1235d2b9270">non_central_chi_squared_quantile</a> (float8 p, float8 df, float8 ncp)</td></tr>
+<tr class="memdesc:ad694e29187b629ae683ef1235d2b9270"><td class="mdescLeft">&#160;</td><td class="mdescRight">Noncentral chi-squared distribution quantile function.  <a href="#ad694e29187b629ae683ef1235d2b9270">More...</a><br /></td></tr>
+<tr class="separator:ad694e29187b629ae683ef1235d2b9270"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a00051df630007b530ce86b4ab44a0434"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a00051df630007b530ce86b4ab44a0434">non_central_f_cdf</a> (float8 x, float8 df1, float8 df2, float8 ncp)</td></tr>
+<tr class="memdesc:a00051df630007b530ce86b4ab44a0434"><td class="mdescLeft">&#160;</td><td class="mdescRight">Noncentral Fisher F cumulative distribution function.  <a href="#a00051df630007b530ce86b4ab44a0434">More...</a><br /></td></tr>
+<tr class="separator:a00051df630007b530ce86b4ab44a0434"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3d94edcf90fca1fa52671293a9ea9c2f"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a3d94edcf90fca1fa52671293a9ea9c2f">non_central_f_pdf</a> (float8 x, float8 df1, float8 df2, float8 ncp)</td></tr>
+<tr class="memdesc:a3d94edcf90fca1fa52671293a9ea9c2f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Noncentral Fisher F probability density function.  <a href="#a3d94edcf90fca1fa52671293a9ea9c2f">More...</a><br /></td></tr>
+<tr class="separator:a3d94edcf90fca1fa52671293a9ea9c2f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a92b2a978db480a6c78cfb708107ecb92"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a92b2a978db480a6c78cfb708107ecb92">non_central_f_quantile</a> (float8 p, float8 df1, float8 df2, float8 ncp)</td></tr>
+<tr class="memdesc:a92b2a978db480a6c78cfb708107ecb92"><td class="mdescLeft">&#160;</td><td class="mdescRight">Noncentral Fisher F quantile function.  <a href="#a92b2a978db480a6c78cfb708107ecb92">More...</a><br /></td></tr>
+<tr class="separator:a92b2a978db480a6c78cfb708107ecb92"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afaf4374d2720b230a54713e21ecb1955"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#afaf4374d2720b230a54713e21ecb1955">non_central_t_cdf</a> (float8 x, float8 df, float8 ncp)</td></tr>
+<tr class="memdesc:afaf4374d2720b230a54713e21ecb1955"><td class="mdescLeft">&#160;</td><td class="mdescRight">Noncentral Student-t cumulative distribution function.  <a href="#afaf4374d2720b230a54713e21ecb1955">More...</a><br /></td></tr>
+<tr class="separator:afaf4374d2720b230a54713e21ecb1955"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4799e3bb68a496d9bc1ef1ea85265409"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a4799e3bb68a496d9bc1ef1ea85265409">non_central_t_pdf</a> (float8 x, float8 df, float8 ncp)</td></tr>
+<tr class="memdesc:a4799e3bb68a496d9bc1ef1ea85265409"><td class="mdescLeft">&#160;</td><td class="mdescRight">Noncentral Student-t probability density function.  <a href="#a4799e3bb68a496d9bc1ef1ea85265409">More...</a><br /></td></tr>
+<tr class="separator:a4799e3bb68a496d9bc1ef1ea85265409"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af50865aba2ece2e23b2af461a02f7d12"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#af50865aba2ece2e23b2af461a02f7d12">non_central_t_quantile</a> (float8 p, float8 df, float8 ncp)</td></tr>
+<tr class="memdesc:af50865aba2ece2e23b2af461a02f7d12"><td class="mdescLeft">&#160;</td><td class="mdescRight">Noncentral Student-t quantile function.  <a href="#af50865aba2ece2e23b2af461a02f7d12">More...</a><br /></td></tr>
+<tr class="separator:af50865aba2ece2e23b2af461a02f7d12"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aebcd34ad7b1ca4b31d9699112c9a3b90"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#aebcd34ad7b1ca4b31d9699112c9a3b90">normal_cdf</a> (float8 x, float8 <a class="el" href="svec__util_8sql__in.html#a546b947319c9f48237120a31929bdfd9">mean</a>=0, float8 sd=1)</td></tr>
+<tr class="memdesc:aebcd34ad7b1ca4b31d9699112c9a3b90"><td class="mdescLeft">&#160;</td><td class="mdescRight">Normal cumulative distribution function.  <a href="#aebcd34ad7b1ca4b31d9699112c9a3b90">More...</a><br /></td></tr>
+<tr class="separator:aebcd34ad7b1ca4b31d9699112c9a3b90"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a370e31a46781ed8832b31625a683d053"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a370e31a46781ed8832b31625a683d053">normal_cdf</a> (float8 x, float8 <a class="el" href="svec__util_8sql__in.html#a546b947319c9f48237120a31929bdfd9">mean</a>)</td></tr>
+<tr class="separator:a370e31a46781ed8832b31625a683d053"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6c0a499faa80db26c0178f1e69cf7a50"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a6c0a499faa80db26c0178f1e69cf7a50">normal_cdf</a> (float8 x)</td></tr>
+<tr class="separator:a6c0a499faa80db26c0178f1e69cf7a50"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a63f555f36385d86e229cdca223e39567"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a63f555f36385d86e229cdca223e39567">normal_pdf</a> (float8 x, float8 <a class="el" href="svec__util_8sql__in.html#a546b947319c9f48237120a31929bdfd9">mean</a>=0, float8 sd=1)</td></tr>
+<tr class="memdesc:a63f555f36385d86e229cdca223e39567"><td class="mdescLeft">&#160;</td><td class="mdescRight">Normal probability density function.  <a href="#a63f555f36385d86e229cdca223e39567">More...</a><br /></td></tr>
+<tr class="separator:a63f555f36385d86e229cdca223e39567"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4ee303e56677465989c30230c7f55004"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a4ee303e56677465989c30230c7f55004">normal_pdf</a> (float8 x, float8 <a class="el" href="svec__util_8sql__in.html#a546b947319c9f48237120a31929bdfd9">mean</a>)</td></tr>
+<tr class="separator:a4ee303e56677465989c30230c7f55004"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2836483a456c4bf2c9886763b270317e"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a2836483a456c4bf2c9886763b270317e">normal_pdf</a> (float8 x)</td></tr>
+<tr class="separator:a2836483a456c4bf2c9886763b270317e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a53d56b672fe4cd1277cb5eac5de5118f"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a53d56b672fe4cd1277cb5eac5de5118f">normal_quantile</a> (float8 p, float8 <a class="el" href="svec__util_8sql__in.html#a546b947319c9f48237120a31929bdfd9">mean</a>=0, float8 sd=1)</td></tr>
+<tr class="memdesc:a53d56b672fe4cd1277cb5eac5de5118f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Normal quantile function.  <a href="#a53d56b672fe4cd1277cb5eac5de5118f">More...</a><br /></td></tr>
+<tr class="separator:a53d56b672fe4cd1277cb5eac5de5118f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1b1f9d685f262ade8863ab3a1632b8d6"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a1b1f9d685f262ade8863ab3a1632b8d6">normal_quantile</a> (float8 p, float8 <a class="el" href="svec__util_8sql__in.html#a546b947319c9f48237120a31929bdfd9">mean</a>)</td></tr>
+<tr class="separator:a1b1f9d685f262ade8863ab3a1632b8d6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a643bb4b6b880b96cf924c16e08b015d3"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a643bb4b6b880b96cf924c16e08b015d3">normal_quantile</a> (float8 p)</td></tr>
+<tr class="separator:a643bb4b6b880b96cf924c16e08b015d3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa1a42ebd68f20f65bc1784b427721b5d"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#aa1a42ebd68f20f65bc1784b427721b5d">pareto_cdf</a> (float8 x, float8 scale, float8 shape)</td></tr>
+<tr class="memdesc:aa1a42ebd68f20f65bc1784b427721b5d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pareto cumulative distribution function.  <a href="#aa1a42ebd68f20f65bc1784b427721b5d">More...</a><br /></td></tr>
+<tr class="separator:aa1a42ebd68f20f65bc1784b427721b5d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a22c56a6e48bc442435b13afac2a1eb37"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a22c56a6e48bc442435b13afac2a1eb37">pareto_pdf</a> (float8 x, float8 scale, float8 shape)</td></tr>
+<tr class="memdesc:a22c56a6e48bc442435b13afac2a1eb37"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pareto probability density function.  <a href="#a22c56a6e48bc442435b13afac2a1eb37">More...</a><br /></td></tr>
+<tr class="separator:a22c56a6e48bc442435b13afac2a1eb37"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a77779e2b5fa951189ccba6806c503c4d"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a77779e2b5fa951189ccba6806c503c4d">pareto_quantile</a> (float8 p, float8 scale, float8 shape)</td></tr>
+<tr class="memdesc:a77779e2b5fa951189ccba6806c503c4d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pareto quantile function.  <a href="#a77779e2b5fa951189ccba6806c503c4d">More...</a><br /></td></tr>
+<tr class="separator:a77779e2b5fa951189ccba6806c503c4d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae0b4313d9fe730d6efb3f7c44206f345"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#ae0b4313d9fe730d6efb3f7c44206f345">poisson_cdf</a> (float8 x, float8 <a class="el" href="svec__util_8sql__in.html#a546b947319c9f48237120a31929bdfd9">mean</a>)</td></tr>
+<tr class="memdesc:ae0b4313d9fe730d6efb3f7c44206f345"><td class="mdescLeft">&#160;</td><td class="mdescRight">Poisson cumulative distribution function.  <a href="#ae0b4313d9fe730d6efb3f7c44206f345">More...</a><br /></td></tr>
+<tr class="separator:ae0b4313d9fe730d6efb3f7c44206f345"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a82f1edc27261021c73cd080ff2677a9f"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a82f1edc27261021c73cd080ff2677a9f">poisson_pmf</a> (int4 x, float8 <a class="el" href="svec__util_8sql__in.html#a546b947319c9f48237120a31929bdfd9">mean</a>)</td></tr>
+<tr class="memdesc:a82f1edc27261021c73cd080ff2677a9f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Poisson probability mass function.  <a href="#a82f1edc27261021c73cd080ff2677a9f">More...</a><br /></td></tr>
+<tr class="separator:a82f1edc27261021c73cd080ff2677a9f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a032d26db18b2ee1034085f5521939c61"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a032d26db18b2ee1034085f5521939c61">poisson_quantile</a> (float8 p, float8 <a class="el" href="svec__util_8sql__in.html#a546b947319c9f48237120a31929bdfd9">mean</a>)</td></tr>
+<tr class="memdesc:a032d26db18b2ee1034085f5521939c61"><td class="mdescLeft">&#160;</td><td class="mdescRight">Poisson quantile function.  <a href="#a032d26db18b2ee1034085f5521939c61">More...</a><br /></td></tr>
+<tr class="separator:a032d26db18b2ee1034085f5521939c61"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aab0ddb8a5348cfa387d777043a3cb6d0"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#aab0ddb8a5348cfa387d777043a3cb6d0">rayleigh_cdf</a> (float8 x, float8 scale)</td></tr>
+<tr class="memdesc:aab0ddb8a5348cfa387d777043a3cb6d0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Rayleigh cumulative distribution function.  <a href="#aab0ddb8a5348cfa387d777043a3cb6d0">More...</a><br /></td></tr>
+<tr class="separator:aab0ddb8a5348cfa387d777043a3cb6d0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a798541736d9255bdd5c0bd94924d47bc"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a798541736d9255bdd5c0bd94924d47bc">rayleigh_pdf</a> (float8 x, float8 scale)</td></tr>
+<tr class="memdesc:a798541736d9255bdd5c0bd94924d47bc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Rayleigh probability density function.  <a href="#a798541736d9255bdd5c0bd94924d47bc">More...</a><br /></td></tr>
+<tr class="separator:a798541736d9255bdd5c0bd94924d47bc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acd6757acab1683c735e2b57901494336"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#acd6757acab1683c735e2b57901494336">rayleigh_quantile</a> (float8 p, float8 scale)</td></tr>
+<tr class="memdesc:acd6757acab1683c735e2b57901494336"><td class="mdescLeft">&#160;</td><td class="mdescRight">Rayleigh quantile function.  <a href="#acd6757acab1683c735e2b57901494336">More...</a><br /></td></tr>
+<tr class="separator:acd6757acab1683c735e2b57901494336"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5322531131074c23a2dbf067ee504ef7"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a5322531131074c23a2dbf067ee504ef7">students_t_cdf</a> (float8 x, float8 df)</td></tr>
+<tr class="memdesc:a5322531131074c23a2dbf067ee504ef7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Student's t cumulative distribution function.  <a href="#a5322531131074c23a2dbf067ee504ef7">More...</a><br /></td></tr>
+<tr class="separator:a5322531131074c23a2dbf067ee504ef7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8815c21670fff9d31946553a84b845b1"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a8815c21670fff9d31946553a84b845b1">students_t_pdf</a> (float8 x, float8 df)</td></tr>
+<tr class="memdesc:a8815c21670fff9d31946553a84b845b1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Student's t probability density function.  <a href="#a8815c21670fff9d31946553a84b845b1">More...</a><br /></td></tr>
+<tr class="separator:a8815c21670fff9d31946553a84b845b1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7d64add02af21a95d73502b2dd466a75"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a7d64add02af21a95d73502b2dd466a75">students_t_quantile</a> (float8 p, float8 df)</td></tr>
+<tr class="memdesc:a7d64add02af21a95d73502b2dd466a75"><td class="mdescLeft">&#160;</td><td class="mdescRight">Student's t quantile function.  <a href="#a7d64add02af21a95d73502b2dd466a75">More...</a><br /></td></tr>
+<tr class="separator:a7d64add02af21a95d73502b2dd466a75"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abf9c7d870bcfe68cacaa421749bbdf35"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#abf9c7d870bcfe68cacaa421749bbdf35">triangular_cdf</a> (float8 x, float8 lower, float8 <a class="el" href="utilities_8sql__in.html#ac25ef90f8a8e2f9b2244a57d92086c91">mode</a>, float8 upper)</td></tr>
+<tr class="memdesc:abf9c7d870bcfe68cacaa421749bbdf35"><td class="mdescLeft">&#160;</td><td class="mdescRight">Triangular cumulative distribution function.  <a href="#abf9c7d870bcfe68cacaa421749bbdf35">More...</a><br /></td></tr>
+<tr class="separator:abf9c7d870bcfe68cacaa421749bbdf35"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0c511b9748b2f7a21fe56aaf5f66d188"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a0c511b9748b2f7a21fe56aaf5f66d188">triangular_pdf</a> (float8 x, float8 lower, float8 <a class="el" href="utilities_8sql__in.html#ac25ef90f8a8e2f9b2244a57d92086c91">mode</a>, float8 upper)</td></tr>
+<tr class="memdesc:a0c511b9748b2f7a21fe56aaf5f66d188"><td class="mdescLeft">&#160;</td><td class="mdescRight">Triangular probability density function.  <a href="#a0c511b9748b2f7a21fe56aaf5f66d188">More...</a><br /></td></tr>
+<tr class="separator:a0c511b9748b2f7a21fe56aaf5f66d188"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4777540ab1b003ff92d484c4bc26af27"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a4777540ab1b003ff92d484c4bc26af27">triangular_quantile</a> (float8 p, float8 lower, float8 <a class="el" href="utilities_8sql__in.html#ac25ef90f8a8e2f9b2244a57d92086c91">mode</a>, float8 upper)</td></tr>
+<tr class="memdesc:a4777540ab1b003ff92d484c4bc26af27"><td class="mdescLeft">&#160;</td><td class="mdescRight">Triangular quantile function.  <a href="#a4777540ab1b003ff92d484c4bc26af27">More...</a><br /></td></tr>
+<tr class="separator:a4777540ab1b003ff92d484c4bc26af27"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa3a05f4f2e0ef9eb65e828261ecfbed9"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#aa3a05f4f2e0ef9eb65e828261ecfbed9">uniform_cdf</a> (float8 x, float8 lower, float8 upper)</td></tr>
+<tr class="memdesc:aa3a05f4f2e0ef9eb65e828261ecfbed9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Uniform cumulative distribution function.  <a href="#aa3a05f4f2e0ef9eb65e828261ecfbed9">More...</a><br /></td></tr>
+<tr class="separator:aa3a05f4f2e0ef9eb65e828261ecfbed9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab90fa34d90a9c75747a34c3f210df239"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#ab90fa34d90a9c75747a34c3f210df239">uniform_pdf</a> (float8 x, float8 lower, float8 upper)</td></tr>
+<tr class="memdesc:ab90fa34d90a9c75747a34c3f210df239"><td class="mdescLeft">&#160;</td><td class="mdescRight">Uniform probability density function.  <a href="#ab90fa34d90a9c75747a34c3f210df239">More...</a><br /></td></tr>
+<tr class="separator:ab90fa34d90a9c75747a34c3f210df239"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a629587a0fdefb588d28b15517ae5cc04"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a629587a0fdefb588d28b15517ae5cc04">uniform_quantile</a> (float8 p, float8 lower, float8 upper)</td></tr>
+<tr class="memdesc:a629587a0fdefb588d28b15517ae5cc04"><td class="mdescLeft">&#160;</td><td class="mdescRight">Uniform quantile function.  <a href="#a629587a0fdefb588d28b15517ae5cc04">More...</a><br /></td></tr>
+<tr class="separator:a629587a0fdefb588d28b15517ae5cc04"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a50e4a1883588cd7a4c1ff1017399e4af"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a50e4a1883588cd7a4c1ff1017399e4af">weibull_cdf</a> (float8 x, float8 shape, float8 scale)</td></tr>
+<tr class="memdesc:a50e4a1883588cd7a4c1ff1017399e4af"><td class="mdescLeft">&#160;</td><td class="mdescRight">Weibull cumulative distribution function.  <a href="#a50e4a1883588cd7a4c1ff1017399e4af">More...</a><br /></td></tr>
+<tr class="separator:a50e4a1883588cd7a4c1ff1017399e4af"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a81a876ae2b8598f060dadb179b9324d2"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#a81a876ae2b8598f060dadb179b9324d2">weibull_pdf</a> (float8 x, float8 shape, float8 scale)</td></tr>
+<tr class="memdesc:a81a876ae2b8598f060dadb179b9324d2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Weibull probability density function.  <a href="#a81a876ae2b8598f060dadb179b9324d2">More...</a><br /></td></tr>
+<tr class="separator:a81a876ae2b8598f060dadb179b9324d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa544631ddeb7a5c06b995b4383c3b612"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="prob_8sql__in.html#aa544631ddeb7a5c06b995b4383c3b612">weibull_quantile</a> (float8 p, float8 shape, float8 scale)</td></tr>
+<tr class="memdesc:aa544631ddeb7a5c06b995b4383c3b612"><td class="mdescLeft">&#160;</td><td class="mdescRight">Weibull quantile function.  <a href="#aa544631ddeb7a5c06b995b4383c3b612">More...</a><br /></td></tr>
+<tr class="separator:aa544631ddeb7a5c06b995b4383c3b612"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><dl class="section see"><dt>See also</dt><dd>For an overview of probability functions, see the module description <a class="el" href="group__grp__prob.html">Probability Functions</a>. </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="aea21a931dc5578a570e3370af3d8d43a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aea21a931dc5578a570e3370af3d8d43a">&#9670;&nbsp;</a></span>bernoulli_cdf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 bernoulli_cdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>sp</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">sp</td><td>Success probability \( p \in [0,1] \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( \Pr[X \leq x] \) where \( X \) is a Bernoulli-distributed random variable with success probability \( \mathit{sp} \) </dd></dl>
+
+</div>
+</div>
+<a id="a434b3ad1f3964835834dc2a942b820ef"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a434b3ad1f3964835834dc2a942b820ef">&#9670;&nbsp;</a></span>bernoulli_pmf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 bernoulli_pmf </td>
+          <td>(</td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>sp</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">sp</td><td>Success probability \( \mathit{sp} \in [0,1] \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( f(x) \) where \( f \) is the probability mass function of a Bernoulli-distributed random variable with success probability \( \mathit{sp} \) </dd></dl>
+
+</div>
+</div>
+<a id="a7133c2e86fd2f6384416ee0e4fd3a60b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7133c2e86fd2f6384416ee0e4fd3a60b">&#9670;&nbsp;</a></span>bernoulli_quantile()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 bernoulli_quantile </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>p</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>sp</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">p</td><td>Probability \( p \in [0,1] \) </td></tr>
+    <tr><td class="paramname">sp</td><td>Success probability \( \mathit{sp} \in [0,1] \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>0 if \( p \leq 1 - \mathit{sp} \) and 1 otherwise </dd></dl>
+
+</div>
+</div>
+<a id="a72e1cca872da35592075dbcfb18aed3f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a72e1cca872da35592075dbcfb18aed3f">&#9670;&nbsp;</a></span>beta_cdf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 beta_cdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>beta</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">alpha</td><td>Shape \( \alpha &gt; 0 \) </td></tr>
+    <tr><td class="paramname">beta</td><td>Shape \( \beta &gt; 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( \Pr[X \leq x] \) where \( X \) is a beta distributed random variable with shape parameters \( \alpha \) and \( \beta \) </dd></dl>
+
+</div>
+</div>
+<a id="aa105049e6e3bb9b3891b0ed1b343e28e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa105049e6e3bb9b3891b0ed1b343e28e">&#9670;&nbsp;</a></span>beta_pdf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 beta_pdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>beta</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">alpha</td><td>Shape \( \alpha &gt; 0 \) </td></tr>
+    <tr><td class="paramname">beta</td><td>Shape \( \beta &gt; 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( f(x) \) where \( f \) is the probability density function of a beta random variable with shape parameters \( \alpha \) and \( \beta \) </dd></dl>
+
+</div>
+</div>
+<a id="a32433aa742c0504d33e98e28a3e2f190"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a32433aa742c0504d33e98e28a3e2f190">&#9670;&nbsp;</a></span>beta_quantile()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 beta_quantile </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>p</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>beta</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">p</td><td>Probability \( p \in [0,1] \) </td></tr>
+    <tr><td class="paramname">alpha</td><td>Shape \( \alpha &gt; 0 \) </td></tr>
+    <tr><td class="paramname">beta</td><td>Shape \( \beta &gt; 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( x \) such that \( p = \Pr[X \leq x] \) where \( X \) is beta distribution random variable with shape parameters \( \alpha \) and \( \beta \) </dd></dl>
+
+</div>
+</div>
+<a id="aa5000bad6e2e4af1c8cbfec7ea884476"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa5000bad6e2e4af1c8cbfec7ea884476">&#9670;&nbsp;</a></span>binomial_cdf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 binomial_cdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>sp</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">n</td><td>The number of trials \( n \in \mathbb N_0 \) </td></tr>
+    <tr><td class="paramname">sp</td><td>Success probability \( \mathit{sp} \in [0,1] \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( \Pr[X \leq x] \) where \( X \) is a binomially distributed random variable with \( n \) trials and success probability \( \mathit{sp} \) </dd></dl>
+
+</div>
+</div>
+<a id="aa0614475b8685bf8e37533d2ac5bb116"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa0614475b8685bf8e37533d2ac5bb116">&#9670;&nbsp;</a></span>binomial_pmf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 binomial_pmf </td>
+          <td>(</td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>sp</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">n</td><td>The number of trials \( n \in \mathbb N_0 \) </td></tr>
+    <tr><td class="paramname">sp</td><td>Success probability \( \mathit{sp} \in [0,1] \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( f(x) \) where \( f \) is the probability mass function of a binomially distributed random variable with \( n \) trials and success probability \( \mathit{sp} \) </dd></dl>
+
+</div>
+</div>
+<a id="a49f421c58d2e1abd63b83d71af9edf21"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a49f421c58d2e1abd63b83d71af9edf21">&#9670;&nbsp;</a></span>binomial_quantile()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 binomial_quantile </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>p</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>sp</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">p</td><td>Probability \( p \in [0,1] \) </td></tr>
+    <tr><td class="paramname">n</td><td>The number of trials \( n \in \mathbb N_0 \) </td></tr>
+    <tr><td class="paramname">sp</td><td>Success probability \( \mathit{sp} \in [0,1] \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>If \( p &lt; 0.5 \) the maximum \( x \) such that \( p \geq \Pr[X \leq x] \). If \( p \geq 0.5 \) the minimum \( x \) such that \( p \leq \Pr[X \leq x] \). Here, \( X \) is a binomially distributed random variable with \( n \) trials and success probability \( \mathit{sp} \). </dd></dl>
+
+</div>
+</div>
+<a id="a2d8874c2a5679403a473bfedb14467a4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2d8874c2a5679403a473bfedb14467a4">&#9670;&nbsp;</a></span>cauchy_cdf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 cauchy_cdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>location</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>scale</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">location</td><td>Location \( x_0 \) </td></tr>
+    <tr><td class="paramname">scale</td><td>Scale \( \gamma &gt; 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( \Pr[X \leq x] \) where \( X \) is a Cauchy-distributed random variable with location and scale parameters \( x_0 \) and \( \gamma \), respectively </dd></dl>
+
+</div>
+</div>
+<a id="aebfad9365a7fc7a553c3b5c7931f2450"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aebfad9365a7fc7a553c3b5c7931f2450">&#9670;&nbsp;</a></span>cauchy_pdf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 cauchy_pdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>location</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>scale</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">location</td><td>Location \( x_0 \) </td></tr>
+    <tr><td class="paramname">scale</td><td>Scale \( \gamma &gt; 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( f(x) \) where \( f \) is the probability density function of a Cauchy-distributed random variable with location and scale parameters \( x_0 \) and \( \gamma \), respectively </dd></dl>
+
+</div>
+</div>
+<a id="ae8aa9b741e89c8d9236a682d218006e0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae8aa9b741e89c8d9236a682d218006e0">&#9670;&nbsp;</a></span>cauchy_quantile()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 cauchy_quantile </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>p</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>location</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>scale</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">p</td><td>Probability \( p \in [0,1] \) </td></tr>
+    <tr><td class="paramname">location</td><td>Location \( x_0 \) </td></tr>
+    <tr><td class="paramname">scale</td><td>Scale \( \gamma &gt; 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( x \) such that \( p = \Pr[X \leq x] \) where \( X \) is a Cauchy-distributed random variable with location and scale parameters \( x_0 \) and \( \gamma \), respectively </dd></dl>
+
+</div>
+</div>
+<a id="a230513b6b549d5b445cbacbdbab42c15"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a230513b6b549d5b445cbacbdbab42c15">&#9670;&nbsp;</a></span>chi_squared_cdf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 chi_squared_cdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>df</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">df</td><td>Degrees of freedom \( \nu &gt; 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( \Pr[X \leq x] \) where \( X \) is a chi-squared distributed random variable with \( \nu \) degrees of freedom </dd></dl>
+
+</div>
+</div>
+<a id="a90bccc717d7052e83bafd7f160a783b1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a90bccc717d7052e83bafd7f160a783b1">&#9670;&nbsp;</a></span>chi_squared_pdf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 chi_squared_pdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>df</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">df</td><td>Degrees of freedom \( \nu &gt; 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( f(x) \) where \( f \) is the probability density function of a chi-squared distributed random variable with \( \nu \) degrees of freedom </dd></dl>
+
+</div>
+</div>
+<a id="ad125307fe65a33b60f6dd524037d4548"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad125307fe65a33b60f6dd524037d4548">&#9670;&nbsp;</a></span>chi_squared_quantile()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 chi_squared_quantile </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>p</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>df</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">p</td><td>Probability \( p \in [0,1] \) </td></tr>
+    <tr><td class="paramname">df</td><td>Degrees of freedom \( \mu &gt; 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( x \) such that \( p = \Pr[X \leq x] \) where \( X \) is a chi-squared distributed random variable with \( \nu \) degrees of freedom </dd></dl>
+
+</div>
+</div>
+<a id="a6d1bf6816f56b8e5ba6bf6ca94752f46"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6d1bf6816f56b8e5ba6bf6ca94752f46">&#9670;&nbsp;</a></span>exponential_cdf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 exponential_cdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>lambda</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">lambda</td><td>Rate parameter \( \lambda &gt; 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( \Pr[X \leq x] \) where \( X \) is an exponentially distributed random variable with rate parameter \( \lambda \) </dd></dl>
+
+</div>
+</div>
+<a id="a18a5458c4bc85f0c4ea321317f90bdbb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a18a5458c4bc85f0c4ea321317f90bdbb">&#9670;&nbsp;</a></span>exponential_pdf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 exponential_pdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>lambda</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">lambda</td><td>Rate parameter \( \lambda &gt; 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( f(x) \) where \( f \) is the probability density function of exponentially distributed random variable with rate parameter \( \lambda \) </dd></dl>
+
+</div>
+</div>
+<a id="ae3687b8e69a402154b829a6531b1b279"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae3687b8e69a402154b829a6531b1b279">&#9670;&nbsp;</a></span>exponential_quantile()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 exponential_quantile </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>p</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>lambda</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">p</td><td>Probability \( p \in [0,1] \) </td></tr>
+    <tr><td class="paramname">lambda</td><td>Rate parameter \( \lambda &gt; 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( x \) such that \( p = \Pr[X \leq x] \) where \( X \) is a exponentially distributed random variable with rate parameter \( \lambda \) </dd></dl>
+
+</div>
+</div>
+<a id="acffffe04c15eccd2e88cdac250bccc68"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acffffe04c15eccd2e88cdac250bccc68">&#9670;&nbsp;</a></span>extreme_value_cdf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 extreme_value_cdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>location</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>scale</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">location</td><td>Location \( \alpha \) </td></tr>
+    <tr><td class="paramname">scale</td><td>Scale \( \beta &gt; 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( \Pr[X \leq x] \) where \( X \) is an extreme-value distributed random variable with location and scale parameters \( \alpha \) and \( \beta \), respectively </dd></dl>
+
+</div>
+</div>
+<a id="a03a3494462f4cb8c9fb6212e72b0b2e9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a03a3494462f4cb8c9fb6212e72b0b2e9">&#9670;&nbsp;</a></span>extreme_value_pdf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 extreme_value_pdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>location</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>scale</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">location</td><td>Location \( \alpha \) </td></tr>
+    <tr><td class="paramname">scale</td><td>Scale \( \beta &gt; 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( f(x) \) where \( f \) is the probability density function of an extreme-value distributed random variable with location and scale parameters \( \alpha \) and \( \beta \), respectively </dd></dl>
+
+</div>
+</div>
+<a id="aeb5a7d295b83a891774a4fb0ef27c458"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aeb5a7d295b83a891774a4fb0ef27c458">&#9670;&nbsp;</a></span>extreme_value_quantile()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 extreme_value_quantile </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>p</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>location</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>scale</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">p</td><td>Probability \( p \in [0,1] \) </td></tr>
+    <tr><td class="paramname">location</td><td>Location \( \alpha \) </td></tr>
+    <tr><td class="paramname">scale</td><td>Scale \( \beta &gt; 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( x \) such that \( p = \Pr[X \leq x] \) where \( X \) is an extreme-value distributed random variable with location and scale parameters \( \alpha \) and \( \beta \), respectively </dd></dl>
+
+</div>
+</div>
+<a id="a6c5b3e35531e44098f9d0cbef14cb8a6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6c5b3e35531e44098f9d0cbef14cb8a6">&#9670;&nbsp;</a></span>fisher_f_cdf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 fisher_f_cdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>df1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>df2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">df1</td><td>Degrees of freedom in numerator \( \nu_1 &gt; 0 \) </td></tr>
+    <tr><td class="paramname">df2</td><td>Degrees of freedom in denominator \( \nu_1 &gt; 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( \Pr[X \leq x] \) where \( X \) is a Fisher F-distributed random variable with parameters \( \nu_1 \) and \( \nu_2 \) </dd></dl>
+
+</div>
+</div>
+<a id="a1c7937426379a8913519a6abc5a38ac2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1c7937426379a8913519a6abc5a38ac2">&#9670;&nbsp;</a></span>fisher_f_pdf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 fisher_f_pdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>df1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>df2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">df1</td><td>Degrees of freedom in numerator \( \nu_1 &gt; 0 \) </td></tr>
+    <tr><td class="paramname">df2</td><td>Degrees of freedom in denominator \( \nu_1 &gt; 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( f(x) \) where \( f \) is the probability density function of a Fisher F-distributed random variable with parameters \( \nu_1 \) and \( \nu_2 \) </dd></dl>
+
+</div>
+</div>
+<a id="ab6ed888a5338a0bee9c55edf4d33847f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab6ed888a5338a0bee9c55edf4d33847f">&#9670;&nbsp;</a></span>fisher_f_quantile()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 fisher_f_quantile </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>p</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>df1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>df2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">p</td><td>Probability \( p \in [0,1] \) </td></tr>
+    <tr><td class="paramname">df1</td><td>Degrees of freedom in numerator \( \nu_1 &gt; 0 \) </td></tr>
+    <tr><td class="paramname">df2</td><td>Degrees of freedom in denominator \( \nu_1 &gt; 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( x \) such that \( p = \Pr[X \leq x] \) where \( X \) is a Fisher F-distributed random variable with parameters \( \nu_1 \) and \( \nu_2 \) </dd></dl>
+
+</div>
+</div>
+<a id="ab6760b0486bad2f1ab0635eb59404e7c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab6760b0486bad2f1ab0635eb59404e7c">&#9670;&nbsp;</a></span>gamma_cdf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 gamma_cdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>shape</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>scale</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">shape</td><td>Shape \( k &gt; 0 \) </td></tr>
+    <tr><td class="paramname">scale</td><td>Scale \( \theta &gt; 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( \Pr[X \leq x] \) where \( X \) is a gamma distributed random variable with shape and scale parameters \( k \) and \( \theta \), respectively </dd></dl>
+
+</div>
+</div>
+<a id="a6c37e3bda2596accbb46525321a328c4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6c37e3bda2596accbb46525321a328c4">&#9670;&nbsp;</a></span>gamma_pdf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 gamma_pdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>shape</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>scale</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">shape</td><td>Shape \( k &gt; 0 \) </td></tr>
+    <tr><td class="paramname">scale</td><td>Scale \( \theta &gt; 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( f(x) \) where \( f \) is the probability density function of a gamma distributed random variable with shape and scale parameters \( k \) and \( \theta \), respectively </dd></dl>
+
+</div>
+</div>
+<a id="ac48bbd491bd34831415705c3a0b7bf29"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac48bbd491bd34831415705c3a0b7bf29">&#9670;&nbsp;</a></span>gamma_quantile()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 gamma_quantile </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>p</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>shape</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>scale</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">p</td><td>Probability \( p \in [0,1] \) </td></tr>
+    <tr><td class="paramname">shape</td><td>Shape \( k &gt; 0 \) </td></tr>
+    <tr><td class="paramname">scale</td><td>Scale \( \theta &gt; 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( x \) such that \( p = \Pr[X \leq x] \) where \( X \) is a gamma distributed random variable with shape and scale parameters \( k \) and \( \theta \), respectively </dd></dl>
+
+</div>
+</div>
+<a id="a00879bdf7d48ceddedb3b4cc33511497"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a00879bdf7d48ceddedb3b4cc33511497">&#9670;&nbsp;</a></span>geometric_cdf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 geometric_cdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>sp</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">sp</td><td>Success probability \( \mathit{sp} \in [0,1] \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( \Pr[X \leq x] \) where \( X \) is a geometrically distributed random variable with success probability \( \mathit{sp} \). </dd></dl>
+
+</div>
+</div>
+<a id="a5e08db93bd448a1e2164e106ce5781a4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5e08db93bd448a1e2164e106ce5781a4">&#9670;&nbsp;</a></span>geometric_pmf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 geometric_pmf </td>
+          <td>(</td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>sp</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">sp</td><td>Success probability \( \mathit{sp} \in [0,1] \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( f(x) \) where \( f \) is the probability mass function of a geometrically distributed random variable with success probability \( \mathit{sp} \) </dd></dl>
+
+</div>
+</div>
+<a id="a62674ca958aec0533cdf0a74a1dadea9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a62674ca958aec0533cdf0a74a1dadea9">&#9670;&nbsp;</a></span>geometric_quantile()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 geometric_quantile </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>p</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>sp</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">p</td><td>Probability \( p \in [0,1] \) </td></tr>
+    <tr><td class="paramname">sp</td><td>Success probability \( \mathit{sp} \in [0,1] \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>If \( p &lt; 0.5 \) the maximum \( x \) such that \( p \geq \Pr[X \leq x] \). If \( p \geq 0.5 \) the minimum \( x \) such that \( p \leq \Pr[X \leq x] \). Here, \( X \) is a geometrically distributed random variable with success probability \( \mathit{sp} \). </dd></dl>
+
+</div>
+</div>
+<a id="a5c48e7fa2fc7bcbc69c7f4da663d457f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5c48e7fa2fc7bcbc69c7f4da663d457f">&#9670;&nbsp;</a></span>hypergeometric_cdf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 hypergeometric_cdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>N</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">r</td><td>Number \( r \in \{ 0, 1, \dots, N \} \) of items with distinct property (sometimes called the number of <em>success states</em> in population) </td></tr>
+    <tr><td class="paramname">n</td><td>Number \( n \in \{ 0, 1, \dots, N \} \) of draws (without replacement) </td></tr>
+    <tr><td class="paramname">N</td><td>Total number \( N \in \mathbb N \) of items </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( \Pr[X \leq x] \) where \( X \) is a hypergeometrically distributed random variable with parameters \( r, n, N \) </dd></dl>
+
+</div>
+</div>
+<a id="afbd2f8d9fb30fb179f59cc14f1fd8d6d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afbd2f8d9fb30fb179f59cc14f1fd8d6d">&#9670;&nbsp;</a></span>hypergeometric_pmf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 hypergeometric_pmf </td>
+          <td>(</td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>N</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">r</td><td>Number \( r \in \{ 0, 1, \dots, N \} \) of items with distinct property (sometimes called the number of <em>success states</em> in population) </td></tr>
+    <tr><td class="paramname">n</td><td>Number \( n \in \{ 0, 1, \dots, N \} \) of draws (without replacement) </td></tr>
+    <tr><td class="paramname">N</td><td>Total number \( N \in \mathbb N \) of items </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( f(x) \) where \( f \) is the probability mass function of a hypergeometrically distributed random variable with parameters \( r, n, N \) </dd></dl>
+
+</div>
+</div>
+<a id="a813cc27fe097e797ed0fb6022c7bb79a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a813cc27fe097e797ed0fb6022c7bb79a">&#9670;&nbsp;</a></span>hypergeometric_quantile()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 hypergeometric_quantile </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>p</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>N</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">p</td><td>Probability \( p \in [0,1] \) </td></tr>
+    <tr><td class="paramname">r</td><td>Number \( r \in \{ 0, 1, \dots, N \} \) of items with distinct property (sometimes called the number of <em>success states</em> in population) </td></tr>
+    <tr><td class="paramname">n</td><td>Number \( n \in \{ 0, 1, \dots, N \} \) of draws (without replacement) </td></tr>
+    <tr><td class="paramname">N</td><td>Total number \( N \in \mathbb N \) of items </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( x \) such that \( p = \Pr[X \leq x] \) where \( X \) is a hypergeometrically distributed random variable with parameters \( r, n, N \) </dd></dl>
+
+</div>
+</div>
+<a id="a85e9c16aa2c6973ddeb7883a5f153d93"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a85e9c16aa2c6973ddeb7883a5f153d93">&#9670;&nbsp;</a></span>inverse_gamma_cdf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 inverse_gamma_cdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>shape</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>scale</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">shape</td><td>Shape \( \alpha &gt; 0 \) </td></tr>
+    <tr><td class="paramname">scale</td><td>Scale \( \beta &gt; 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( \Pr[X \leq x] \) where \( X \) is an inverse-gamma distributed random variable with shape and scale parameters \( \alpha \) and \( \beta \), respectively </dd></dl>
+
+</div>
+</div>
+<a id="a126211c2172a43a654288fa72a2349f9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a126211c2172a43a654288fa72a2349f9">&#9670;&nbsp;</a></span>inverse_gamma_pdf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 inverse_gamma_pdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>shape</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>scale</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">shape</td><td>Shape \( \alpha &gt; 0 \) </td></tr>
+    <tr><td class="paramname">scale</td><td>Scale \( \beta &gt; 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( f(x) \) where \( f \) is the probability density function of an inverse-gamma distributed random variable with shape and scale parameters \( \alpha \) and \( \beta \), respectively </dd></dl>
+
+</div>
+</div>
+<a id="a5876aae01f14729866d4fd52918a65ba"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5876aae01f14729866d4fd52918a65ba">&#9670;&nbsp;</a></span>inverse_gamma_quantile()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 inverse_gamma_quantile </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>p</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>shape</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>scale</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">p</td><td>Probability \( p \in [0,1] \) </td></tr>
+    <tr><td class="paramname">shape</td><td>Shape \( \alpha &gt; 0 \) </td></tr>
+    <tr><td class="paramname">scale</td><td>Scale \( \beta &gt; 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( x \) such that \( p = \Pr[X \leq x] \) where \( X \) is an inverse-gamma distributed random variable with shape and scale parameters \( \alpha \) and \( \beta \), respectively </dd></dl>
+
+</div>
+</div>
+<a id="aeef43f74f583bdff17bd074d9c0d9607"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aeef43f74f583bdff17bd074d9c0d9607">&#9670;&nbsp;</a></span>kolmogorov_cdf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 kolmogorov_cdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( \Pr[X \leq x] \) where \( X \) is a Kolmogorov distributed random variable</dd></dl>
+<dl class="section see"><dt>See also</dt><dd>Kolmogorov-Smirnov test: ks_test() </dd></dl>
+
+</div>
+</div>
+<a id="a64e197de8da3761acdeec9db7e211703"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a64e197de8da3761acdeec9db7e211703">&#9670;&nbsp;</a></span>laplace_cdf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 laplace_cdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>mean</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>scale</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">mean</td><td>Mean \( \mu \) </td></tr>
+    <tr><td class="paramname">scale</td><td>Scale \( b &gt; 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( \Pr[X \leq x] \) where \( X \) is a Laplace-distributed random variable with mean \( \mu \) and variance \( 2 b^2 \) </dd></dl>
+
+</div>
+</div>
+<a id="a750278ad29d514793f76e159b773f410"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a750278ad29d514793f76e159b773f410">&#9670;&nbsp;</a></span>laplace_pdf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 laplace_pdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>mean</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>scale</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">mean</td><td>Mean \( \mu \) </td></tr>
+    <tr><td class="paramname">scale</td><td>Scale \( b &gt; 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( f(x) \) where \( f \) is the probability density function of a Laplace-distributed random variable with mean \( \mu \) and variance \( 2 b^2 \) </dd></dl>
+
+</div>
+</div>
+<a id="a77f94fc43d4777fc4f68d18e29454a81"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a77f94fc43d4777fc4f68d18e29454a81">&#9670;&nbsp;</a></span>laplace_quantile()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 laplace_quantile </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>p</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>mean</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>scale</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">p</td><td>Probability \( p \in [0,1] \) </td></tr>
+    <tr><td class="paramname">mean</td><td>Mean \( \mu \) </td></tr>
+    <tr><td class="paramname">scale</td><td>Scale \( b &gt; 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( x \) such that \( p = \Pr[X \leq x] \) where \( X \) is a Laplace-distributed random variable with mean \( \mu \) and variance \( 2 b^2 \) </dd></dl>
+
+</div>
+</div>
+<a id="a140f674876813d5e786a4d8ba8d75c87"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a140f674876813d5e786a4d8ba8d75c87">&#9670;&nbsp;</a></span>logistic_cdf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 logistic_cdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>mean</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>scale</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">mean</td><td>Mean \( \mu \) </td></tr>
+    <tr><td class="paramname">scale</td><td>Scale \( s &gt; 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( \Pr[X \leq x] \) where \( X \) is a logistically distributed random variable with mean \( \mu \) and scale parameter \( s \) </dd></dl>
+
+</div>
+</div>
+<a id="afa38eb6c61d3c9825d5c172e6c17dbf7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afa38eb6c61d3c9825d5c172e6c17dbf7">&#9670;&nbsp;</a></span>logistic_pdf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 logistic_pdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>mean</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>scale</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">mean</td><td>Mean \( \mu \) </td></tr>
+    <tr><td class="paramname">scale</td><td>Scale \( s &gt; 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( f(x) \) where \( f \) is the probability density function of a logistically distributed random variable with mean \( \mu \) and scale parameter \( s \) </dd></dl>
+
+</div>
+</div>
+<a id="a5a77a0bc5884af2a914a955174892ae2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5a77a0bc5884af2a914a955174892ae2">&#9670;&nbsp;</a></span>logistic_quantile()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 logistic_quantile </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>p</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>mean</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>scale</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">p</td><td>Probability \( p \in [0,1] \) </td></tr>
+    <tr><td class="paramname">mean</td><td>Mean \( \mu \) </td></tr>
+    <tr><td class="paramname">scale</td><td>Scale \( s &gt; 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( x \) such that \( p = \Pr[X \leq x] \) where \( X \) is a logistically distributed random variable with mean \( \mu \) and scale parameter \( s \) </dd></dl>
+
+</div>
+</div>
+<a id="a4c05b347f8feb64e1236d21b850af61e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4c05b347f8feb64e1236d21b850af61e">&#9670;&nbsp;</a></span>lognormal_cdf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 lognormal_cdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>location</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>scale</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">location</td><td>Location \( m \) </td></tr>
+    <tr><td class="paramname">scale</td><td>Scale \( s &gt; 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( \Pr[X \leq x] \) where \( X \) is a lognormally distributed random variable with location and scale parameters \( m \) and \( s \), respectively </dd></dl>
+
+</div>
+</div>
+<a id="a7370b797bf450f9aa54d4fea4d64d611"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7370b797bf450f9aa54d4fea4d64d611">&#9670;&nbsp;</a></span>lognormal_pdf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 lognormal_pdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>location</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>scale</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">location</td><td>Location \( m \) </td></tr>
+    <tr><td class="paramname">scale</td><td>Scale \( s &gt; 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( f(x) \) where \( f \) is the probability density function of a lognormally distributed random variable with location and scale parameters \( m \) and \( s \), respectively </dd></dl>
+
+</div>
+</div>
+<a id="aab3a6de990ae5a81834274a1cf9cad8f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aab3a6de990ae5a81834274a1cf9cad8f">&#9670;&nbsp;</a></span>lognormal_quantile()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 lognormal_quantile </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>p</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>location</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>scale</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">p</td><td>Probability \( p \in [0,1] \) </td></tr>
+    <tr><td class="paramname">location</td><td>Location \( m \) </td></tr>
+    <tr><td class="paramname">scale</td><td>Scale \( s &gt; 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( x \) such that \( p = \Pr[X \leq x] \) where \( X \) is a lognormally distributed random variable with location and scale parameters \( m \) and \( s \), respectively </dd></dl>
+
+</div>
+</div>
+<a id="ad0a7e4474f828869fb90e62f8e6f04d7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad0a7e4474f828869fb90e62f8e6f04d7">&#9670;&nbsp;</a></span>negative_binomial_cdf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 negative_binomial_cdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>sp</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">r</td><td>Total number \( r &gt; 0 \) of successes in \( x + r \) trials (assuming success in the last trial) </td></tr>
+    <tr><td class="paramname">sp</td><td>Success probability \( \mathit{sp} \in (0,1] \) in each trial </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( \Pr[X \leq x] \) where \( X \) is a negative-binomially distributed random variable with parameters \( r, \mathit{sp} \) </dd></dl>
+
+</div>
+</div>
+<a id="ab9cbc30424eba30f2df2a32a7e45f138"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab9cbc30424eba30f2df2a32a7e45f138">&#9670;&nbsp;</a></span>negative_binomial_pmf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 negative_binomial_pmf </td>
+          <td>(</td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>sp</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">r</td><td>Total number \( r &gt; 0 \) of successes in \( x + r \) trials (assuming success in the last trial) </td></tr>
+    <tr><td class="paramname">sp</td><td>Success probability \( \mathit{sp} \in (0,1] \) in each trial </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( f(x) \) where \( f \) is the probability mass function of a negative-binomially distributed random variable with parameters \( r, \mathit{sp} \) </dd></dl>
+
+</div>
+</div>
+<a id="ad9e541de8b41da2e7b7434f862db4845"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad9e541de8b41da2e7b7434f862db4845">&#9670;&nbsp;</a></span>negative_binomial_quantile()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 negative_binomial_quantile </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>p</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>sp</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">p</td><td>Probability \( p \in [0,1] \) </td></tr>
+    <tr><td class="paramname">r</td><td>Total number \( r &gt; 0 \) of successes in \( x + r \) trials (assuming success in the last trial) </td></tr>
+    <tr><td class="paramname">sp</td><td>Success probability \( \mathit{sp} \in (0,1] \) in each trial </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>If \( p &lt; 0.5 \) the maximum \( x \) such that \( p \geq \Pr[X \leq x] \). If \( p \geq 0.5 \) the minimum \( x \) such that \( p \leq \Pr[X \leq x] \). Here, \( X \) is a negative-binomially distributed random variable with parameters \( r, \mathit{sp} \) </dd></dl>
+
+</div>
+</div>
+<a id="a1361569bd86e41f796c70f8cb277010e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1361569bd86e41f796c70f8cb277010e">&#9670;&nbsp;</a></span>non_central_beta_cdf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 non_central_beta_cdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>beta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>ncp</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">alpha</td><td>Shape \( \alpha &gt; 0 \) </td></tr>
+    <tr><td class="paramname">beta</td><td>Shape \( \beta &gt; 0 \) </td></tr>
+    <tr><td class="paramname">ncp</td><td>Noncentrality parameter \( \delta \geq 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( \Pr[X \leq x] \) where \( X \) is a noncentral-beta distributed random variable with shape parameters \( shape_1 \) and \( shape_2 \) and noncentrality parameter \( \delta \) </dd></dl>
+
+</div>
+</div>
+<a id="ad4a12c083054f0e2d316ae76c9aaeef7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad4a12c083054f0e2d316ae76c9aaeef7">&#9670;&nbsp;</a></span>non_central_beta_pdf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 non_central_beta_pdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>beta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>ncp</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">alpha</td><td>Shape \( \alpha &gt; 0 \) </td></tr>
+    <tr><td class="paramname">beta</td><td>Shape \( \beta &gt; 0 \) </td></tr>
+    <tr><td class="paramname">ncp</td><td>Noncentrality parameter \( \delta \geq 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( f(x) \) where \( f \) is the probability density function of a noncentral-beta distributed random variable with shape parameters \( shape_1 \) and \( shape_2 \) and noncentrality parameter \( \delta \) </dd></dl>
+
+</div>
+</div>
+<a id="a3073b409eaee3faa6d43df014662c279"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3073b409eaee3faa6d43df014662c279">&#9670;&nbsp;</a></span>non_central_beta_quantile()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 non_central_beta_quantile </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>p</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>beta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>ncp</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">p</td><td>Probability \( p \in [0,1] \) </td></tr>
+    <tr><td class="paramname">alpha</td><td>Shape \( \alpha &gt; 0 \) </td></tr>
+    <tr><td class="paramname">beta</td><td>Shape \( \beta &gt; 0 \) </td></tr>
+    <tr><td class="paramname">ncp</td><td>Noncentrality parameter \( \delta \geq 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( x \) such that \( p = \Pr[X \leq x] \) where \( X \) is a noncentral-beta distributed random variable with shape parameters \( shape_1 \) and \( shape_2 \) and noncentrality parameter \( \delta \) </dd></dl>
+
+</div>
+</div>
+<a id="ab4b7d2cf10bb031328dcc34c6ff494ad"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab4b7d2cf10bb031328dcc34c6ff494ad">&#9670;&nbsp;</a></span>non_central_chi_squared_cdf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 non_central_chi_squared_cdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>df</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>ncp</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">df</td><td>Degrees of freedom \( \nu &gt; 0 \) </td></tr>
+    <tr><td class="paramname">ncp</td><td>The noncentrality parameter \( \lambda \geq 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( \Pr[X \leq x] \) where \( X \) is a noncentral-chi-squared distributed random variable with \( \nu \) degrees of freedom and noncentrality parameter \( \lambda \) </dd></dl>
+
+</div>
+</div>
+<a id="aa7a563183224593d1e0d623a3c5489d8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa7a563183224593d1e0d623a3c5489d8">&#9670;&nbsp;</a></span>non_central_chi_squared_pdf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 non_central_chi_squared_pdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>df</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>ncp</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">df</td><td>Degrees of freedom \( \nu &gt; 0 \) </td></tr>
+    <tr><td class="paramname">ncp</td><td>The noncentrality parameter \( \lambda \geq 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( f(x) \) where \( f \) is the probability density function of a noncentral-chi-squared distributed random variable with \( \nu \) degrees of freedom and noncentrality parameter \( \lambda \) </dd></dl>
+
+</div>
+</div>
+<a id="ad694e29187b629ae683ef1235d2b9270"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad694e29187b629ae683ef1235d2b9270">&#9670;&nbsp;</a></span>non_central_chi_squared_quantile()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 non_central_chi_squared_quantile </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>p</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>df</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>ncp</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">p</td><td>Probability \( p \in [0,1] \) </td></tr>
+    <tr><td class="paramname">df</td><td>Degrees of freedom \( \nu &gt; 0 \) </td></tr>
+    <tr><td class="paramname">ncp</td><td>The noncentrality parameter \( \lambda \geq 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( x \) such that \( p = \Pr[X \leq x] \) where \( X \) is a noncentral-chi-squared distributed random variable with \( \nu \) degrees of freedom and noncentrality parameter \( \lambda \) </dd></dl>
+
+</div>
+</div>
+<a id="a00051df630007b530ce86b4ab44a0434"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a00051df630007b530ce86b4ab44a0434">&#9670;&nbsp;</a></span>non_central_f_cdf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 non_central_f_cdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>df1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>df2</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>ncp</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">df1</td><td>Degrees of freedom in numerator \( \nu_1 &gt; 0 \) </td></tr>
+    <tr><td class="paramname">df2</td><td>Degrees of freedom in denominator \( \nu_1 &gt; 0 \) </td></tr>
+    <tr><td class="paramname">ncp</td><td>The noncentrality parameter \( \lambda \geq 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( \Pr[X \leq x] \) where \( X \) is a noncentral Fisher F-distributed random variable with parameters \( \nu_1, \nu_2, \lambda \) </dd></dl>
+
+</div>
+</div>
+<a id="a3d94edcf90fca1fa52671293a9ea9c2f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3d94edcf90fca1fa52671293a9ea9c2f">&#9670;&nbsp;</a></span>non_central_f_pdf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 non_central_f_pdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>df1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>df2</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>ncp</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">df1</td><td>Degrees of freedom in numerator \( \nu_1 &gt; 0 \) </td></tr>
+    <tr><td class="paramname">df2</td><td>Degrees of freedom in denominator \( \nu_1 &gt; 0 \) </td></tr>
+    <tr><td class="paramname">ncp</td><td>The noncentrality parameter \( \lambda \geq 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( f(x) \) where \( f \) is the probability density function of a noncentral Fisher F-distributed random variable with parameters \( \nu_1, \nu_2, \lambda \) </dd></dl>
+
+</div>
+</div>
+<a id="a92b2a978db480a6c78cfb708107ecb92"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a92b2a978db480a6c78cfb708107ecb92">&#9670;&nbsp;</a></span>non_central_f_quantile()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 non_central_f_quantile </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>p</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>df1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>df2</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>ncp</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">p</td><td>Probability \( p \in [0,1] \) </td></tr>
+    <tr><td class="paramname">df1</td><td>Degrees of freedom in numerator \( \nu_1 &gt; 0 \) </td></tr>
+    <tr><td class="paramname">df2</td><td>Degrees of freedom in denominator \( \nu_1 &gt; 0 \) </td></tr>
+    <tr><td class="paramname">ncp</td><td>The noncentrality parameter \( \lambda \geq 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( x \) such that \( p = \Pr[X \leq x] \) where \( X \) is a noncentral Fisher F-distributed random variable with parameters \( \nu_1, \nu_2, \lambda \) </dd></dl>
+
+</div>
+</div>
+<a id="afaf4374d2720b230a54713e21ecb1955"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afaf4374d2720b230a54713e21ecb1955">&#9670;&nbsp;</a></span>non_central_t_cdf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 non_central_t_cdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>df</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>ncp</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">df</td><td>Degrees of freedom \( \nu &gt; 0 \) </td></tr>
+    <tr><td class="paramname">ncp</td><td>Noncentrality parameter \( \delta \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( \Pr[X \leq x] \) where \( X \) is a noncentral Student's t-distributed random variable with \( \nu \) degrees of freedom and noncentrality parameter \( \delta \) </dd></dl>
+
+</div>
+</div>
+<a id="a4799e3bb68a496d9bc1ef1ea85265409"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4799e3bb68a496d9bc1ef1ea85265409">&#9670;&nbsp;</a></span>non_central_t_pdf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 non_central_t_pdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>df</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>ncp</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">df</td><td>Degrees of freedom \( \nu &gt; 0 \) </td></tr>
+    <tr><td class="paramname">ncp</td><td>Noncentrality parameter \( \delta \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( x \) such that \( p = \Pr[X \leq x] \) where \( X \) is a noncentral Student's t-distributed random variable with \( \nu \) degrees of freedom and noncentrality parameter \( \delta \) </dd></dl>
+
+</div>
+</div>
+<a id="af50865aba2ece2e23b2af461a02f7d12"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af50865aba2ece2e23b2af461a02f7d12">&#9670;&nbsp;</a></span>non_central_t_quantile()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 non_central_t_quantile </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>p</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>df</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>ncp</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">p</td><td>Probability \( p \in [0,1] \) </td></tr>
+    <tr><td class="paramname">df</td><td>Degrees of freedom \( \nu &gt; 0 \) </td></tr>
+    <tr><td class="paramname">ncp</td><td>Noncentrality parameter \( \delta \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( x \) such that \( p = \Pr[X \leq x] \) where \( X \) is a noncentral Student's t-distributed random variable with \( \nu \) degrees of freedom and noncentrality parameter \( \delta \) </dd></dl>
+
+</div>
+</div>
+<a id="aebcd34ad7b1ca4b31d9699112c9a3b90"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aebcd34ad7b1ca4b31d9699112c9a3b90">&#9670;&nbsp;</a></span>normal_cdf() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 normal_cdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>mean</em> = <code>0</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>sd</em> = <code>1</code>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">mean</td><td>Mean \( \mu \) </td></tr>
+    <tr><td class="paramname">sd</td><td>Standard deviation \( \sigma &gt; 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( \Pr[X \leq x] \) where \( T \) is a normally distributed random variable with mean \( \mu \) and variance \( \sigma^2 \) </dd></dl>
+
+</div>
+</div>
+<a id="a370e31a46781ed8832b31625a683d053"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a370e31a46781ed8832b31625a683d053">&#9670;&nbsp;</a></span>normal_cdf() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 normal_cdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>mean</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a6c0a499faa80db26c0178f1e69cf7a50"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6c0a499faa80db26c0178f1e69cf7a50">&#9670;&nbsp;</a></span>normal_cdf() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 normal_cdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a63f555f36385d86e229cdca223e39567"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a63f555f36385d86e229cdca223e39567">&#9670;&nbsp;</a></span>normal_pdf() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 normal_pdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>mean</em> = <code>0</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>sd</em> = <code>1</code>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">mean</td><td>Mean \( \mu \) </td></tr>
+    <tr><td class="paramname">sd</td><td>Standard deviation \( \sigma &gt; 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( f(x) \) where \( f \) is the probability density function of a normally distributed random variable with mean \( \mu \) and variance \( \sigma^2 \) </dd></dl>
+
+</div>
+</div>
+<a id="a4ee303e56677465989c30230c7f55004"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4ee303e56677465989c30230c7f55004">&#9670;&nbsp;</a></span>normal_pdf() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 normal_pdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>mean</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a2836483a456c4bf2c9886763b270317e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2836483a456c4bf2c9886763b270317e">&#9670;&nbsp;</a></span>normal_pdf() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 normal_pdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a53d56b672fe4cd1277cb5eac5de5118f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a53d56b672fe4cd1277cb5eac5de5118f">&#9670;&nbsp;</a></span>normal_quantile() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 normal_quantile </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>p</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>mean</em> = <code>0</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>sd</em> = <code>1</code>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">p</td><td>Probability \( p \in [0,1] \) </td></tr>
+    <tr><td class="paramname">mean</td><td>Mean \( \mu \) </td></tr>
+    <tr><td class="paramname">sd</td><td>Standard deviation \( \sigma &gt; 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( x \) such that \( p = \Pr[X \leq x] \) where \( X \) is a normally distributed random variable with mean \( \mu \) and variance \( \sigma^2 \) </dd></dl>
+
+</div>
+</div>
+<a id="a1b1f9d685f262ade8863ab3a1632b8d6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1b1f9d685f262ade8863ab3a1632b8d6">&#9670;&nbsp;</a></span>normal_quantile() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 normal_quantile </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>p</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>mean</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a643bb4b6b880b96cf924c16e08b015d3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a643bb4b6b880b96cf924c16e08b015d3">&#9670;&nbsp;</a></span>normal_quantile() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 normal_quantile </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>p</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa1a42ebd68f20f65bc1784b427721b5d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa1a42ebd68f20f65bc1784b427721b5d">&#9670;&nbsp;</a></span>pareto_cdf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 pareto_cdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>scale</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>shape</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">scale</td><td>Scale \( \beta &gt; 0 \) </td></tr>
+    <tr><td class="paramname">shape</td><td>Shape \( \alpha &gt; 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( \Pr[X \leq x] \) where \( X \) is a Pareto-distributed random variable with shape and scale parameters \( \alpha \) and \( \beta \), respectively </dd></dl>
+
+</div>
+</div>
+<a id="a22c56a6e48bc442435b13afac2a1eb37"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a22c56a6e48bc442435b13afac2a1eb37">&#9670;&nbsp;</a></span>pareto_pdf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 pareto_pdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>scale</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>shape</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">scale</td><td>Scale \( \beta &gt; 0 \) </td></tr>
+    <tr><td class="paramname">shape</td><td>Shape \( \alpha &gt; 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( f(x) \) where \( f \) is the probability density function of a Pareto-distributed random variable with shape and scale parameters \( \alpha \) and \( \beta \), respectively </dd></dl>
+
+</div>
+</div>
+<a id="a77779e2b5fa951189ccba6806c503c4d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a77779e2b5fa951189ccba6806c503c4d">&#9670;&nbsp;</a></span>pareto_quantile()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 pareto_quantile </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>p</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>scale</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>shape</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">p</td><td>Probability \( p \in [0,1] \) </td></tr>
+    <tr><td class="paramname">scale</td><td>Scale \( \beta &gt; 0 \) </td></tr>
+    <tr><td class="paramname">shape</td><td>Shape \( \alpha &gt; 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( x \) such that \( p = \Pr[X \leq x] \) where \( X \) is a Pareto-distributed random variable with shape and scale parameters \( \alpha \) and \( \beta \), respectively </dd></dl>
+
+</div>
+</div>
+<a id="ae0b4313d9fe730d6efb3f7c44206f345"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae0b4313d9fe730d6efb3f7c44206f345">&#9670;&nbsp;</a></span>poisson_cdf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 poisson_cdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>mean</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">mean</td><td>Average occurrence rate \( \lambda &gt; 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( \Pr[X \leq x] \) where \( X \) is a Poisson distributed random variable with mean \( \lambda \) </dd></dl>
+
+</div>
+</div>
+<a id="a82f1edc27261021c73cd080ff2677a9f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a82f1edc27261021c73cd080ff2677a9f">&#9670;&nbsp;</a></span>poisson_pmf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 poisson_pmf </td>
+          <td>(</td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>mean</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">mean</td><td>Average occurrence rate \( \lambda &gt; 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( f(x) \) where \( f \) is the probability mass function of a Poisson distributed random variable with mean \( \lambda \) </dd></dl>
+
+</div>
+</div>
+<a id="a032d26db18b2ee1034085f5521939c61"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a032d26db18b2ee1034085f5521939c61">&#9670;&nbsp;</a></span>poisson_quantile()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 poisson_quantile </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>p</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>mean</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">p</td><td>Probability \( p \in [0,1] \) </td></tr>
+    <tr><td class="paramname">mean</td><td>Average occurrence rate \( \lambda &gt; 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>If \( p &lt; 0.5 \) the maximum \( x \) such that \( p \geq \Pr[X \leq x] \). If \( p \geq 0.5 \) the minimum \( x \) such that \( p \leq \Pr[X \leq x] \). Here, \( X \) is a Poisson distributed random variable with mean \( \lambda \) </dd></dl>
+
+</div>
+</div>
+<a id="aab0ddb8a5348cfa387d777043a3cb6d0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aab0ddb8a5348cfa387d777043a3cb6d0">&#9670;&nbsp;</a></span>rayleigh_cdf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 rayleigh_cdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>scale</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">scale</td><td>Scale \( \sigma &gt; 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( \Pr[X \leq x] \) where \( X \) is a Rayleigh-distributed random variable with parameter \( \sigma \) </dd></dl>
+
+</div>
+</div>
+<a id="a798541736d9255bdd5c0bd94924d47bc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a798541736d9255bdd5c0bd94924d47bc">&#9670;&nbsp;</a></span>rayleigh_pdf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 rayleigh_pdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>scale</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">scale</td><td>Scale \( \sigma &gt; 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( f(x) \) where \( f \) is the probability density function of a Rayleigh-distributed random variable with parameter \( \sigma \) </dd></dl>
+
+</div>
+</div>
+<a id="acd6757acab1683c735e2b57901494336"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acd6757acab1683c735e2b57901494336">&#9670;&nbsp;</a></span>rayleigh_quantile()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 rayleigh_quantile </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>p</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>scale</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">p</td><td>Probability \( p \in [0,1] \) </td></tr>
+    <tr><td class="paramname">scale</td><td>Scale \( \sigma &gt; 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( x \) such that \( p = \Pr[X \leq x] \) where \( X \) is a Rayleigh-distributed random variable with parameter \( \sigma \) </dd></dl>
+
+</div>
+</div>
+<a id="a5322531131074c23a2dbf067ee504ef7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5322531131074c23a2dbf067ee504ef7">&#9670;&nbsp;</a></span>students_t_cdf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 students_t_cdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>df</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">df</td><td>Degrees of freedom \( \nu &gt; 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( \Pr[X \leq x] \) where \( X \) is a Student's t-distributed random variable with \( \nu \) degrees of freedom </dd></dl>
+
+</div>
+</div>
+<a id="a8815c21670fff9d31946553a84b845b1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8815c21670fff9d31946553a84b845b1">&#9670;&nbsp;</a></span>students_t_pdf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 students_t_pdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>df</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">df</td><td>Degrees of freedom \( \nu &gt; 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( f(x) \) where \( f \) is the probability density function of a Stundent's t-distributed random variable with \( \nu \) degrees of freedom </dd></dl>
+
+</div>
+</div>
+<a id="a7d64add02af21a95d73502b2dd466a75"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7d64add02af21a95d73502b2dd466a75">&#9670;&nbsp;</a></span>students_t_quantile()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 students_t_quantile </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>p</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>df</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">p</td><td>Probability \( p \in [0,1] \) </td></tr>
+    <tr><td class="paramname">df</td><td>Degrees of freedom \( \nu &gt; 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( x \) such that \( p = \Pr[X \leq x] \) where \( X \) is a Student's t-distributed random variable with \( \nu \) degrees of freedom </dd></dl>
+
+</div>
+</div>
+<a id="abf9c7d870bcfe68cacaa421749bbdf35"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abf9c7d870bcfe68cacaa421749bbdf35">&#9670;&nbsp;</a></span>triangular_cdf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 triangular_cdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>lower</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>mode</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>upper</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">lower</td><td>Lower bound \( a \) </td></tr>
+    <tr><td class="paramname">mode</td><td>Mode \( c \geq a \) </td></tr>
+    <tr><td class="paramname">upper</td><td>Upper bound \( b \geq c \), where \( b &gt; a \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( \Pr[X \leq x] \) where \( X \) is a triangular distributed random variable with parameters \( a, b, c \) </dd></dl>
+
+</div>
+</div>
+<a id="a0c511b9748b2f7a21fe56aaf5f66d188"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0c511b9748b2f7a21fe56aaf5f66d188">&#9670;&nbsp;</a></span>triangular_pdf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 triangular_pdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>lower</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>mode</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>upper</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">lower</td><td>Lower bound \( a \) </td></tr>
+    <tr><td class="paramname">mode</td><td>Mode \( c \geq a \) </td></tr>
+    <tr><td class="paramname">upper</td><td>Upper bound \( b \geq c \), where \( b &gt; a \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( f(x) \) where \( f \) is the probability density function of a triangular distributed random variable with parameters \( a, b, c \) </dd></dl>
+
+</div>
+</div>
+<a id="a4777540ab1b003ff92d484c4bc26af27"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4777540ab1b003ff92d484c4bc26af27">&#9670;&nbsp;</a></span>triangular_quantile()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 triangular_quantile </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>p</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>lower</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>mode</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>upper</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">p</td><td>Probability \( p \in [0,1] \) </td></tr>
+    <tr><td class="paramname">lower</td><td>Lower bound \( a \) </td></tr>
+    <tr><td class="paramname">mode</td><td>Mode \( c \geq a \) </td></tr>
+    <tr><td class="paramname">upper</td><td>Upper bound \( b \geq c \), where \( b &gt; a \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( x \) such that \( p = \Pr[X \leq x] \) where \( X \) is a trianbular distributed random variable with parameters \( a, b, c \) </dd></dl>
+
+</div>
+</div>
+<a id="aa3a05f4f2e0ef9eb65e828261ecfbed9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa3a05f4f2e0ef9eb65e828261ecfbed9">&#9670;&nbsp;</a></span>uniform_cdf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 uniform_cdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>lower</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>upper</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">lower</td><td>Lower bound \( a \) </td></tr>
+    <tr><td class="paramname">upper</td><td>Upper bound \( b \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( \Pr[X \leq x] \) where \( X \) is a uniform distributed random variable with support \( [a, b] \) </dd></dl>
+
+</div>
+</div>
+<a id="ab90fa34d90a9c75747a34c3f210df239"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab90fa34d90a9c75747a34c3f210df239">&#9670;&nbsp;</a></span>uniform_pdf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 uniform_pdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>lower</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>upper</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">lower</td><td>Lower bound \( a \) </td></tr>
+    <tr><td class="paramname">upper</td><td>Upper bound \( b \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( f(x) \) where \( f \) is the probability density function of a uniform distributed random variable with support \( [a, b] \) </dd></dl>
+
+</div>
+</div>
+<a id="a629587a0fdefb588d28b15517ae5cc04"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a629587a0fdefb588d28b15517ae5cc04">&#9670;&nbsp;</a></span>uniform_quantile()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 uniform_quantile </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>p</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>lower</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>upper</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">p</td><td>Probability \( p \in [0,1] \) </td></tr>
+    <tr><td class="paramname">lower</td><td>Lower bound \( a \) </td></tr>
+    <tr><td class="paramname">upper</td><td>Upper bound \( b \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( x \) such that \( p = \Pr[X \leq x] \) where \( X \) is a uniform distributed random variable with support \( [a, b] \) </dd></dl>
+
+</div>
+</div>
+<a id="a50e4a1883588cd7a4c1ff1017399e4af"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a50e4a1883588cd7a4c1ff1017399e4af">&#9670;&nbsp;</a></span>weibull_cdf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 weibull_cdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>shape</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>scale</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">shape</td><td>Shape \( \alpha &gt; 0 \) </td></tr>
+    <tr><td class="paramname">scale</td><td>Scale \( \beta &gt; 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( \Pr[X \leq x] \) where \( X \) is a weibull distributed random variable with shape and scale parameters \( \alpha \) and \( \beta \), respectively </dd></dl>
+
+</div>
+</div>
+<a id="a81a876ae2b8598f060dadb179b9324d2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a81a876ae2b8598f060dadb179b9324d2">&#9670;&nbsp;</a></span>weibull_pdf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 weibull_pdf </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>shape</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>scale</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>Random variate \( x \) </td></tr>
+    <tr><td class="paramname">shape</td><td>Shape \( \alpha &gt; 0 \) </td></tr>
+    <tr><td class="paramname">scale</td><td>Scale \( \beta &gt; 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( f(x) \) where \( f \) is the probability density function of a weibull distributed random variable with shape and scale parameters \( \alpha \) and \( \beta \), respectively </dd></dl>
+
+</div>
+</div>
+<a id="aa544631ddeb7a5c06b995b4383c3b612"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa544631ddeb7a5c06b995b4383c3b612">&#9670;&nbsp;</a></span>weibull_quantile()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 weibull_quantile </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>p</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>shape</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>scale</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">p</td><td>Probability \( p \in [0,1] \) </td></tr>
+    <tr><td class="paramname">shape</td><td>Shape \( \alpha &gt; 0 \) </td></tr>
+    <tr><td class="paramname">scale</td><td>Scale \( \beta &gt; 0 \) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>\( x \) such that \( p = \Pr[X \leq x] \) where \( X \) is a weibull distributed random variable with shape and scale parameters \( \alpha \) and \( \beta \), respectively </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_8b8525adb4e4d2ae68fa3d70bbeff8da.html">prob</a></li><li class="navelem"><a class="el" href="prob_8sql__in.html">prob.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:57 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/random__forest_8sql__in.html b/docs/rc/random__forest_8sql__in.html
new file mode 100644
index 0000000..9fedbe3
--- /dev/null
+++ b/docs/rc/random__forest_8sql__in.html
@@ -0,0 +1,2137 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: random_forest.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('random__forest_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a>  </div>
+  <div class="headertitle">
+<div class="title">random_forest.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a449144c760063041399eaed682d17af4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="random__forest_8sql__in.html#a449144c760063041399eaed682d17af4">forest_train</a> (text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text grouping_cols, integer num_trees, integer num_random_features, boolean importance, integer num_permutations, integer max_tree_depth, integer min_split, integer min_bucket, integer num_splits, text null_handling_params, boolean verbose, float8 sample_ratio)</td></tr>
+<tr class="memdesc:a449144c760063041399eaed682d17af4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Training of Random Forest.  <a href="#a449144c760063041399eaed682d17af4">More...</a><br /></td></tr>
+<tr class="separator:a449144c760063041399eaed682d17af4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a807c2d0ab7a4c3b56d52aad07aedd02a"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="random__forest_8sql__in.html#a807c2d0ab7a4c3b56d52aad07aedd02a">_get_bin_value_by_index</a> (bytea8 con_splits, integer feature_index, integer bin_index)</td></tr>
+<tr class="separator:a807c2d0ab7a4c3b56d52aad07aedd02a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5abaf34ca61c9870463291b0851ef261"><td class="memItemLeft" align="right" valign="top">integer&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="random__forest_8sql__in.html#a5abaf34ca61c9870463291b0851ef261">_get_bin_index_by_value</a> (float8 bin_value, bytea8 con_splits, integer feature_index)</td></tr>
+<tr class="separator:a5abaf34ca61c9870463291b0851ef261"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a022b4a4701e439538bd8aad7891ecee5"><td class="memItemLeft" align="right" valign="top">integer []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="random__forest_8sql__in.html#a022b4a4701e439538bd8aad7891ecee5">_get_bin_indices_by_values</a> (float8[] bin_values, bytea8 con_splits)</td></tr>
+<tr class="separator:a022b4a4701e439538bd8aad7891ecee5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a21d04e51fb54f374bbdc9810f3386b11"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="random__forest_8sql__in.html#a21d04e51fb54f374bbdc9810f3386b11">forest_predict</a> (text model, text source, text output, text pred_type)</td></tr>
+<tr class="memdesc:a21d04e51fb54f374bbdc9810f3386b11"><td class="mdescLeft">&#160;</td><td class="mdescRight">Use random forest model to make predictions.  <a href="#a21d04e51fb54f374bbdc9810f3386b11">More...</a><br /></td></tr>
+<tr class="separator:a21d04e51fb54f374bbdc9810f3386b11"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aef268338ffa67f54ca1371326bb25fa0"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="random__forest_8sql__in.html#aef268338ffa67f54ca1371326bb25fa0">forest_predict</a> (text model, text source, text output)</td></tr>
+<tr class="separator:aef268338ffa67f54ca1371326bb25fa0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a072cf9e76a6c9351a6089a3989f7e859"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="random__forest_8sql__in.html#a072cf9e76a6c9351a6089a3989f7e859">forest_predict</a> (text message)</td></tr>
+<tr class="separator:a072cf9e76a6c9351a6089a3989f7e859"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2f1d729cd2f2f3b8102a97f9063dae40"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="random__forest_8sql__in.html#a2f1d729cd2f2f3b8102a97f9063dae40">forest_predict</a> ()</td></tr>
+<tr class="separator:a2f1d729cd2f2f3b8102a97f9063dae40"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aea5ca2b827a4ee552a8c0f4d4d947725"><td class="memItemLeft" align="right" valign="top">CREATE OR REPLACE FUNCTION madlib&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="random__forest_8sql__in.html#aea5ca2b827a4ee552a8c0f4d4d947725">get_var_importance</a> (model_table TEXT, output_table TEXT) RETURNS VOID AS $$ PythonFunction(recursive_partitioning</td></tr>
+<tr class="separator:aea5ca2b827a4ee552a8c0f4d4d947725"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a02aabd66a900f6cd233274c7d16268ac"><td class="memItemLeft" align="right" valign="top">CREATE OR REPLACE FUNCTION madlib&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="random__forest_8sql__in.html#a02aabd66a900f6cd233274c7d16268ac">get_var_importance</a> (message TEXT) RETURNS TEXT AS $$ PythonFunction(recursive_partitioning</td></tr>
+<tr class="separator:a02aabd66a900f6cd233274c7d16268ac"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8a375b28fa555fb9a24dd8177902a7d5"><td class="memItemLeft" align="right" valign="top">CREATE OR REPLACE FUNCTION madlib&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="random__forest_8sql__in.html#a8a375b28fa555fb9a24dd8177902a7d5">get_var_importance</a> () RETURNS TEXT AS $$ BEGIN RETURN madlib.get_var_importance('')</td></tr>
+<tr class="separator:a8a375b28fa555fb9a24dd8177902a7d5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a513524a87a38b2d6a50ac74c5d073a14"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="random__forest_8sql__in.html#a513524a87a38b2d6a50ac74c5d073a14">get_tree</a> (text model_table, integer gid, integer sample_id, boolean dot_format, boolean verbose)</td></tr>
+<tr class="memdesc:a513524a87a38b2d6a50ac74c5d073a14"><td class="mdescLeft">&#160;</td><td class="mdescRight">Display a single tree from random forest in dot or text format.  <a href="#a513524a87a38b2d6a50ac74c5d073a14">More...</a><br /></td></tr>
+<tr class="separator:a513524a87a38b2d6a50ac74c5d073a14"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af22b14c3da4f64b544b6c333a8e97070"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="random__forest_8sql__in.html#af22b14c3da4f64b544b6c333a8e97070">get_tree</a> (text model_table, integer gid, integer sample_id, boolean dot_format)</td></tr>
+<tr class="separator:af22b14c3da4f64b544b6c333a8e97070"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af2abc993cde32a08278a411c28439bb6"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="random__forest_8sql__in.html#af2abc993cde32a08278a411c28439bb6">get_tree</a> (text model_table, integer gid, integer sample_id)</td></tr>
+<tr class="separator:af2abc993cde32a08278a411c28439bb6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6796f6dc96ce0f8b75c75061c348a6bb"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="random__forest_8sql__in.html#a6796f6dc96ce0f8b75c75061c348a6bb">get_tree</a> ()</td></tr>
+<tr class="separator:a6796f6dc96ce0f8b75c75061c348a6bb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3ba1911b340a431982189e3e1f8c0111"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="random__forest_8sql__in.html#a3ba1911b340a431982189e3e1f8c0111">get_tree_surr</a> (text model_table, integer gid, integer sample_id)</td></tr>
+<tr class="memdesc:a3ba1911b340a431982189e3e1f8c0111"><td class="mdescLeft">&#160;</td><td class="mdescRight">Display the surrogate splits for each internal node in a single tree from random forest.  <a href="#a3ba1911b340a431982189e3e1f8c0111">More...</a><br /></td></tr>
+<tr class="separator:a3ba1911b340a431982189e3e1f8c0111"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab761f190afe9420e791ce6d1a3c3c719"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="random__forest_8sql__in.html#ab761f190afe9420e791ce6d1a3c3c719">get_tree_surr</a> ()</td></tr>
+<tr class="separator:ab761f190afe9420e791ce6d1a3c3c719"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5d5622998b4e3ab4ee0b22de9c436960"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="random__forest_8sql__in.html#a5d5622998b4e3ab4ee0b22de9c436960">forest_train</a> (text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text grouping_cols, integer num_trees, integer num_random_features, boolean importance, integer num_permutations, integer max_tree_depth, integer min_split, integer min_bucket, integer num_splits, text null_handling_params, boolean verbose)</td></tr>
+<tr class="separator:a5d5622998b4e3ab4ee0b22de9c436960"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae0786fea458787a914e9711ee167750d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="random__forest_8sql__in.html#ae0786fea458787a914e9711ee167750d">forest_train</a> (text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text grouping_cols, integer num_trees, integer num_random_features, boolean importance, integer num_permutations, integer max_tree_depth, integer min_split, integer min_bucket, integer num_splits, text null_handling_params)</td></tr>
+<tr class="separator:ae0786fea458787a914e9711ee167750d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af2e84b0cdcd87adbabbc5fa8caba9467"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="random__forest_8sql__in.html#af2e84b0cdcd87adbabbc5fa8caba9467">forest_train</a> (text message)</td></tr>
+<tr class="separator:af2e84b0cdcd87adbabbc5fa8caba9467"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aae56e36fc47ff539b9155180c8c0abb3"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="random__forest_8sql__in.html#aae56e36fc47ff539b9155180c8c0abb3">forest_train</a> ()</td></tr>
+<tr class="separator:aae56e36fc47ff539b9155180c8c0abb3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a77c66aa21874aa49cb6a236b8c91cef4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="random__forest_8sql__in.html#a77c66aa21874aa49cb6a236b8c91cef4">forest_train</a> (text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text grouping_cols, integer num_trees, integer num_random_features, boolean importance, integer num_permutations, integer max_tree_depth, integer min_split, integer min_bucket, integer num_splits)</td></tr>
+<tr class="separator:a77c66aa21874aa49cb6a236b8c91cef4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a58a8ac26acb60396b15dabaaa3c4b742"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="random__forest_8sql__in.html#a58a8ac26acb60396b15dabaaa3c4b742">forest_train</a> (text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text grouping_cols, integer num_trees, integer num_random_features, boolean importance, integer num_permutations, integer max_tree_depth, integer min_split, integer min_bucket)</td></tr>
+<tr class="separator:a58a8ac26acb60396b15dabaaa3c4b742"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af7314fae3406399700ba75a6f385fda7"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="random__forest_8sql__in.html#af7314fae3406399700ba75a6f385fda7">forest_train</a> (text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text grouping_cols, integer num_trees, integer num_random_features, boolean importance, integer num_permutations, integer max_tree_depth, integer min_split)</td></tr>
+<tr class="separator:af7314fae3406399700ba75a6f385fda7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa2b0e1092f8a0e789a1c8c50a88e966b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="random__forest_8sql__in.html#aa2b0e1092f8a0e789a1c8c50a88e966b">forest_train</a> (text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text grouping_cols, integer num_trees, integer num_random_features, boolean importance, integer num_permutations, integer max_tree_depth)</td></tr>
+<tr class="separator:aa2b0e1092f8a0e789a1c8c50a88e966b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abdab5d1051736a984eb483a0a84d10a4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="random__forest_8sql__in.html#abdab5d1051736a984eb483a0a84d10a4">forest_train</a> (text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text grouping_cols, integer num_trees, integer num_random_features, boolean importance, integer num_permutations)</td></tr>
+<tr class="separator:abdab5d1051736a984eb483a0a84d10a4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a741417bcd9541f4d12f45ee70082f4cb"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="random__forest_8sql__in.html#a741417bcd9541f4d12f45ee70082f4cb">forest_train</a> (text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text grouping_cols, integer num_trees, integer num_random_features, boolean importance)</td></tr>
+<tr class="separator:a741417bcd9541f4d12f45ee70082f4cb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae577213f72707260dee6f143c319090b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="random__forest_8sql__in.html#ae577213f72707260dee6f143c319090b">forest_train</a> (text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text grouping_cols, integer num_trees, integer num_random_features)</td></tr>
+<tr class="separator:ae577213f72707260dee6f143c319090b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a926e116171a0f794e1eff344de1f4935"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="random__forest_8sql__in.html#a926e116171a0f794e1eff344de1f4935">forest_train</a> (text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text grouping_cols, integer num_trees)</td></tr>
+<tr class="separator:a926e116171a0f794e1eff344de1f4935"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6f1a5cae6cbb9cbc756e11bf34da5572"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="random__forest_8sql__in.html#a6f1a5cae6cbb9cbc756e11bf34da5572">forest_train</a> (text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text grouping_cols)</td></tr>
+<tr class="separator:a6f1a5cae6cbb9cbc756e11bf34da5572"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a04cbc760f3790bcf69fe48e008cfba3d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="random__forest_8sql__in.html#a04cbc760f3790bcf69fe48e008cfba3d">forest_train</a> (text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude)</td></tr>
+<tr class="separator:a04cbc760f3790bcf69fe48e008cfba3d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5ec3574505880bc3f6e2620b6ab5cd02"><td class="memItemLeft" align="right" valign="top">float8 [][]&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="random__forest_8sql__in.html#a5ec3574505880bc3f6e2620b6ab5cd02">_convert_to_random_forest_format</a> (bytea8 model)</td></tr>
+<tr class="separator:a5ec3574505880bc3f6e2620b6ab5cd02"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9b188037fd90e41b9590d8296351b645"><td class="memItemLeft" align="right" valign="top">float8 [][]&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="random__forest_8sql__in.html#a9b188037fd90e41b9590d8296351b645">_rf_cat_imp_score</a> (bytea8 tree, integer[] cat_features, float8[] con_features, integer[] cat_n_levels, integer num_permutations, float8 y, boolean is_classification, float8[][] cat_feature_distributions)</td></tr>
+<tr class="separator:a9b188037fd90e41b9590d8296351b645"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa237f4a451150d5a44f7e871a62b4621"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="random__forest_8sql__in.html#aa237f4a451150d5a44f7e871a62b4621">_rf_con_imp_score</a> (bytea8 tree, integer[] cat_features, float8[] con_features, bytea8 con_splits, integer num_permutations, float8 y, boolean is_classification, float8[][] con_index_distrbutions)</td></tr>
+<tr class="separator:aa237f4a451150d5a44f7e871a62b4621"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a33a268c5561595aa0efe6508bfaf6d47"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="random__forest_8sql__in.html#a33a268c5561595aa0efe6508bfaf6d47">normalize_sum_array</a> (float8[] input_array, float8 target_sum)</td></tr>
+<tr class="separator:a33a268c5561595aa0efe6508bfaf6d47"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:a7b9a14c36355554372b1163f7b157b88"><td class="memItemLeft" align="right" valign="top">CREATE OR REPLACE FUNCTION madlib&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="random__forest_8sql__in.html#a7b9a14c36355554372b1163f7b157b88">random_forest</a></td></tr>
+<tr class="separator:a7b9a14c36355554372b1163f7b157b88"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9cf684a2e9bdf9ed0906e11f19b80037"><td class="memItemLeft" align="right" valign="top">CREATE OR REPLACE FUNCTION madlib <a class="el" href="random__forest_8sql__in.html#a8a375b28fa555fb9a24dd8177902a7d5">get_var_importance</a> LANGUAGE plpythonu&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="random__forest_8sql__in.html#a9cf684a2e9bdf9ed0906e11f19b80037">VOLATILE</a></td></tr>
+<tr class="separator:a9cf684a2e9bdf9ed0906e11f19b80037"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8ee741e3812ad259d3ca4c9fa489dc7e"><td class="memItemLeft" align="right" valign="top">CREATE OR REPLACE FUNCTION madlib _importance_help_message LANGUAGE plpythonu&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="random__forest_8sql__in.html#a8ee741e3812ad259d3ca4c9fa489dc7e">IMMUTABLE</a></td></tr>
+<tr class="separator:a8ee741e3812ad259d3ca4c9fa489dc7e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1de54bd922161dd5c6a353647f448fd6"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="random__forest_8sql__in.html#a1de54bd922161dd5c6a353647f448fd6">END</a></td></tr>
+<tr class="separator:a1de54bd922161dd5c6a353647f448fd6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a5ec3574505880bc3f6e2620b6ab5cd02"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5ec3574505880bc3f6e2620b6ab5cd02">&#9670;&nbsp;</a></span>_convert_to_random_forest_format()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [][] _convert_to_random_forest_format </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>model</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5abaf34ca61c9870463291b0851ef261"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5abaf34ca61c9870463291b0851ef261">&#9670;&nbsp;</a></span>_get_bin_index_by_value()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">integer _get_bin_index_by_value </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>bin_value</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>con_splits</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>feature_index</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a022b4a4701e439538bd8aad7891ecee5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a022b4a4701e439538bd8aad7891ecee5">&#9670;&nbsp;</a></span>_get_bin_indices_by_values()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">integer [] _get_bin_indices_by_values </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>bin_values</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>con_splits</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a807c2d0ab7a4c3b56d52aad07aedd02a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a807c2d0ab7a4c3b56d52aad07aedd02a">&#9670;&nbsp;</a></span>_get_bin_value_by_index()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 _get_bin_value_by_index </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>con_splits</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>feature_index</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>bin_index</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a9b188037fd90e41b9590d8296351b645"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9b188037fd90e41b9590d8296351b645">&#9670;&nbsp;</a></span>_rf_cat_imp_score()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [][] _rf_cat_imp_score </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>tree</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>cat_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>con_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>cat_n_levels</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_permutations</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>is_classification</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>cat_feature_distributions</em>[][]&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa237f4a451150d5a44f7e871a62b4621"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa237f4a451150d5a44f7e871a62b4621">&#9670;&nbsp;</a></span>_rf_con_imp_score()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] _rf_con_imp_score </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>tree</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>cat_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>con_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>con_splits</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_permutations</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>is_classification</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>con_index_distrbutions</em>[][]&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a21d04e51fb54f374bbdc9810f3386b11"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a21d04e51fb54f374bbdc9810f3386b11">&#9670;&nbsp;</a></span>forest_predict() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void forest_predict </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>model</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pred_type</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">model</td><td>Name of the table containing the random forest model </td></tr>
+    <tr><td class="paramname">source</td><td>Name of table containing prediction data </td></tr>
+    <tr><td class="paramname">output</td><td>Name of table to output prediction results </td></tr>
+    <tr><td class="paramname">pred_type</td><td>OPTIONAL (Default = 'response'). For regression trees, 'response', implies output is the predicted value. For classification models, this can be 'response', giving the classification prediction as output, or ‘prob’, giving the class probabilities as output (for two classes, only a single probability value is output that corresponds to the first class when the two classes are sorted by name; in case of more than two classes, an array of class probabilities (a probability of each class) is output).</td></tr>
+  </table>
+  </dd>
+</dl>
+<p>See <a class="el" href="group__grp__random__forest.html">Random Forest</a> for more details. </p>
+
+</div>
+</div>
+<a id="aef268338ffa67f54ca1371326bb25fa0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aef268338ffa67f54ca1371326bb25fa0">&#9670;&nbsp;</a></span>forest_predict() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void forest_predict </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>model</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a072cf9e76a6c9351a6089a3989f7e859"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a072cf9e76a6c9351a6089a3989f7e859">&#9670;&nbsp;</a></span>forest_predict() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text forest_predict </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a2f1d729cd2f2f3b8102a97f9063dae40"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2f1d729cd2f2f3b8102a97f9063dae40">&#9670;&nbsp;</a></span>forest_predict() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text forest_predict </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a449144c760063041399eaed682d17af4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a449144c760063041399eaed682d17af4">&#9670;&nbsp;</a></span>forest_train() <span class="overload">[1/15]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void forest_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>training_table_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>id_col_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dependent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>list_of_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>list_of_features_to_exclude</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_trees</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_random_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>importance</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_permutations</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_tree_depth</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>min_split</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>min_bucket</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_splits</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>null_handling_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>verbose</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>sample_ratio</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">training_table_name</td><td>Name of the table containing data. </td></tr>
+    <tr><td class="paramname">output_table_name</td><td>Name of the table to output the model. </td></tr>
+    <tr><td class="paramname">id_col_name</td><td>Name of column containing the id information in training data. </td></tr>
+    <tr><td class="paramname">dependent_variable</td><td>Name of the column that contains the output for training. Boolean, integer and text are considered classification outputs, while float values are considered regression outputs. </td></tr>
+    <tr><td class="paramname">list_of_features</td><td>List of column names (comma-separated string) to use as predictors. Can also be a ‘*’ implying all columns are to be used as predictors (except the ones included in the next argument). Boolean, integer, and text columns are considered categorical columns. </td></tr>
+    <tr><td class="paramname">list_of_features_to_exclude</td><td>List of column names (comma-separated string) to exlude from the predictors list. </td></tr>
+    <tr><td class="paramname">grouping_cols</td><td>OPTIONAL. List of column names (comma-separated string) to group the data by. This will lead to creating multiple Random Forests, one for each group. </td></tr>
+    <tr><td class="paramname">num_trees</td><td>OPTIONAL (Default = 100). Maximum number of trees to grow in the Random forest model. </td></tr>
+    <tr><td class="paramname">num_random_features</td><td>OPTIONAL (Default = sqrt(n) for classification, n/3 for regression) Number of features to randomly select at each split. </td></tr>
+    <tr><td class="paramname">max_tree_depth</td><td>OPTIONAL (Default = 7). Set the maximum depth of any node of the final tree, with the root node counted as depth 0. </td></tr>
+    <tr><td class="paramname">min_split</td><td>OPTIONAL (Default = 20). Minimum number of observations that must exist in a node for a split to be attempted. </td></tr>
+    <tr><td class="paramname">min_bucket</td><td>OPTIONAL (Default = minsplit/3). Minimum number of observations in any terminal node. If only one of minbucket or minsplit is specified, minsplit is set to minbucket*3 or minbucket to minsplit/3, as appropriate. </td></tr>
+    <tr><td class="paramname">num_splits</td><td>optional (default = 20) number of bins to use during binning. Continuous-valued features are binned into discrete bins (per the quartile values) to compute split boundaries. This global parameter is used to compute the resolution of the bins. Higher number of bins will lead to higher processing time and more memory usage. </td></tr>
+    <tr><td class="paramname">verbose</td><td>optional (default = false) prints status information on the splits performed and any other information useful for debugging. </td></tr>
+    <tr><td class="paramname">importance</td><td>optional (default = false) calculates variable importance of all features if True </td></tr>
+    <tr><td class="paramname">num_permutations</td><td>optional (default = 1) number of times to permute feature values while calculating variable importance</td></tr>
+  </table>
+  </dd>
+</dl>
+<p>see <a class="el" href="group__grp__random__forest.html">Random Forest</a> for more details. </p>
+
+</div>
+</div>
+<a id="a5d5622998b4e3ab4ee0b22de9c436960"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5d5622998b4e3ab4ee0b22de9c436960">&#9670;&nbsp;</a></span>forest_train() <span class="overload">[2/15]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void forest_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>training_table_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>id_col_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dependent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>list_of_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>list_of_features_to_exclude</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_trees</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_random_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>importance</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_permutations</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_tree_depth</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>min_split</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>min_bucket</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_splits</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>null_handling_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>verbose</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae0786fea458787a914e9711ee167750d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae0786fea458787a914e9711ee167750d">&#9670;&nbsp;</a></span>forest_train() <span class="overload">[3/15]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void forest_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>training_table_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>id_col_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dependent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>list_of_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>list_of_features_to_exclude</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_trees</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_random_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>importance</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_permutations</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_tree_depth</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>min_split</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>min_bucket</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_splits</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>null_handling_params</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="af2e84b0cdcd87adbabbc5fa8caba9467"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af2e84b0cdcd87adbabbc5fa8caba9467">&#9670;&nbsp;</a></span>forest_train() <span class="overload">[4/15]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text forest_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aae56e36fc47ff539b9155180c8c0abb3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aae56e36fc47ff539b9155180c8c0abb3">&#9670;&nbsp;</a></span>forest_train() <span class="overload">[5/15]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text forest_train </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a77c66aa21874aa49cb6a236b8c91cef4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a77c66aa21874aa49cb6a236b8c91cef4">&#9670;&nbsp;</a></span>forest_train() <span class="overload">[6/15]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void forest_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>training_table_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>id_col_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dependent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>list_of_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>list_of_features_to_exclude</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_trees</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_random_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>importance</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_permutations</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_tree_depth</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>min_split</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>min_bucket</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_splits</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a58a8ac26acb60396b15dabaaa3c4b742"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a58a8ac26acb60396b15dabaaa3c4b742">&#9670;&nbsp;</a></span>forest_train() <span class="overload">[7/15]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void forest_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>training_table_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>id_col_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dependent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>list_of_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>list_of_features_to_exclude</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_trees</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_random_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>importance</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_permutations</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_tree_depth</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>min_split</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>min_bucket</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="af7314fae3406399700ba75a6f385fda7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af7314fae3406399700ba75a6f385fda7">&#9670;&nbsp;</a></span>forest_train() <span class="overload">[8/15]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void forest_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>training_table_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>id_col_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dependent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>list_of_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>list_of_features_to_exclude</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_trees</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_random_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>importance</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_permutations</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_tree_depth</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>min_split</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa2b0e1092f8a0e789a1c8c50a88e966b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa2b0e1092f8a0e789a1c8c50a88e966b">&#9670;&nbsp;</a></span>forest_train() <span class="overload">[9/15]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void forest_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>training_table_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>id_col_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dependent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>list_of_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>list_of_features_to_exclude</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_trees</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_random_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>importance</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_permutations</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_tree_depth</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="abdab5d1051736a984eb483a0a84d10a4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abdab5d1051736a984eb483a0a84d10a4">&#9670;&nbsp;</a></span>forest_train() <span class="overload">[10/15]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void forest_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>training_table_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>id_col_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dependent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>list_of_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>list_of_features_to_exclude</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_trees</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_random_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>importance</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_permutations</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a741417bcd9541f4d12f45ee70082f4cb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a741417bcd9541f4d12f45ee70082f4cb">&#9670;&nbsp;</a></span>forest_train() <span class="overload">[11/15]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void forest_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>training_table_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>id_col_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dependent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>list_of_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>list_of_features_to_exclude</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_trees</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_random_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>importance</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae577213f72707260dee6f143c319090b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae577213f72707260dee6f143c319090b">&#9670;&nbsp;</a></span>forest_train() <span class="overload">[12/15]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void forest_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>training_table_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>id_col_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dependent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>list_of_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>list_of_features_to_exclude</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_trees</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_random_features</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a926e116171a0f794e1eff344de1f4935"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a926e116171a0f794e1eff344de1f4935">&#9670;&nbsp;</a></span>forest_train() <span class="overload">[13/15]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void forest_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>training_table_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>id_col_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dependent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>list_of_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>list_of_features_to_exclude</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_trees</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a6f1a5cae6cbb9cbc756e11bf34da5572"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6f1a5cae6cbb9cbc756e11bf34da5572">&#9670;&nbsp;</a></span>forest_train() <span class="overload">[14/15]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void forest_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>training_table_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>id_col_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dependent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>list_of_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>list_of_features_to_exclude</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a04cbc760f3790bcf69fe48e008cfba3d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a04cbc760f3790bcf69fe48e008cfba3d">&#9670;&nbsp;</a></span>forest_train() <span class="overload">[15/15]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void forest_train </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>training_table_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>id_col_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dependent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>list_of_features</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>list_of_features_to_exclude</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a513524a87a38b2d6a50ac74c5d073a14"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a513524a87a38b2d6a50ac74c5d073a14">&#9670;&nbsp;</a></span>get_tree() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar get_tree </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>gid</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>sample_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>dot_format</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>verbose</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">forest_model</td><td>Name of the table containing the random forest model </td></tr>
+    <tr><td class="paramname">gid</td><td>Group id of the tree to display </td></tr>
+    <tr><td class="paramname">sample_id</td><td>Sample id of the tree to display  TRUE if dot format, FALSE for text format  TRUE if the dot format output will contain additional information </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="af22b14c3da4f64b544b6c333a8e97070"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af22b14c3da4f64b544b6c333a8e97070">&#9670;&nbsp;</a></span>get_tree() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar get_tree </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>gid</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>sample_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>dot_format</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="af2abc993cde32a08278a411c28439bb6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af2abc993cde32a08278a411c28439bb6">&#9670;&nbsp;</a></span>get_tree() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar get_tree </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>gid</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>sample_id</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a6796f6dc96ce0f8b75c75061c348a6bb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6796f6dc96ce0f8b75c75061c348a6bb">&#9670;&nbsp;</a></span>get_tree() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar get_tree </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a3ba1911b340a431982189e3e1f8c0111"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3ba1911b340a431982189e3e1f8c0111">&#9670;&nbsp;</a></span>get_tree_surr() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar get_tree_surr </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>gid</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>sample_id</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">forest_model</td><td>Name of the table containing the random forest model </td></tr>
+    <tr><td class="paramname">gid</td><td>Group id of the tree to display </td></tr>
+    <tr><td class="paramname">sample_id</td><td>Sample id of the tree to display </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="ab761f190afe9420e791ce6d1a3c3c719"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab761f190afe9420e791ce6d1a3c3c719">&#9670;&nbsp;</a></span>get_tree_surr() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar get_tree_surr </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aea5ca2b827a4ee552a8c0f4d4d947725"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aea5ca2b827a4ee552a8c0f4d4d947725">&#9670;&nbsp;</a></span>get_var_importance() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">CREATE OR REPLACE FUNCTION madlib get_var_importance </td>
+          <td>(</td>
+          <td class="paramtype">model_table&#160;</td>
+          <td class="paramname"><em>TEXT</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">output_table&#160;</td>
+          <td class="paramname"><em>TEXT</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Helper function to display variable importance scores (both oob and impurity importance scores for variables). </p>
+
+</div>
+</div>
+<a id="a02aabd66a900f6cd233274c7d16268ac"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a02aabd66a900f6cd233274c7d16268ac">&#9670;&nbsp;</a></span>get_var_importance() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">CREATE OR REPLACE FUNCTION madlib get_var_importance </td>
+          <td>(</td>
+          <td class="paramtype">message&#160;</td>
+          <td class="paramname"><em>TEXT</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8a375b28fa555fb9a24dd8177902a7d5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8a375b28fa555fb9a24dd8177902a7d5">&#9670;&nbsp;</a></span>get_var_importance() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">CREATE OR REPLACE FUNCTION madlib get_var_importance </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a33a268c5561595aa0efe6508bfaf6d47"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a33a268c5561595aa0efe6508bfaf6d47">&#9670;&nbsp;</a></span>normalize_sum_array()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] normalize_sum_array </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>input_array</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>target_sum</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Variable Documentation</h2>
+<a id="a1de54bd922161dd5c6a353647f448fd6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1de54bd922161dd5c6a353647f448fd6">&#9670;&nbsp;</a></span>END</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">END</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8ee741e3812ad259d3ca4c9fa489dc7e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8ee741e3812ad259d3ca4c9fa489dc7e">&#9670;&nbsp;</a></span>IMMUTABLE</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">LANGUAGE plpgsql IMMUTABLE</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7b9a14c36355554372b1163f7b157b88"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7b9a14c36355554372b1163f7b157b88">&#9670;&nbsp;</a></span>random_forest</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">CREATE OR REPLACE FUNCTION madlib random_forest</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a9cf684a2e9bdf9ed0906e11f19b80037"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9cf684a2e9bdf9ed0906e11f19b80037">&#9670;&nbsp;</a></span>VOLATILE</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">CREATE OR REPLACE FUNCTION madlib <a class="el" href="random__forest_8sql__in.html#a8a375b28fa555fb9a24dd8177902a7d5">get_var_importance</a> LANGUAGE plpythonu VOLATILE</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_5341dbb6d7f0a427749c6136276fa506.html">recursive_partitioning</a></li><li class="navelem"><a class="el" href="random__forest_8sql__in.html">random_forest.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:57 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/resize.js b/docs/rc/resize.js
new file mode 100644
index 0000000..56e4a02
--- /dev/null
+++ b/docs/rc/resize.js
@@ -0,0 +1,114 @@
+function initResizable()
+{
+  var cookie_namespace = 'doxygen';
+  var sidenav,navtree,content,header,collapsed,collapsedWidth=0,barWidth=6,desktop_vp=768,titleHeight;
+
+  function readCookie(cookie)
+  {
+    var myCookie = cookie_namespace+"_"+cookie+"=";
+    if (document.cookie) {
+      var index = document.cookie.indexOf(myCookie);
+      if (index != -1) {
+        var valStart = index + myCookie.length;
+        var valEnd = document.cookie.indexOf(";", valStart);
+        if (valEnd == -1) {
+          valEnd = document.cookie.length;
+        }
+        var val = document.cookie.substring(valStart, valEnd);
+        return val;
+      }
+    }
+    return 0;
+  }
+
+  function writeCookie(cookie, val, expiration)
+  {
+    if (val==undefined) return;
+    if (expiration == null) {
+      var date = new Date();
+      date.setTime(date.getTime()+(10*365*24*60*60*1000)); // default expiration is one week
+      expiration = date.toGMTString();
+    }
+    document.cookie = cookie_namespace + "_" + cookie + "=" + val + "; expires=" + expiration+"; path=/";
+  }
+
+  function resizeWidth()
+  {
+    var windowWidth = $(window).width() + "px";
+    var sidenavWidth = $(sidenav).outerWidth();
+    content.css({marginLeft:parseInt(sidenavWidth)+"px"});
+    writeCookie('width',sidenavWidth-barWidth, null);
+  }
+
+  function restoreWidth(navWidth)
+  {
+    var windowWidth = $(window).width() + "px";
+    content.css({marginLeft:parseInt(navWidth)+barWidth+"px"});
+    sidenav.css({width:navWidth + "px"});
+  }
+
+  function resizeHeight()
+  {
+    var headerHeight = header.outerHeight();
+    var footerHeight = footer.outerHeight();
+    var windowHeight = $(window).height() - headerHeight - footerHeight;
+    content.css({height:windowHeight + "px"});
+    navtree.css({height:windowHeight + "px"});
+    sidenav.css({height:windowHeight + "px"});
+    var width=$(window).width();
+    if (width!=collapsedWidth) {
+      if (width<desktop_vp && collapsedWidth>=desktop_vp) {
+        if (!collapsed) {
+          collapseExpand();
+        }
+      } else if (width>desktop_vp && collapsedWidth<desktop_vp) {
+        if (collapsed) {
+          collapseExpand();
+        }
+      }
+      collapsedWidth=width;
+    }
+  }
+
+  function collapseExpand()
+  {
+    if (sidenav.width()>0) {
+      restoreWidth(0);
+      collapsed=true;
+    }
+    else {
+      var width = readCookie('width');
+      if (width>200 && width<$(window).width()) { restoreWidth(width); } else { restoreWidth(200); }
+      collapsed=false;
+    }
+  }
+
+  header  = $("#top");
+  sidenav = $("#side-nav");
+  content = $("#doc-content");
+  navtree = $("#nav-tree");
+  footer  = $("#nav-path");
+  $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } });
+  $(sidenav).resizable({ minWidth: 0 });
+  $(window).resize(function() { resizeHeight(); });
+  var device = navigator.userAgent.toLowerCase();
+  var touch_device = device.match(/(iphone|ipod|ipad|android)/);
+  if (touch_device) { /* wider split bar for touch only devices */
+    $(sidenav).css({ paddingRight:'20px' });
+    $('.ui-resizable-e').css({ width:'20px' });
+    $('#nav-sync').css({ right:'34px' });
+    barWidth=20;
+  }
+  var width = readCookie('width');
+  if (width) { restoreWidth(width); } else { resizeWidth(); }
+  resizeHeight();
+  var url = location.href;
+  var i=url.indexOf("#");
+  if (i>=0) window.location.hash=url.substr(i);
+  var _preventDefault = function(evt) { evt.preventDefault(); };
+  $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault);
+  $(".ui-resizable-handle").dblclick(collapseExpand);
+  $(window).load(resizeHeight);
+}
+
+
diff --git a/docs/rc/robust_8sql__in.html b/docs/rc/robust_8sql__in.html
new file mode 100644
index 0000000..41184e0
--- /dev/null
+++ b/docs/rc/robust_8sql__in.html
@@ -0,0 +1,1768 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: robust.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('robust_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">robust.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>SQL functions for robust variance linear and logistic regression.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a3f978229f9a2e229276278985d76c438"><td class="memItemLeft" align="right" valign="top">bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="robust_8sql__in.html#a3f978229f9a2e229276278985d76c438">robust_linregr_transition</a> (bytea8 state, float8 y, float8[] x, float8[] coef)</td></tr>
+<tr class="separator:a3f978229f9a2e229276278985d76c438"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad85d9925cbab4b59acd798a7b32671ff"><td class="memItemLeft" align="right" valign="top">bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="robust_8sql__in.html#ad85d9925cbab4b59acd798a7b32671ff">robust_linregr_merge_states</a> (bytea8 state1, bytea8 state2)</td></tr>
+<tr class="separator:ad85d9925cbab4b59acd798a7b32671ff"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a458741a15dc6c2ca627f0d1c1d19b7f8"><td class="memItemLeft" align="right" valign="top">robust_linregr_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="robust_8sql__in.html#a458741a15dc6c2ca627f0d1c1d19b7f8">robust_linregr_final</a> (bytea8 state)</td></tr>
+<tr class="separator:a458741a15dc6c2ca627f0d1c1d19b7f8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ade1af85b04294ee404a638aa2bfbf051"><td class="memItemLeft" align="right" valign="top">aggregate bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="robust_8sql__in.html#ade1af85b04294ee404a638aa2bfbf051">robust_linregr</a> (float8 dependentVariable, float8[] independentVariables, float8[] coef)</td></tr>
+<tr class="separator:ade1af85b04294ee404a638aa2bfbf051"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a390473d2fd45e268f0fc13ca971b49b4"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="robust_8sql__in.html#a390473d2fd45e268f0fc13ca971b49b4">robust_variance_linregr</a> (varchar message)</td></tr>
+<tr class="separator:a390473d2fd45e268f0fc13ca971b49b4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aec15331f90464a70c222774d78a5caf2"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="robust_8sql__in.html#aec15331f90464a70c222774d78a5caf2">robust_variance_linregr</a> ()</td></tr>
+<tr class="separator:aec15331f90464a70c222774d78a5caf2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3f79ad2b83c9749fa85d4f96a12c5af0"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="robust_8sql__in.html#a3f79ad2b83c9749fa85d4f96a12c5af0">robust_variance_linregr</a> (varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, varchar grouping_cols, boolean verbose_mode)</td></tr>
+<tr class="separator:a3f79ad2b83c9749fa85d4f96a12c5af0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a80b264be3cd0784d49424efee14b78a8"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="robust_8sql__in.html#a80b264be3cd0784d49424efee14b78a8">robust_variance_linregr</a> (varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, varchar grouping_cols)</td></tr>
+<tr class="separator:a80b264be3cd0784d49424efee14b78a8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac513ea8711b165dac3f75e0c5f4a577f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="robust_8sql__in.html#ac513ea8711b165dac3f75e0c5f4a577f">robust_variance_linregr</a> (varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname)</td></tr>
+<tr class="separator:ac513ea8711b165dac3f75e0c5f4a577f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a840ddaa14013c4445b7a0d55e9489d8d"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="robust_8sql__in.html#a840ddaa14013c4445b7a0d55e9489d8d">robust_logregr_step_transition</a> (float8[] state, boolean y, float8[] x, float8[] coef)</td></tr>
+<tr class="separator:a840ddaa14013c4445b7a0d55e9489d8d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa715a6f6885b56d919a243ec4ff07fde"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="robust_8sql__in.html#aa715a6f6885b56d919a243ec4ff07fde">robust_logregr_step_merge_states</a> (float8[] state1, float8[] state2)</td></tr>
+<tr class="separator:aa715a6f6885b56d919a243ec4ff07fde"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af8efdd02ad3155411507bf786095a562"><td class="memItemLeft" align="right" valign="top">robust_logregr_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="robust_8sql__in.html#af8efdd02ad3155411507bf786095a562">robust_logregr_step_final</a> (float8[] state)</td></tr>
+<tr class="separator:af8efdd02ad3155411507bf786095a562"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6a9290aafa048bcb7cdc13410d5814aa"><td class="memItemLeft" align="right" valign="top">aggregate robust_logregr_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="robust_8sql__in.html#a6a9290aafa048bcb7cdc13410d5814aa">robust_logregr</a> (boolean dependentVariable, float8[] independentVariables, float8[] coef)</td></tr>
+<tr class="separator:a6a9290aafa048bcb7cdc13410d5814aa"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abc20ec2c5e74f268e7727c33a4bb9054"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="robust_8sql__in.html#abc20ec2c5e74f268e7727c33a4bb9054">robust_variance_logregr</a> (varchar message)</td></tr>
+<tr class="separator:abc20ec2c5e74f268e7727c33a4bb9054"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0c426835208c1c9b14a9cce168c8bf87"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="robust_8sql__in.html#a0c426835208c1c9b14a9cce168c8bf87">robust_variance_logregr</a> ()</td></tr>
+<tr class="separator:a0c426835208c1c9b14a9cce168c8bf87"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a815cadfeb54447993db9ce2bd2aa709e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="robust_8sql__in.html#a815cadfeb54447993db9ce2bd2aa709e">robust_variance_logregr</a> (varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, varchar grouping_cols, integer max_iter, varchar optimizer, float8 tolerance, boolean verbose_mode)</td></tr>
+<tr class="memdesc:a815cadfeb54447993db9ce2bd2aa709e"><td class="mdescLeft">&#160;</td><td class="mdescRight">The robust logistic regression function.  <a href="#a815cadfeb54447993db9ce2bd2aa709e">More...</a><br /></td></tr>
+<tr class="separator:a815cadfeb54447993db9ce2bd2aa709e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0924470ae6bf5bb3b4b03e41f69d6f7b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="robust_8sql__in.html#a0924470ae6bf5bb3b4b03e41f69d6f7b">robust_variance_logregr</a> (varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable, varchar grouping_cols, integer max_iter, varchar optimizer, float8 tolerance)</td></tr>
+<tr class="separator:a0924470ae6bf5bb3b4b03e41f69d6f7b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9a9a8c67a89f4ecf6e783762536239bc"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="robust_8sql__in.html#a9a9a8c67a89f4ecf6e783762536239bc">robust_variance_logregr</a> (varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable, varchar grouping_cols, integer max_iter, varchar optimizer)</td></tr>
+<tr class="separator:a9a9a8c67a89f4ecf6e783762536239bc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aef8d807073c9e5a8c62b6a318b5048a1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="robust_8sql__in.html#aef8d807073c9e5a8c62b6a318b5048a1">robust_variance_logregr</a> (varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable, varchar grouping_cols, integer max_iter)</td></tr>
+<tr class="separator:aef8d807073c9e5a8c62b6a318b5048a1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a89770eec0b2e47c714a755b5b1697dd9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="robust_8sql__in.html#a89770eec0b2e47c714a755b5b1697dd9">robust_variance_logregr</a> (varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable, varchar grouping_cols)</td></tr>
+<tr class="separator:a89770eec0b2e47c714a755b5b1697dd9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab73b9a117ba6bd637bac5757ed122d59"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="robust_8sql__in.html#ab73b9a117ba6bd637bac5757ed122d59">robust_variance_logregr</a> (varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable)</td></tr>
+<tr class="separator:ab73b9a117ba6bd637bac5757ed122d59"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3928ec1e3935e8dc4dbcb9e705805660"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="robust_8sql__in.html#a3928ec1e3935e8dc4dbcb9e705805660">mlogregr_robust_step_transition</a> (float8[] state, integer y, integer numcategories, integer ref_category, float8[] x, float8[] coef)</td></tr>
+<tr class="separator:a3928ec1e3935e8dc4dbcb9e705805660"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a123149abbf366743e04ecb6fc7f8b9d9"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="robust_8sql__in.html#a123149abbf366743e04ecb6fc7f8b9d9">mlogregr_robust_step_merge_states</a> (float8[] state1, float8[] state2)</td></tr>
+<tr class="separator:a123149abbf366743e04ecb6fc7f8b9d9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6bfc968b23887a0a8ddd69a5c3350ba9"><td class="memItemLeft" align="right" valign="top">robust_mlogregr_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="robust_8sql__in.html#a6bfc968b23887a0a8ddd69a5c3350ba9">mlogregr_robust_step_final</a> (float8[] state)</td></tr>
+<tr class="separator:a6bfc968b23887a0a8ddd69a5c3350ba9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a209021ac52461f029353cec7fb900cd4"><td class="memItemLeft" align="right" valign="top">aggregate robust_mlogregr_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="robust_8sql__in.html#a209021ac52461f029353cec7fb900cd4">robust_mlogregr</a> (integer dependentVariable, integer numCategories, integer ref_category, float8[] independentVariables, float8[] coef)</td></tr>
+<tr class="separator:a209021ac52461f029353cec7fb900cd4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1f27c072a4ef885a55825f75d12b3bd8"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="robust_8sql__in.html#a1f27c072a4ef885a55825f75d12b3bd8">robust_variance_mlogregr</a> (varchar message)</td></tr>
+<tr class="separator:a1f27c072a4ef885a55825f75d12b3bd8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abd0fb2d66b0dcb4ee6649aaa97bc62f9"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="robust_8sql__in.html#abd0fb2d66b0dcb4ee6649aaa97bc62f9">robust_variance_mlogregr</a> ()</td></tr>
+<tr class="separator:abd0fb2d66b0dcb4ee6649aaa97bc62f9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8ee938491f0cd0eda60c9fd320740566"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="robust_8sql__in.html#a8ee938491f0cd0eda60c9fd320740566">robust_variance_mlogregr</a> (varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, integer ref_category, varchar grouping_cols, varchar optimizer_params, boolean verbose_mode)</td></tr>
+<tr class="memdesc:a8ee938491f0cd0eda60c9fd320740566"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute robust regression diagnostic statistics for multinomial logistic regression.  <a href="#a8ee938491f0cd0eda60c9fd320740566">More...</a><br /></td></tr>
+<tr class="separator:a8ee938491f0cd0eda60c9fd320740566"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2a00a61722a2b92fca37883c795598f6"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="robust_8sql__in.html#a2a00a61722a2b92fca37883c795598f6">robust_variance_mlogregr</a> (varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, integer ref_category, varchar grouping_cols, varchar optimizer_params)</td></tr>
+<tr class="separator:a2a00a61722a2b92fca37883c795598f6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afe0d690ca9e2a75f8fd157b548ece204"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="robust_8sql__in.html#afe0d690ca9e2a75f8fd157b548ece204">robust_variance_mlogregr</a> (varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, integer ref_category, varchar grouping_cols)</td></tr>
+<tr class="separator:afe0d690ca9e2a75f8fd157b548ece204"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af3b1cba3e31f65233524d110f5873682"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="robust_8sql__in.html#af3b1cba3e31f65233524d110f5873682">robust_variance_mlogregr</a> (varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, integer ref_category)</td></tr>
+<tr class="separator:af3b1cba3e31f65233524d110f5873682"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a93031a31e4c93d3caa22d963927e75c8"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="robust_8sql__in.html#a93031a31e4c93d3caa22d963927e75c8">robust_variance_mlogregr</a> (varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname)</td></tr>
+<tr class="separator:a93031a31e4c93d3caa22d963927e75c8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a99a3252474c5fbb2982e461325b1838d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="robust_8sql__in.html#a99a3252474c5fbb2982e461325b1838d">robust_variance_mlogregr</a> (varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, integer ref_category, varchar grouping_cols, integer max_iter, varchar optimizer, float8 tolerance, boolean verbose_mode)</td></tr>
+<tr class="separator:a99a3252474c5fbb2982e461325b1838d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a08cd16eaf72e07c3034951863951d7e1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="robust_8sql__in.html#a08cd16eaf72e07c3034951863951d7e1">robust_variance_mlogregr</a> (varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, integer ref_category, varchar grouping_cols, integer max_iter, varchar optimizer, float8 tolerance)</td></tr>
+<tr class="separator:a08cd16eaf72e07c3034951863951d7e1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abdebb95685f06580eade2941a2edd2af"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="robust_8sql__in.html#abdebb95685f06580eade2941a2edd2af">robust_variance_mlogregr</a> (varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, integer ref_category, varchar grouping_cols, integer max_iter, varchar optimizer)</td></tr>
+<tr class="separator:abdebb95685f06580eade2941a2edd2af"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4ebbb7afe6193dfa77116a5c3ae9b7dc"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="robust_8sql__in.html#a4ebbb7afe6193dfa77116a5c3ae9b7dc">robust_variance_mlogregr</a> (varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, integer ref_category, varchar grouping_cols, integer max_iter)</td></tr>
+<tr class="separator:a4ebbb7afe6193dfa77116a5c3ae9b7dc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><dl class="section date"><dt>Date</dt><dd>2012</dd></dl>
+<dl class="section see"><dt>See also</dt><dd>For a brief introduction to robust variance, see <a class="el" href="group__grp__robust.html">Robust Variance</a> </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="a6bfc968b23887a0a8ddd69a5c3350ba9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6bfc968b23887a0a8ddd69a5c3350ba9">&#9670;&nbsp;</a></span>mlogregr_robust_step_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">robust_mlogregr_result mlogregr_robust_step_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a123149abbf366743e04ecb6fc7f8b9d9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a123149abbf366743e04ecb6fc7f8b9d9">&#9670;&nbsp;</a></span>mlogregr_robust_step_merge_states()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] mlogregr_robust_step_merge_states </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a3928ec1e3935e8dc4dbcb9e705805660"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3928ec1e3935e8dc4dbcb9e705805660">&#9670;&nbsp;</a></span>mlogregr_robust_step_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] mlogregr_robust_step_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>numcategories</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>ref_category</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>coef</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ade1af85b04294ee404a638aa2bfbf051"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ade1af85b04294ee404a638aa2bfbf051">&#9670;&nbsp;</a></span>robust_linregr()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate bytea8 robust_linregr </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>dependentVariable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>independentVariables</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>coef</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a458741a15dc6c2ca627f0d1c1d19b7f8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a458741a15dc6c2ca627f0d1c1d19b7f8">&#9670;&nbsp;</a></span>robust_linregr_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">robust_linregr_result robust_linregr_final </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ad85d9925cbab4b59acd798a7b32671ff"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad85d9925cbab4b59acd798a7b32671ff">&#9670;&nbsp;</a></span>robust_linregr_merge_states()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea8 robust_linregr_merge_states </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a3f978229f9a2e229276278985d76c438"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3f978229f9a2e229276278985d76c438">&#9670;&nbsp;</a></span>robust_linregr_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea8 robust_linregr_transition </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>coef</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a6a9290aafa048bcb7cdc13410d5814aa"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6a9290aafa048bcb7cdc13410d5814aa">&#9670;&nbsp;</a></span>robust_logregr()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate robust_logregr_result robust_logregr </td>
+          <td>(</td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>dependentVariable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>independentVariables</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>coef</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="af8efdd02ad3155411507bf786095a562"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af8efdd02ad3155411507bf786095a562">&#9670;&nbsp;</a></span>robust_logregr_step_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">robust_logregr_result robust_logregr_step_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa715a6f6885b56d919a243ec4ff07fde"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa715a6f6885b56d919a243ec4ff07fde">&#9670;&nbsp;</a></span>robust_logregr_step_merge_states()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] robust_logregr_step_merge_states </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a840ddaa14013c4445b7a0d55e9489d8d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a840ddaa14013c4445b7a0d55e9489d8d">&#9670;&nbsp;</a></span>robust_logregr_step_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] robust_logregr_step_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>coef</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a209021ac52461f029353cec7fb900cd4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a209021ac52461f029353cec7fb900cd4">&#9670;&nbsp;</a></span>robust_mlogregr()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate robust_mlogregr_result robust_mlogregr </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>dependentVariable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>numCategories</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>ref_category</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>independentVariables</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>coef</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a390473d2fd45e268f0fc13ca971b49b4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a390473d2fd45e268f0fc13ca971b49b4">&#9670;&nbsp;</a></span>robust_variance_linregr() <span class="overload">[1/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar robust_variance_linregr </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aec15331f90464a70c222774d78a5caf2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aec15331f90464a70c222774d78a5caf2">&#9670;&nbsp;</a></span>robust_variance_linregr() <span class="overload">[2/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar robust_variance_linregr </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a3f79ad2b83c9749fa85d4f96a12c5af0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3f79ad2b83c9749fa85d4f96a12c5af0">&#9670;&nbsp;</a></span>robust_variance_linregr() <span class="overload">[3/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void robust_variance_linregr </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>verbose_mode</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a80b264be3cd0784d49424efee14b78a8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a80b264be3cd0784d49424efee14b78a8">&#9670;&nbsp;</a></span>robust_variance_linregr() <span class="overload">[4/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void robust_variance_linregr </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac513ea8711b165dac3f75e0c5f4a577f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac513ea8711b165dac3f75e0c5f4a577f">&#9670;&nbsp;</a></span>robust_variance_linregr() <span class="overload">[5/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void robust_variance_linregr </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="abc20ec2c5e74f268e7727c33a4bb9054"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abc20ec2c5e74f268e7727c33a4bb9054">&#9670;&nbsp;</a></span>robust_variance_logregr() <span class="overload">[1/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar robust_variance_logregr </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a0c426835208c1c9b14a9cce168c8bf87"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0c426835208c1c9b14a9cce168c8bf87">&#9670;&nbsp;</a></span>robust_variance_logregr() <span class="overload">[2/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar robust_variance_logregr </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a815cadfeb54447993db9ce2bd2aa709e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a815cadfeb54447993db9ce2bd2aa709e">&#9670;&nbsp;</a></span>robust_variance_logregr() <span class="overload">[3/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void robust_variance_logregr </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_iter</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>optimizer</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>tolerance</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>verbose_mode</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">source_table</td><td>String identifying the input table </td></tr>
+    <tr><td class="paramname">out_table</td><td>String identifying the output table to be created </td></tr>
+    <tr><td class="paramname">dependent_varname</td><td>Column containing the dependent variable </td></tr>
+    <tr><td class="paramname">independent_varname</td><td>Column containing the array of independent variables </td></tr>
+    <tr><td class="paramname">grouping_cols</td><td>Columns to group by. </td></tr>
+    <tr><td class="paramname">max_iter</td><td>Integer identifying the maximum iterations used by the logistic regression solver. Default is 20. </td></tr>
+    <tr><td class="paramname">optimizer</td><td>String identifying the optimizer used in the logistic regression. See the documentation in the logistic regression for the available options. Default is irls. </td></tr>
+    <tr><td class="paramname">tolerance</td><td>Float identifying the tolerance of the logistic regression optimizer. Default is 1e-4. </td></tr>
+    <tr><td class="paramname">verbose_mode</td><td>Boolean specifying if the regression fit should print any warning messages. Default is false. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section user"><dt></dt><dd>To include an intercept in the model, set one coordinate in the <code>independent_varname</code> array to 1.</dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>A composite value:<ul>
+<li><code>std_err FLOAT8[]</code> - Array of huber-white standard errors, \( \mathit{se}(c_1), \dots, \mathit{se}(c_k) \)</li>
+<li><code>t_stats FLOAT8[]</code> - Array of t-statistics, \( \boldsymbol t \)</li>
+<li><code>p_values FLOAT8[]</code> - Array of p-values, \( \boldsymbol p \)</li>
+</ul>
+</dd></dl>
+<dl class="section user"><dt>Usage</dt><dd>For function summary information. Run sql&gt; select robust_variance_logregr('help'); OR sql&gt; select <a class="el" href="robust_8sql__in.html#abc20ec2c5e74f268e7727c33a4bb9054">robust_variance_logregr()</a>; OR sql&gt; select robust_variance_logregr('?'); For function usage information. Run sql&gt; select robust_variance_logregr('usage');<ul>
+<li>Compute the coefficients, and the get the robust diagnostic statistics: <pre>
+   select robust_variance_logregr(source_table, out_table, regression_type, dependentVariable, independentVariables, NULL );
+  </pre></li>
+<li>If the coefficients are already known, they can be provided directly <pre>select robust_variance_logregr(source_table, out_table, regression_type, dependentVariable, independentVariables, coef );
+</pre> </li>
+</ul>
+</dd></dl>
+
+</div>
+</div>
+<a id="a0924470ae6bf5bb3b4b03e41f69d6f7b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0924470ae6bf5bb3b4b03e41f69d6f7b">&#9670;&nbsp;</a></span>robust_variance_logregr() <span class="overload">[4/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void robust_variance_logregr </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_iter</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>optimizer</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>tolerance</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a9a9a8c67a89f4ecf6e783762536239bc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9a9a8c67a89f4ecf6e783762536239bc">&#9670;&nbsp;</a></span>robust_variance_logregr() <span class="overload">[5/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void robust_variance_logregr </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_iter</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>optimizer</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aef8d807073c9e5a8c62b6a318b5048a1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aef8d807073c9e5a8c62b6a318b5048a1">&#9670;&nbsp;</a></span>robust_variance_logregr() <span class="overload">[6/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void robust_variance_logregr </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_iter</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a89770eec0b2e47c714a755b5b1697dd9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a89770eec0b2e47c714a755b5b1697dd9">&#9670;&nbsp;</a></span>robust_variance_logregr() <span class="overload">[7/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void robust_variance_logregr </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab73b9a117ba6bd637bac5757ed122d59"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab73b9a117ba6bd637bac5757ed122d59">&#9670;&nbsp;</a></span>robust_variance_logregr() <span class="overload">[8/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void robust_variance_logregr </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_variable</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_variable</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1f27c072a4ef885a55825f75d12b3bd8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1f27c072a4ef885a55825f75d12b3bd8">&#9670;&nbsp;</a></span>robust_variance_mlogregr() <span class="overload">[1/11]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar robust_variance_mlogregr </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="abd0fb2d66b0dcb4ee6649aaa97bc62f9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abd0fb2d66b0dcb4ee6649aaa97bc62f9">&#9670;&nbsp;</a></span>robust_variance_mlogregr() <span class="overload">[2/11]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar robust_variance_mlogregr </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8ee938491f0cd0eda60c9fd320740566"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8ee938491f0cd0eda60c9fd320740566">&#9670;&nbsp;</a></span>robust_variance_mlogregr() <span class="overload">[3/11]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void robust_variance_mlogregr </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>ref_category</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>optimizer_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>verbose_mode</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>&ndash; NOTICE ---------------------------------------------------------&mdash;&mdash; &ndash; All functions calling other modeling functions should be in the format: &ndash; accept a model table created by the underlying modeling function &ndash; and extract all parameters from the model table and summary table CREATE OR REPLACE FUNCTION madlib.robust_variance_mlogregr( model_table VARCHAR &ndash; name of the mlogregr model table , out_table VARCHAR &ndash; name of output table ) RETURNS VOID AS $$ PythonFunction(regress, robust_mlogistic, robust_variance_mlogregr_new) $$ LANGUAGE plpythonu; &ndash; END OF NOTICE ---------------------------------------------------------&mdash;&mdash; </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">source_table</td><td>name of input table, VARCHAR </td></tr>
+    <tr><td class="paramname">out_table</td><td>name of output table, VARCHAR </td></tr>
+    <tr><td class="paramname">dependent_varname</td><td>dependent variable, VARCHAR </td></tr>
+    <tr><td class="paramname">independent_varname</td><td>independent variables, VARCHAR </td></tr>
+    <tr><td class="paramname">ref_category</td><td>Integer specifying the reference category. Default is 0. </td></tr>
+    <tr><td class="paramname">grouping_cols</td><td>grouping variables, VARCHAR. Default is NULL. Currently a placeholder. </td></tr>
+    <tr><td class="paramname">max_iter</td><td>Integer identifying the maximum iterations used by the logistic regression solver. Default is 20. </td></tr>
+    <tr><td class="paramname">optimizer</td><td>String identifying the optimizer used in the multinomial logistic regression. See the documentation in the multinomial logistic regression for the available options. Default is 'irls'. </td></tr>
+    <tr><td class="paramname">tolerance</td><td>Float identifying the tolerance of the multinomial logistic regression optimizer. Default is 1e-4. </td></tr>
+    <tr><td class="paramname">verbose_mode</td><td>Boolean specifying if the multinomial logistic regression solver should print any warnings. Currently a placeholder.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section user"><dt></dt><dd>To include an intercept in the model, set one coordinate in the <code>independentVariables</code> array to 1.</dd></dl>
+<dl class="section user"><dt>Usage</dt><dd><pre>
+SELECT  madlib.robust_variance_mlogregr(
+    <em>'source_table'</em>,        -- name of input table, VARCHAR
+    <em>'out_table'</em>,           -- name of output table, VARCHAR
+    <em>'dependent_varname'</em>,   -- dependent variable, VARCHAR
+    <em>'independent_varname'</em>, -- independent variables, VARCHAR
+    <em>ref_category</em>,        -- [OPTIONAL] Integer specifying the reference category. Default is 0.
+    <em>'grouping_cols'</em>,        -- [OPTIONAL] grouping variables, VARCHAR. Default is NULL.
+    <em>max_iter</em>,           -- [OPTIONAL] Integer identifying the maximum iterations used by the logistic regression solver.  Default is 20.
+    <em>'optimizer'</em>,            -- [OPTIONAL] String identifying the optimizer used in the multinomial logistic regression.  See the documentation in the multinomial logistic regression for the available options.  Default is irls.
+ <em>tolerance</em>,         -- [OPTIONAL] Float identifying the tolerance of the multinomial logistic regression optimizer. Default is 1e-4.
+ <em>verbose_mode</em>        -- [OPTIONAL] Boolean specifying if the regression fit should print any warning messages.  Default is false.
+);
+</pre></dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>A composite value:<ul>
+<li><code>ref_category INTEGER</code> - The reference category</li>
+<li><code>coef FLOAT8[] </code> - The coefficients for the regression</li>
+<li><code>std_err FLOAT8[]</code> - Array of huber-white standard errors,</li>
+<li><code>z_stats FLOAT8[]</code> - Array of Wald z-statistics,</li>
+<li><code>p_values FLOAT8[]</code> - Array of p-values, </li>
+</ul>
+</dd></dl>
+
+</div>
+</div>
+<a id="a2a00a61722a2b92fca37883c795598f6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2a00a61722a2b92fca37883c795598f6">&#9670;&nbsp;</a></span>robust_variance_mlogregr() <span class="overload">[4/11]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void robust_variance_mlogregr </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>ref_category</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>optimizer_params</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="afe0d690ca9e2a75f8fd157b548ece204"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afe0d690ca9e2a75f8fd157b548ece204">&#9670;&nbsp;</a></span>robust_variance_mlogregr() <span class="overload">[5/11]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void robust_variance_mlogregr </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>ref_category</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="af3b1cba3e31f65233524d110f5873682"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af3b1cba3e31f65233524d110f5873682">&#9670;&nbsp;</a></span>robust_variance_mlogregr() <span class="overload">[6/11]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void robust_variance_mlogregr </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>ref_category</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a93031a31e4c93d3caa22d963927e75c8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a93031a31e4c93d3caa22d963927e75c8">&#9670;&nbsp;</a></span>robust_variance_mlogregr() <span class="overload">[7/11]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void robust_variance_mlogregr </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a99a3252474c5fbb2982e461325b1838d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a99a3252474c5fbb2982e461325b1838d">&#9670;&nbsp;</a></span>robust_variance_mlogregr() <span class="overload">[8/11]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void robust_variance_mlogregr </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>ref_category</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_iter</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>optimizer</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>tolerance</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>verbose_mode</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a08cd16eaf72e07c3034951863951d7e1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a08cd16eaf72e07c3034951863951d7e1">&#9670;&nbsp;</a></span>robust_variance_mlogregr() <span class="overload">[9/11]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void robust_variance_mlogregr </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>ref_category</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_iter</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>optimizer</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>tolerance</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="abdebb95685f06580eade2941a2edd2af"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abdebb95685f06580eade2941a2edd2af">&#9670;&nbsp;</a></span>robust_variance_mlogregr() <span class="overload">[10/11]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void robust_variance_mlogregr </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>ref_category</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_iter</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>optimizer</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a4ebbb7afe6193dfa77116a5c3ae9b7dc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4ebbb7afe6193dfa77116a5c3ae9b7dc">&#9670;&nbsp;</a></span>robust_variance_mlogregr() <span class="overload">[11/11]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void robust_variance_mlogregr </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>ref_category</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>max_iter</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_ac52a4b89b7b1b1591f2952b5cbd041a.html">regress</a></li><li class="navelem"><a class="el" href="robust_8sql__in.html">robust.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:57 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/robust__variance__coxph_8sql__in.html b/docs/rc/robust__variance__coxph_8sql__in.html
new file mode 100644
index 0000000..fe6a693
--- /dev/null
+++ b/docs/rc/robust__variance__coxph_8sql__in.html
@@ -0,0 +1,503 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: robust_variance_coxph.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('robust__variance__coxph_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">robust_variance_coxph.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>SQL functions for robust cox proportional hazards regression.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a9d08b7ab1efa1f58543214a311344741"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="robust__variance__coxph_8sql__in.html#a9d08b7ab1efa1f58543214a311344741">robust_variance_coxph</a> ()</td></tr>
+<tr class="separator:a9d08b7ab1efa1f58543214a311344741"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aee46845ee87505ad1d35badb7db4dfd7"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="robust__variance__coxph_8sql__in.html#aee46845ee87505ad1d35badb7db4dfd7">robust_variance_coxph</a> (varchar message)</td></tr>
+<tr class="separator:aee46845ee87505ad1d35badb7db4dfd7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a746cf7ce7d9db6ad50bb399125403a55"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="robust__variance__coxph_8sql__in.html#a746cf7ce7d9db6ad50bb399125403a55">robust_variance_coxph</a> (varchar model_table, varchar output_table)</td></tr>
+<tr class="separator:a746cf7ce7d9db6ad50bb399125403a55"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0bd8046f4e0956b8dc503656d5127467"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="robust__variance__coxph_8sql__in.html#a0bd8046f4e0956b8dc503656d5127467">rb_coxph_step_transition</a> (float8[], float8[], float8, boolean, float8[], float8[], float8[], float8)</td></tr>
+<tr class="separator:a0bd8046f4e0956b8dc503656d5127467"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a504aa4de0f53044a065e6b1e8a66a285"><td class="memItemLeft" align="right" valign="top">__rb_coxph_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="robust__variance__coxph_8sql__in.html#a504aa4de0f53044a065e6b1e8a66a285">rb_coxph_step_final</a> (float8[])</td></tr>
+<tr class="separator:a504aa4de0f53044a065e6b1e8a66a285"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a03a39bc1fee64cd9b8b6a373758819da"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="robust__variance__coxph_8sql__in.html#a03a39bc1fee64cd9b8b6a373758819da">coxph_h_s_transition</a> (float8[], float8[], float8[])</td></tr>
+<tr class="separator:a03a39bc1fee64cd9b8b6a373758819da"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab122003102dd22274a76aa1a830c69dd"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="robust__variance__coxph_8sql__in.html#ab122003102dd22274a76aa1a830c69dd">coxph_h_s_merge</a> (float8[] left_state, float8[] right_state)</td></tr>
+<tr class="separator:ab122003102dd22274a76aa1a830c69dd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aeb95cacc36c5d6c8cc25c8d37418c71b"><td class="memItemLeft" align="right" valign="top">__rb_coxph_hs_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="robust__variance__coxph_8sql__in.html#aeb95cacc36c5d6c8cc25c8d37418c71b">coxph_h_s_final</a> (float8[])</td></tr>
+<tr class="separator:aeb95cacc36c5d6c8cc25c8d37418c71b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2743e0cecadd7f3fa2a16f9d7d40564b"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="robust__variance__coxph_8sql__in.html#a2743e0cecadd7f3fa2a16f9d7d40564b">coxph_h_s</a> (float8[], float8[])</td></tr>
+<tr class="separator:a2743e0cecadd7f3fa2a16f9d7d40564b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9826d93b250c1fb6e06d412181545754"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="robust__variance__coxph_8sql__in.html#a9826d93b250c1fb6e06d412181545754">rb_coxph_strata_step_final</a> (float8[])</td></tr>
+<tr class="separator:a9826d93b250c1fb6e06d412181545754"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4bf2a610417ee174074b2191fb921256"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="robust__variance__coxph_8sql__in.html#a4bf2a610417ee174074b2191fb921256">rb_sum_strata_transition</a> (float8[] in_state1, float8[] in_state2)</td></tr>
+<tr class="separator:a4bf2a610417ee174074b2191fb921256"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9473298f0225d2ad1f6297f360a639d4"><td class="memItemLeft" align="right" valign="top">__rb_coxph_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="robust__variance__coxph_8sql__in.html#a9473298f0225d2ad1f6297f360a639d4">rb_sum_strata_final</a> (float8[] in_state)</td></tr>
+<tr class="separator:a9473298f0225d2ad1f6297f360a639d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad8fc6f9cca64b26bc7a12f15abfc6234"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="robust__variance__coxph_8sql__in.html#ad8fc6f9cca64b26bc7a12f15abfc6234">rb_sum_strata</a> (float8[])</td></tr>
+<tr class="separator:ad8fc6f9cca64b26bc7a12f15abfc6234"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><dl class="section date"><dt>Date</dt><dd>Oct 2013</dd></dl>
+<dl class="section see"><dt>See also</dt><dd>For a brief introduction to robust cox regression, see the module description grp_robust_cox_prop_hazards </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="a2743e0cecadd7f3fa2a16f9d7d40564b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2743e0cecadd7f3fa2a16f9d7d40564b">&#9670;&nbsp;</a></span>coxph_h_s()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] coxph_h_s </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[]&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aeb95cacc36c5d6c8cc25c8d37418c71b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aeb95cacc36c5d6c8cc25c8d37418c71b">&#9670;&nbsp;</a></span>coxph_h_s_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">__rb_coxph_hs_result coxph_h_s_final </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[]</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab122003102dd22274a76aa1a830c69dd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab122003102dd22274a76aa1a830c69dd">&#9670;&nbsp;</a></span>coxph_h_s_merge()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] coxph_h_s_merge </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>left_state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>right_state</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a03a39bc1fee64cd9b8b6a373758819da"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a03a39bc1fee64cd9b8b6a373758819da">&#9670;&nbsp;</a></span>coxph_h_s_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] coxph_h_s_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[]&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a504aa4de0f53044a065e6b1e8a66a285"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a504aa4de0f53044a065e6b1e8a66a285">&#9670;&nbsp;</a></span>rb_coxph_step_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">__rb_coxph_result rb_coxph_step_final </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[]</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a0bd8046f4e0956b8dc503656d5127467"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0bd8046f4e0956b8dc503656d5127467">&#9670;&nbsp;</a></span>rb_coxph_step_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] rb_coxph_step_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a9826d93b250c1fb6e06d412181545754"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9826d93b250c1fb6e06d412181545754">&#9670;&nbsp;</a></span>rb_coxph_strata_step_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] rb_coxph_strata_step_final </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[]</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ad8fc6f9cca64b26bc7a12f15abfc6234"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad8fc6f9cca64b26bc7a12f15abfc6234">&#9670;&nbsp;</a></span>rb_sum_strata()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] rb_sum_strata </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[]</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a9473298f0225d2ad1f6297f360a639d4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9473298f0225d2ad1f6297f360a639d4">&#9670;&nbsp;</a></span>rb_sum_strata_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">__rb_coxph_result rb_sum_strata_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>in_state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a4bf2a610417ee174074b2191fb921256"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4bf2a610417ee174074b2191fb921256">&#9670;&nbsp;</a></span>rb_sum_strata_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] rb_sum_strata_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>in_state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>in_state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a9d08b7ab1efa1f58543214a311344741"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9d08b7ab1efa1f58543214a311344741">&#9670;&nbsp;</a></span>robust_variance_coxph() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar robust_variance_coxph </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aee46845ee87505ad1d35badb7db4dfd7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aee46845ee87505ad1d35badb7db4dfd7">&#9670;&nbsp;</a></span>robust_variance_coxph() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar robust_variance_coxph </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a746cf7ce7d9db6ad50bb399125403a55"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a746cf7ce7d9db6ad50bb399125403a55">&#9670;&nbsp;</a></span>robust_variance_coxph() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void robust_variance_coxph </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_505cd743a8a717435eca324f49291a46.html">stats</a></li><li class="navelem"><a class="el" href="robust__variance__coxph_8sql__in.html">robust_variance_coxph.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:57 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/sample_8sql__in.html b/docs/rc/sample_8sql__in.html
new file mode 100644
index 0000000..4047a2b
--- /dev/null
+++ b/docs/rc/sample_8sql__in.html
@@ -0,0 +1,442 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: sample.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('sample_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">sample.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>SQL functions for random sampling.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:af933c6e9d6623c62a671dc74e5bd9d51"><td class="memItemLeft" align="right" valign="top">bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sample_8sql__in.html#af933c6e9d6623c62a671dc74e5bd9d51">weighted_sample_transition_int64</a> (bytea8 state, bigint value, float8 weight)</td></tr>
+<tr class="separator:af933c6e9d6623c62a671dc74e5bd9d51"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa066d40345787e00819963f095f40998"><td class="memItemLeft" align="right" valign="top">bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sample_8sql__in.html#aa066d40345787e00819963f095f40998">weighted_sample_merge_int64</a> (bytea8 state_left, bytea8 state_right)</td></tr>
+<tr class="separator:aa066d40345787e00819963f095f40998"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5c2226995c3ef02cb2320b9829bad5eb"><td class="memItemLeft" align="right" valign="top">bigint&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sample_8sql__in.html#a5c2226995c3ef02cb2320b9829bad5eb">weighted_sample_final_int64</a> (bytea8 state)</td></tr>
+<tr class="separator:a5c2226995c3ef02cb2320b9829bad5eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab933c8334edc748aa9ef46b9bb50e60e"><td class="memItemLeft" align="right" valign="top">aggregate bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sample_8sql__in.html#ab933c8334edc748aa9ef46b9bb50e60e">weighted_sample</a> (bigint value, float8 weight)</td></tr>
+<tr class="memdesc:ab933c8334edc748aa9ef46b9bb50e60e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sample a single row according to weights.  <a href="#ab933c8334edc748aa9ef46b9bb50e60e">More...</a><br /></td></tr>
+<tr class="separator:ab933c8334edc748aa9ef46b9bb50e60e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae7ad8a80a8c2508cc54cf496934017c2"><td class="memItemLeft" align="right" valign="top">bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sample_8sql__in.html#ae7ad8a80a8c2508cc54cf496934017c2">weighted_sample_transition_vector</a> (bytea8 state, float8[] value, float8 weight)</td></tr>
+<tr class="separator:ae7ad8a80a8c2508cc54cf496934017c2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac5d00ff9e30dcae8a1b6b8450df3e95e"><td class="memItemLeft" align="right" valign="top">bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sample_8sql__in.html#ac5d00ff9e30dcae8a1b6b8450df3e95e">weighted_sample_merge_vector</a> (bytea8 state_left, bytea8 state_right)</td></tr>
+<tr class="separator:ac5d00ff9e30dcae8a1b6b8450df3e95e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8b2b3bb57b01f47bafe44bea73f39f78"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sample_8sql__in.html#a8b2b3bb57b01f47bafe44bea73f39f78">weighted_sample_final_vector</a> (bytea8 state)</td></tr>
+<tr class="separator:a8b2b3bb57b01f47bafe44bea73f39f78"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa650ad075377cec7c6e1ece37c2b55b0"><td class="memItemLeft" align="right" valign="top">aggregate bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sample_8sql__in.html#aa650ad075377cec7c6e1ece37c2b55b0">weighted_sample</a> (float8[] value, float8 weight)</td></tr>
+<tr class="separator:aa650ad075377cec7c6e1ece37c2b55b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2051a3f21bc06e3c6e3efcd7492b71c4"><td class="memItemLeft" align="right" valign="top">integer&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sample_8sql__in.html#a2051a3f21bc06e3c6e3efcd7492b71c4">poisson_random</a> (float8 <a class="el" href="svec__util_8sql__in.html#a546b947319c9f48237120a31929bdfd9">mean</a>)</td></tr>
+<tr class="separator:a2051a3f21bc06e3c6e3efcd7492b71c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afc523f72e64820329acb8874c2a759d3"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sample_8sql__in.html#afc523f72e64820329acb8874c2a759d3">gamma_random</a> (float8 alpha)</td></tr>
+<tr class="separator:afc523f72e64820329acb8874c2a759d3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af0bfa324d198f8059566757f38fe5c93"><td class="memItemLeft" align="right" valign="top">integer&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sample_8sql__in.html#af0bfa324d198f8059566757f38fe5c93">index_weighted_sample</a> (float8[])</td></tr>
+<tr class="separator:af0bfa324d198f8059566757f38fe5c93"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><dl class="section see"><dt>See also</dt><dd>For an overview of random-sampling functions, see the module description <a class="el" href="group__grp__sample.html">Random Sampling</a>. </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="afc523f72e64820329acb8874c2a759d3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afc523f72e64820329acb8874c2a759d3">&#9670;&nbsp;</a></span>gamma_random()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 gamma_random </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>alpha</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="af0bfa324d198f8059566757f38fe5c93"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af0bfa324d198f8059566757f38fe5c93">&#9670;&nbsp;</a></span>index_weighted_sample()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">integer index_weighted_sample </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[]</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a2051a3f21bc06e3c6e3efcd7492b71c4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2051a3f21bc06e3c6e3efcd7492b71c4">&#9670;&nbsp;</a></span>poisson_random()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">integer poisson_random </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>mean</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab933c8334edc748aa9ef46b9bb50e60e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab933c8334edc748aa9ef46b9bb50e60e">&#9670;&nbsp;</a></span>weighted_sample() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate bytea8 weighted_sample </td>
+          <td>(</td>
+          <td class="paramtype">bigint&#160;</td>
+          <td class="paramname"><em>value</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>weight</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">value</td><td>Value of row. Uniqueness is not enforced. If a value occurs multiple times, the probability of sampling this value is proportional to the sum of its weights. </td></tr>
+    <tr><td class="paramname">weight</td><td>Weight for row. A negative value here is treated has zero weight. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><code>identifier</code> of the selected row. The probability of sampling any particular row <code>(value, weight)</code> is <code>weight/SUM(weight)</code>. </dd></dl>
+
+</div>
+</div>
+<a id="aa650ad075377cec7c6e1ece37c2b55b0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa650ad075377cec7c6e1ece37c2b55b0">&#9670;&nbsp;</a></span>weighted_sample() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate bytea8 weighted_sample </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>value</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>weight</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5c2226995c3ef02cb2320b9829bad5eb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5c2226995c3ef02cb2320b9829bad5eb">&#9670;&nbsp;</a></span>weighted_sample_final_int64()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bigint weighted_sample_final_int64 </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8b2b3bb57b01f47bafe44bea73f39f78"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8b2b3bb57b01f47bafe44bea73f39f78">&#9670;&nbsp;</a></span>weighted_sample_final_vector()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] weighted_sample_final_vector </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa066d40345787e00819963f095f40998"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa066d40345787e00819963f095f40998">&#9670;&nbsp;</a></span>weighted_sample_merge_int64()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea8 weighted_sample_merge_int64 </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state_left</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state_right</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac5d00ff9e30dcae8a1b6b8450df3e95e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac5d00ff9e30dcae8a1b6b8450df3e95e">&#9670;&nbsp;</a></span>weighted_sample_merge_vector()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea8 weighted_sample_merge_vector </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state_left</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state_right</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="af933c6e9d6623c62a671dc74e5bd9d51"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af933c6e9d6623c62a671dc74e5bd9d51">&#9670;&nbsp;</a></span>weighted_sample_transition_int64()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea8 weighted_sample_transition_int64 </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bigint&#160;</td>
+          <td class="paramname"><em>value</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>weight</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae7ad8a80a8c2508cc54cf496934017c2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae7ad8a80a8c2508cc54cf496934017c2">&#9670;&nbsp;</a></span>weighted_sample_transition_vector()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea8 weighted_sample_transition_vector </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>value</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>weight</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_e6c126a997181663ba81c11cbf416bb1.html">sample</a></li><li class="navelem"><a class="el" href="sample_8sql__in.html">sample.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:57 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/all_0.html b/docs/rc/search/all_0.html
new file mode 100644
index 0000000..f25360b
--- /dev/null
+++ b/docs/rc/search/all_0.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/all_0.js b/docs/rc/search/all_0.js
new file mode 100644
index 0000000..637308a
--- /dev/null
+++ b/docs/rc/search/all_0.js
@@ -0,0 +1,319 @@
+var searchData=
+[
+  ['_5f_5farima_5fadjust',['__arima_adjust',['../arima_8sql__in.html#af6f5621d79045e8270e6785ed0d98ce3',1,'arima.sql_in']]],
+  ['_5f_5farima_5fdiff',['__arima_diff',['../arima_8sql__in.html#ab686e554403a61a5404d83e692735ada',1,'arima.sql_in']]],
+  ['_5f_5farima_5flm',['__arima_lm',['../arima_8sql__in.html#aadd3c7627043810a7e650e80b7fafd52',1,'arima.sql_in']]],
+  ['_5f_5farima_5flm_5fdelta',['__arima_lm_delta',['../arima_8sql__in.html#a6a728067ea53fcb8fcbf66bbe296a783',1,'arima.sql_in']]],
+  ['_5f_5farima_5flm_5fresult_5fagg',['__arima_lm_result_agg',['../arima_8sql__in.html#addf886fb09f74d10dfd1875c641d814b',1,'arima.sql_in']]],
+  ['_5f_5farima_5flm_5fresult_5fffunc',['__arima_lm_result_ffunc',['../arima_8sql__in.html#afd8e1b6c57007a47ba64b22718d4e26f',1,'arima.sql_in']]],
+  ['_5f_5farima_5flm_5fresult_5fpfunc',['__arima_lm_result_pfunc',['../arima_8sql__in.html#a76b2c9d653383c81acde8383bb29aa97',1,'arima.sql_in']]],
+  ['_5f_5farima_5flm_5fresult_5fsfunc',['__arima_lm_result_sfunc',['../arima_8sql__in.html#aa919ba0d4fe79c3b55ee60b7ad17c7de',1,'arima.sql_in']]],
+  ['_5f_5farima_5flm_5fstat_5fagg',['__arima_lm_stat_agg',['../arima_8sql__in.html#ae9b8675db85344ac26484f8c125f57b6',1,'arima.sql_in']]],
+  ['_5f_5farima_5flm_5fstat_5fffunc',['__arima_lm_stat_ffunc',['../arima_8sql__in.html#abb44a6b3bf206e966a9746dde942ddc3',1,'arima.sql_in']]],
+  ['_5f_5farima_5flm_5fstat_5fsfunc',['__arima_lm_stat_sfunc',['../arima_8sql__in.html#a884a57ef18bd9e1a1b4137269786bf19',1,'arima.sql_in']]],
+  ['_5f_5farima_5fresidual',['__arima_residual',['../arima_8sql__in.html#a6955c191d95e1531655cea4617caf12c',1,'arima.sql_in']]],
+  ['_5f_5farray_5fabs_5fadd_5fsfunc',['__array_abs_add_sfunc',['../matrix__ops_8sql__in.html#a998820afa3721fa1119532dc76801d18',1,'matrix_ops.sql_in']]],
+  ['_5f_5farray_5fadd',['__array_add',['../clustered__variance_8sql__in.html#a2d33f7a6a98dfc92c6d4a017ceabbd9a',1,'clustered_variance.sql_in']]],
+  ['_5f_5farray_5felem_5fcorr_5ffinal',['__array_elem_corr_final',['../cox__prop__hazards_8sql__in.html#a31f48cba79d114f8f251c5aa77b3c32a',1,'cox_prop_hazards.sql_in']]],
+  ['_5f_5farray_5felem_5fcorr_5fmerge',['__array_elem_corr_merge',['../cox__prop__hazards_8sql__in.html#a189426c7d99c600856205d15d2fe445c',1,'cox_prop_hazards.sql_in']]],
+  ['_5f_5farray_5felem_5fcorr_5ftransition',['__array_elem_corr_transition',['../cox__prop__hazards_8sql__in.html#a597e43a46842b113412d0940b3d175e4',1,'cox_prop_hazards.sql_in']]],
+  ['_5f_5farray_5felement_5fmax',['__array_element_max',['../cox__prop__hazards_8sql__in.html#a8e3917098eeb129096fa871e7e593e1d',1,'cox_prop_hazards.sql_in']]],
+  ['_5f_5farray_5felement_5fmin',['__array_element_min',['../cox__prop__hazards_8sql__in.html#abd49fa0a100bfe513baa90e32fe37839',1,'cox_prop_hazards.sql_in']]],
+  ['_5f_5farray_5fsum',['__array_sum',['../clustered__variance_8sql__in.html#a329c662f02c985ed68b886cf2bd29f37',1,'clustered_variance.sql_in']]],
+  ['_5f_5fbernoulli_5fvector',['__bernoulli_vector',['../matrix__ops_8sql__in.html#a9c36379876228130e6d4d1bf858c695d',1,'__bernoulli_vector(integer dim, float8 pos_val, float8 neg_val, float8 prob, integer seed):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a9ed5e603fa0924f08a7a9e5b3171768a',1,'__bernoulli_vector(integer dim):&#160;matrix_ops.sql_in']]],
+  ['_5f_5fbinomial_5ffista_5ffinal',['__binomial_fista_final',['../elastic__net_8sql__in.html#af83bb77c4eb5c9f5750f35d56fd39117',1,'elastic_net.sql_in']]],
+  ['_5f_5fbinomial_5ffista_5fmerge',['__binomial_fista_merge',['../elastic__net_8sql__in.html#a2284166bacd4b45fb34d50b2d7aec4d4',1,'elastic_net.sql_in']]],
+  ['_5f_5fbinomial_5ffista_5fresult',['__binomial_fista_result',['../elastic__net_8sql__in.html#a1e0cc178e025d8eebb0637d97a02f624',1,'elastic_net.sql_in']]],
+  ['_5f_5fbinomial_5ffista_5fstate_5fdiff',['__binomial_fista_state_diff',['../elastic__net_8sql__in.html#aba9d8b5ca783ad4c3d551fd7b2797ade',1,'elastic_net.sql_in']]],
+  ['_5f_5fbinomial_5ffista_5fstep',['__binomial_fista_step',['../elastic__net_8sql__in.html#a69a71f6e1f8fb3f7d8ad8b987bd432db',1,'elastic_net.sql_in']]],
+  ['_5f_5fbinomial_5ffista_5ftransition',['__binomial_fista_transition',['../elastic__net_8sql__in.html#a43f125953d105e8ad2243f7c722cf753',1,'elastic_net.sql_in']]],
+  ['_5f_5fbinomial_5figd_5ffinal',['__binomial_igd_final',['../elastic__net_8sql__in.html#a39c4af5547dc7f28c189fe5ef8d09ba5',1,'elastic_net.sql_in']]],
+  ['_5f_5fbinomial_5figd_5fmerge',['__binomial_igd_merge',['../elastic__net_8sql__in.html#ae4aed277de996eab9023335413fe9e28',1,'elastic_net.sql_in']]],
+  ['_5f_5fbinomial_5figd_5fresult',['__binomial_igd_result',['../elastic__net_8sql__in.html#a93bfe398c91709e7d55ed94d18c6ac23',1,'elastic_net.sql_in']]],
+  ['_5f_5fbinomial_5figd_5fstate_5fdiff',['__binomial_igd_state_diff',['../elastic__net_8sql__in.html#a2968538b152e7f38e71bcff8e55b768e',1,'elastic_net.sql_in']]],
+  ['_5f_5fbinomial_5figd_5fstep',['__binomial_igd_step',['../elastic__net_8sql__in.html#a791a9701c20c65d1e86a1d5c3462b99d',1,'elastic_net.sql_in']]],
+  ['_5f_5fbinomial_5figd_5fstep_5fsingle_5fseg',['__binomial_igd_step_single_seg',['../elastic__net_8sql__in.html#ac1ec74fff164d85cae14969bb0890e11',1,'elastic_net.sql_in']]],
+  ['_5f_5fbinomial_5figd_5ftransition',['__binomial_igd_transition',['../elastic__net_8sql__in.html#aa0f3feb438f90eef90ddfc9ad4f3e33e',1,'elastic_net.sql_in']]],
+  ['_5f_5fbuild_5ftree',['__build_tree',['../decision__tree_8sql__in.html#abf7fdb1ed06c426e60fb4aedae95d53c',1,'decision_tree.sql_in']]],
+  ['_5f_5fclustered_5ferr_5flin_5ffinal',['__clustered_err_lin_final',['../clustered__variance_8sql__in.html#ad772976f85e2f1dd3927f84a7f96e9ae',1,'clustered_variance.sql_in']]],
+  ['_5f_5fclustered_5ferr_5flin_5fmerge',['__clustered_err_lin_merge',['../clustered__variance_8sql__in.html#a876867228d62f422f10c03dc93d1e9eb',1,'clustered_variance.sql_in']]],
+  ['_5f_5fclustered_5ferr_5flin_5fstep',['__clustered_err_lin_step',['../clustered__variance_8sql__in.html#ad4b627f3a2aa513b8809e3fc2f5e4c5f',1,'clustered_variance.sql_in']]],
+  ['_5f_5fclustered_5ferr_5flin_5ftransition',['__clustered_err_lin_transition',['../clustered__variance_8sql__in.html#ab3548ff761b9d720e4db767dcf419e66',1,'clustered_variance.sql_in']]],
+  ['_5f_5fclustered_5ferr_5flog_5ffinal',['__clustered_err_log_final',['../clustered__variance_8sql__in.html#a790988e40da04d13e5b56197d35546d8',1,'clustered_variance.sql_in']]],
+  ['_5f_5fclustered_5ferr_5flog_5fmerge',['__clustered_err_log_merge',['../clustered__variance_8sql__in.html#ab3dcbdb7edc8575a660656a2ce680d21',1,'clustered_variance.sql_in']]],
+  ['_5f_5fclustered_5ferr_5flog_5fstep',['__clustered_err_log_step',['../clustered__variance_8sql__in.html#a6f17f900dfce2d0a53a9f9ab06631386',1,'clustered_variance.sql_in']]],
+  ['_5f_5fclustered_5ferr_5flog_5ftransition',['__clustered_err_log_transition',['../clustered__variance_8sql__in.html#adbddf55ce3fbb5c99024298566a33cf2',1,'clustered_variance.sql_in']]],
+  ['_5f_5fclustered_5ferr_5fmlog_5ffinal',['__clustered_err_mlog_final',['../clustered__variance_8sql__in.html#adcf2cf1ec7b2a376be25ed3a0a466e67',1,'clustered_variance.sql_in']]],
+  ['_5f_5fclustered_5ferr_5fmlog_5fmerge',['__clustered_err_mlog_merge',['../clustered__variance_8sql__in.html#a12b136a5f17b60527a0b38d0dd553c97',1,'clustered_variance.sql_in']]],
+  ['_5f_5fclustered_5ferr_5fmlog_5fstep',['__clustered_err_mlog_step',['../clustered__variance_8sql__in.html#ad2112683f96b35cee6fcaa44a2831a49',1,'clustered_variance.sql_in']]],
+  ['_5f_5fclustered_5ferr_5fmlog_5ftransition',['__clustered_err_mlog_transition',['../clustered__variance_8sql__in.html#aacb9639e3031010d9d69ab57ba2a5b1f',1,'clustered_variance.sql_in']]],
+  ['_5f_5fclustered_5flin_5fcompute_5fstats',['__clustered_lin_compute_stats',['../clustered__variance_8sql__in.html#abebc8d70763c7264857b4b14d3ddf280',1,'clustered_variance.sql_in']]],
+  ['_5f_5fclustered_5flog_5fcompute_5fstats',['__clustered_log_compute_stats',['../clustered__variance_8sql__in.html#a621c23b2be30469873870797b1dab995',1,'clustered_variance.sql_in']]],
+  ['_5f_5fclustered_5fmlog_5fcompute_5fstats',['__clustered_mlog_compute_stats',['../clustered__variance_8sql__in.html#a5497d5be990c0efb11508b23f128f154',1,'clustered_variance.sql_in']]],
+  ['_5f_5fcmsketch_5fbase64_5ffinal',['__cmsketch_base64_final',['../sketch_8sql__in.html#ae2407a3372bcaf029785164794667566',1,'sketch.sql_in']]],
+  ['_5f_5fcmsketch_5fint8_5ftrans',['__cmsketch_int8_trans',['../sketch_8sql__in.html#a75cd2be76765b34d62ed8c082281d800',1,'__cmsketch_int8_trans(bytea bitmaps, int8 input):&#160;sketch.sql_in'],['../sketch_8sql__in.html#ae8e48dccef6bb071a05af06ed85cde2d',1,'__cmsketch_int8_trans(bytea bitmaps, int8 input, int8 arg1):&#160;sketch.sql_in'],['../sketch_8sql__in.html#a23bffd8efabca2a03dacd5e95f3cdb32',1,'__cmsketch_int8_trans(bytea bitmaps, int8 input, int8 arg1, int8 arg2):&#160;sketch.sql_in'],['../sketch_8sql__in.html#ac3bf881894a534b20a98d98f7370f845',1,'__cmsketch_int8_trans(bytea bitmaps, int8 input, int8 arg1, int8 arg2, int8 arg3):&#160;sketch.sql_in']]],
+  ['_5f_5fcmsketch_5fmerge',['__cmsketch_merge',['../sketch_8sql__in.html#a4b7e9896cacb126cd82d2a12fc4a5067',1,'sketch.sql_in']]],
+  ['_5f_5fcompute_5fmlogregr',['__compute_mlogregr',['../multilogistic_8sql__in.html#ac7da2fbd9877d94b2f1f013cc000566b',1,'multilogistic.sql_in']]],
+  ['_5f_5fcoxph_5fresid_5fstat_5fagg',['__coxph_resid_stat_agg',['../cox__prop__hazards_8sql__in.html#a41a4e85912f00b5b73207f837dccc359',1,'cox_prop_hazards.sql_in']]],
+  ['_5f_5fcoxph_5fresid_5fstat_5ffinal',['__coxph_resid_stat_final',['../cox__prop__hazards_8sql__in.html#a3e6c330ccd548a25c3ef0153f0c956e4',1,'cox_prop_hazards.sql_in']]],
+  ['_5f_5fcoxph_5fresid_5fstat_5fmerge',['__coxph_resid_stat_merge',['../cox__prop__hazards_8sql__in.html#a51da9d74afff6f4ec5a34bbdbec5c868',1,'cox_prop_hazards.sql_in']]],
+  ['_5f_5fcoxph_5fresid_5fstat_5ftransition',['__coxph_resid_stat_transition',['../cox__prop__hazards_8sql__in.html#ab3b596b440d3850d742ebab0245dbf61',1,'cox_prop_hazards.sql_in']]],
+  ['_5f_5fcoxph_5fscale_5fresid',['__coxph_scale_resid',['../cox__prop__hazards_8sql__in.html#a97191f842120124d56329b8b20ed837c',1,'cox_prop_hazards.sql_in']]],
+  ['_5f_5fdeconstruct_5flower_5ftriangle',['__deconstruct_lower_triangle',['../linalg_8sql__in.html#ab67d0a074625d4fb90950d047dc2794e',1,'linalg.sql_in']]],
+  ['_5f_5felastic_5fnet_5fbinomial_5floglikelihood',['__elastic_net_binomial_loglikelihood',['../elastic__net_8sql__in.html#a465ca3aeaca43ab1294f82146eb2fc31',1,'elastic_net.sql_in']]],
+  ['_5f_5ffmsketch_5fcount_5fdistinct',['__fmsketch_count_distinct',['../sketch_8sql__in.html#ade6f6fd17475164c6c6d23cdd9752fca',1,'sketch.sql_in']]],
+  ['_5f_5ffmsketch_5fmerge',['__fmsketch_merge',['../sketch_8sql__in.html#af38dd060ed896681f4587648e3e424ed',1,'sketch.sql_in']]],
+  ['_5f_5ffmsketch_5ftrans',['__fmsketch_trans',['../sketch_8sql__in.html#a585c96bea2300c0c842eb45799e1fe8b',1,'sketch.sql_in']]],
+  ['_5f_5fgaussian_5ffista_5ffinal',['__gaussian_fista_final',['../elastic__net_8sql__in.html#a9cf4bc6bc719c054cf99436965bbab0c',1,'elastic_net.sql_in']]],
+  ['_5f_5fgaussian_5ffista_5fmerge',['__gaussian_fista_merge',['../elastic__net_8sql__in.html#a35dad39bc1dce3573be2c9cc3f5458b2',1,'elastic_net.sql_in']]],
+  ['_5f_5fgaussian_5ffista_5fresult',['__gaussian_fista_result',['../elastic__net_8sql__in.html#a9f5ed35bd3467280e7d68604046ccebd',1,'elastic_net.sql_in']]],
+  ['_5f_5fgaussian_5ffista_5fstate_5fdiff',['__gaussian_fista_state_diff',['../elastic__net_8sql__in.html#ab9b58c238fa59cd8b38a07d3cbfef514',1,'elastic_net.sql_in']]],
+  ['_5f_5fgaussian_5ffista_5fstep',['__gaussian_fista_step',['../elastic__net_8sql__in.html#a4566cf3ca4587153ab7b57fd741582fe',1,'elastic_net.sql_in']]],
+  ['_5f_5fgaussian_5ffista_5ftransition',['__gaussian_fista_transition',['../elastic__net_8sql__in.html#a87bf3c26c925cfe8d214cc4f8c784613',1,'elastic_net.sql_in']]],
+  ['_5f_5fgaussian_5figd_5ffinal',['__gaussian_igd_final',['../elastic__net_8sql__in.html#a4c5b88fb94d8035e988178a2b67ffa43',1,'elastic_net.sql_in']]],
+  ['_5f_5fgaussian_5figd_5fmerge',['__gaussian_igd_merge',['../elastic__net_8sql__in.html#aba6849a59e2178eb0629d3bfc5abe5da',1,'elastic_net.sql_in']]],
+  ['_5f_5fgaussian_5figd_5fresult',['__gaussian_igd_result',['../elastic__net_8sql__in.html#a407f4a6063a4eb931a39b23f52d675f1',1,'elastic_net.sql_in']]],
+  ['_5f_5fgaussian_5figd_5fstate_5fdiff',['__gaussian_igd_state_diff',['../elastic__net_8sql__in.html#a244ef9698a82bbd2d28cdce326f8e514',1,'elastic_net.sql_in']]],
+  ['_5f_5fgaussian_5figd_5fstep',['__gaussian_igd_step',['../elastic__net_8sql__in.html#a493a8cfa6faf0264c7cf9aa80dc9ffb2',1,'elastic_net.sql_in']]],
+  ['_5f_5fgaussian_5figd_5fstep_5fsingle_5fseg',['__gaussian_igd_step_single_seg',['../elastic__net_8sql__in.html#abd46990f9fd7d216bc7f9e8115f10408',1,'elastic_net.sql_in']]],
+  ['_5f_5fgaussian_5figd_5ftransition',['__gaussian_igd_transition',['../elastic__net_8sql__in.html#ad8a31dceade418034918a37c34101c18',1,'elastic_net.sql_in']]],
+  ['_5f_5fgen_5fsvec',['__gen_svec',['../svec__util_8sql__in.html#a1f3669297bdf0fec501894d0652ec848',1,'svec_util.sql_in']]],
+  ['_5f_5fglm_5fbinomial_5flogit_5fagg',['__glm_binomial_logit_agg',['../glm_8sql__in.html#a6e5d4b66896ec8b10d0aff46d4de50ce',1,'glm.sql_in']]],
+  ['_5f_5fglm_5fbinomial_5flogit_5ftransition',['__glm_binomial_logit_transition',['../glm_8sql__in.html#afd34074de9267aff541ff3207907cc3a',1,'glm.sql_in']]],
+  ['_5f_5fglm_5fbinomial_5fprobit_5fagg',['__glm_binomial_probit_agg',['../glm_8sql__in.html#ae3bdd5b1c8b963488bc9633807295630',1,'glm.sql_in']]],
+  ['_5f_5fglm_5fbinomial_5fprobit_5ftransition',['__glm_binomial_probit_transition',['../glm_8sql__in.html#a0680d2db1d03d34a39c3e2e7100a52e7',1,'glm.sql_in']]],
+  ['_5f_5fglm_5ffinal',['__glm_final',['../glm_8sql__in.html#a7e32144641562f061625c4d211912a01',1,'glm.sql_in']]],
+  ['_5f_5fglm_5fgamma_5fidentity_5fagg',['__glm_gamma_identity_agg',['../glm_8sql__in.html#adfbdbca61a165aff83ef53356da73a3e',1,'glm.sql_in']]],
+  ['_5f_5fglm_5fgamma_5fidentity_5ftransition',['__glm_gamma_identity_transition',['../glm_8sql__in.html#a64e74bd1f88b9e42db89a00edac0373a',1,'glm.sql_in']]],
+  ['_5f_5fglm_5fgamma_5finverse_5fagg',['__glm_gamma_inverse_agg',['../glm_8sql__in.html#a2177e1ed1d58d238528a407fce6d52fb',1,'glm.sql_in']]],
+  ['_5f_5fglm_5fgamma_5finverse_5ftransition',['__glm_gamma_inverse_transition',['../glm_8sql__in.html#aaa373b5854856d2b4761cc843ab5011a',1,'glm.sql_in']]],
+  ['_5f_5fglm_5fgamma_5flog_5fagg',['__glm_gamma_log_agg',['../glm_8sql__in.html#a7d6f215077e51c95a193880edf67f574',1,'glm.sql_in']]],
+  ['_5f_5fglm_5fgamma_5flog_5ftransition',['__glm_gamma_log_transition',['../glm_8sql__in.html#a904065c82d2d2275413377a28115853f',1,'glm.sql_in']]],
+  ['_5f_5fglm_5fgaussian_5fidentity_5fagg',['__glm_gaussian_identity_agg',['../glm_8sql__in.html#a33377c70ad934fdcea9206a9ef2ccf1c',1,'glm.sql_in']]],
+  ['_5f_5fglm_5fgaussian_5fidentity_5ftransition',['__glm_gaussian_identity_transition',['../glm_8sql__in.html#aa181df655a47f71f0ce0388ce112282b',1,'glm.sql_in']]],
+  ['_5f_5fglm_5fgaussian_5finverse_5fagg',['__glm_gaussian_inverse_agg',['../glm_8sql__in.html#a0328f64e64a88cc82c09b4b05ee4256a',1,'glm.sql_in']]],
+  ['_5f_5fglm_5fgaussian_5finverse_5ftransition',['__glm_gaussian_inverse_transition',['../glm_8sql__in.html#a695c305abf7d59e224b7c7a05364b534',1,'glm.sql_in']]],
+  ['_5f_5fglm_5fgaussian_5flog_5fagg',['__glm_gaussian_log_agg',['../glm_8sql__in.html#a1dfe1977eb90fb628cbc0b722bb29403',1,'glm.sql_in']]],
+  ['_5f_5fglm_5fgaussian_5flog_5ftransition',['__glm_gaussian_log_transition',['../glm_8sql__in.html#a6aa9b05a9e74e3bf5e9121ec58bffe4f',1,'glm.sql_in']]],
+  ['_5f_5fglm_5finverse_5fgaussian_5fidentity_5fagg',['__glm_inverse_gaussian_identity_agg',['../glm_8sql__in.html#a63f861e73f6ffe5f4a92e4d3bd75cc84',1,'glm.sql_in']]],
+  ['_5f_5fglm_5finverse_5fgaussian_5fidentity_5ftransition',['__glm_inverse_gaussian_identity_transition',['../glm_8sql__in.html#a4a613bda22c8686a28afb47260ccabc9',1,'glm.sql_in']]],
+  ['_5f_5fglm_5finverse_5fgaussian_5finverse_5fagg',['__glm_inverse_gaussian_inverse_agg',['../glm_8sql__in.html#a60fb24d4a39f4f98666320b8fc11965c',1,'glm.sql_in']]],
+  ['_5f_5fglm_5finverse_5fgaussian_5finverse_5ftransition',['__glm_inverse_gaussian_inverse_transition',['../glm_8sql__in.html#a8473dca909f252c2a7d60368ffbb5977',1,'glm.sql_in']]],
+  ['_5f_5fglm_5finverse_5fgaussian_5flog_5fagg',['__glm_inverse_gaussian_log_agg',['../glm_8sql__in.html#a68be2c4fabab9720636435dcebed5c10',1,'glm.sql_in']]],
+  ['_5f_5fglm_5finverse_5fgaussian_5flog_5ftransition',['__glm_inverse_gaussian_log_transition',['../glm_8sql__in.html#a3f4c78c4c52b01251307f24e077e92ff',1,'glm.sql_in']]],
+  ['_5f_5fglm_5finverse_5fgaussian_5fsqr_5finverse_5fagg',['__glm_inverse_gaussian_sqr_inverse_agg',['../glm_8sql__in.html#a9b884108c457cb5881770176115f2661',1,'glm.sql_in']]],
+  ['_5f_5fglm_5finverse_5fgaussian_5fsqr_5finverse_5ftransition',['__glm_inverse_gaussian_sqr_inverse_transition',['../glm_8sql__in.html#a5d4b8d33917e42124a44b30db557940a',1,'glm.sql_in']]],
+  ['_5f_5fglm_5floglik_5fdiff',['__glm_loglik_diff',['../glm_8sql__in.html#a7e84e1d4351a72ea9ecc61db175891ea',1,'glm.sql_in']]],
+  ['_5f_5fglm_5fmerge_5fstates',['__glm_merge_states',['../glm_8sql__in.html#ace09cf40c436db6c065ef2606781cc93',1,'glm.sql_in']]],
+  ['_5f_5fglm_5fpoisson_5fidentity_5fagg',['__glm_poisson_identity_agg',['../glm_8sql__in.html#aff5070482e51bf7ce3704febfa8f3b58',1,'glm.sql_in']]],
+  ['_5f_5fglm_5fpoisson_5fidentity_5ftransition',['__glm_poisson_identity_transition',['../glm_8sql__in.html#a041ee0e1e80ea5cf07f39b8c13f8accb',1,'glm.sql_in']]],
+  ['_5f_5fglm_5fpoisson_5flog_5fagg',['__glm_poisson_log_agg',['../glm_8sql__in.html#a504fa161f5dde9155dd962456597a5c6',1,'glm.sql_in']]],
+  ['_5f_5fglm_5fpoisson_5flog_5ftransition',['__glm_poisson_log_transition',['../glm_8sql__in.html#a48ccc5647dc8d0b6211ae3445d7d533e',1,'glm.sql_in']]],
+  ['_5f_5fglm_5fpoisson_5fsqrt_5fagg',['__glm_poisson_sqrt_agg',['../glm_8sql__in.html#a051510c3a79c019749fd3f04db41c438',1,'glm.sql_in']]],
+  ['_5f_5fglm_5fpoisson_5fsqrt_5ftransition',['__glm_poisson_sqrt_transition',['../glm_8sql__in.html#aa6b93dd92e49df7e3202db15d9e50c6c',1,'glm.sql_in']]],
+  ['_5f_5fglm_5fresult_5ft_5fstats',['__glm_result_t_stats',['../glm_8sql__in.html#a3b7f6999ae949831f33e355ec28b1f79',1,'glm.sql_in']]],
+  ['_5f_5fglm_5fresult_5fz_5fstats',['__glm_result_z_stats',['../glm_8sql__in.html#a0fb8358e0b92c9d9883eaea281a1ba5f',1,'glm.sql_in']]],
+  ['_5f_5finternal_5fget_5fcol_5fnames_5fexcept_5fdep_5fvariable',['__internal_get_col_names_except_dep_variable',['../utilities_8sql__in.html#a7086f5e79c0f53a849759227759d16d7',1,'utilities.sql_in']]],
+  ['_5f_5finternal_5fmlogregr_5firls_5fresult',['__internal_mlogregr_irls_result',['../multilogistic_8sql__in.html#ae890704e55f57bd9105b63021e0f86ae',1,'multilogistic.sql_in']]],
+  ['_5f_5finternal_5fmlogregr_5firls_5fstep_5fdistance',['__internal_mlogregr_irls_step_distance',['../multilogistic_8sql__in.html#aad300d3120db2ecaabf4809cf6be81e7',1,'multilogistic.sql_in']]],
+  ['_5f_5finternal_5fmlogregr_5fsummary_5fresults',['__internal_mlogregr_summary_results',['../multilogistic_8sql__in.html#a48e0f07fcd855a9abcdf6ff070474b73',1,'multilogistic.sql_in']]],
+  ['_5f_5fkmeans_5fvalidate_5fexpr',['__kmeans_validate_expr',['../kmeans_8sql__in.html#a02b4325792510fbdc539f8e76076e451',1,'kmeans.sql_in']]],
+  ['_5f_5fkmeans_5fvalidate_5fsrc',['__kmeans_validate_src',['../kmeans_8sql__in.html#a6e25194423cccea7a1fc58e68d5a05a8',1,'kmeans.sql_in']]],
+  ['_5f_5fknn_5fvalidate_5fsrc',['__knn_validate_src',['../knn_8sql__in.html#a35157e94fa61948ea5314aef292e0fea',1,'knn.sql_in']]],
+  ['_5f_5flda_5fcheck_5fcount_5fceiling',['__lda_check_count_ceiling',['../lda_8sql__in.html#a0eefd7b201fda5289554b7d43366865b',1,'lda.sql_in']]],
+  ['_5f_5flda_5fcount_5ftopic_5fagg',['__lda_count_topic_agg',['../lda_8sql__in.html#acdae83c5837155ea3663b34db4521e86',1,'lda.sql_in']]],
+  ['_5f_5flda_5fcount_5ftopic_5fprefunc',['__lda_count_topic_prefunc',['../lda_8sql__in.html#ae9987628d56799cd5fadccc92dff3110',1,'lda.sql_in']]],
+  ['_5f_5flda_5fcount_5ftopic_5fsfunc',['__lda_count_topic_sfunc',['../lda_8sql__in.html#ad72ac6a8db5e26ef6ca8e7c2563bec94',1,'lda.sql_in']]],
+  ['_5f_5flda_5fgibbs_5fsample',['__lda_gibbs_sample',['../lda_8sql__in.html#ab2640fce837da813a3b6fff38dc713d8',1,'lda.sql_in']]],
+  ['_5f_5flda_5fperplexity_5fagg',['__lda_perplexity_agg',['../lda_8sql__in.html#aa9bc2a38ba29636740deb01aad241050',1,'lda.sql_in']]],
+  ['_5f_5flda_5fperplexity_5fffunc',['__lda_perplexity_ffunc',['../lda_8sql__in.html#abf691da12a45408203b82940644dc34e',1,'lda.sql_in']]],
+  ['_5f_5flda_5fperplexity_5fprefunc',['__lda_perplexity_prefunc',['../lda_8sql__in.html#a78a90c564e975e9a170b83ddeb6bd11c',1,'lda.sql_in']]],
+  ['_5f_5flda_5fperplexity_5fsfunc',['__lda_perplexity_sfunc',['../lda_8sql__in.html#a5defc3ef61cabeaf343a2e1d9988f8da',1,'lda.sql_in']]],
+  ['_5f_5flda_5frandom_5fassign',['__lda_random_assign',['../lda_8sql__in.html#a3cdff7ba417e1a9c1b221f23bc2aac64',1,'lda.sql_in']]],
+  ['_5f_5flda_5futil_5fconorm_5fdata',['__lda_util_conorm_data',['../lda_8sql__in.html#aa4fd0a274f1c400014f2ea9549507436',1,'lda.sql_in']]],
+  ['_5f_5flda_5futil_5findex_5fsort',['__lda_util_index_sort',['../lda_8sql__in.html#aa9729b6bcc20d00936b6831382747c2f',1,'lda.sql_in']]],
+  ['_5f_5flda_5futil_5fnorm_5fdataset',['__lda_util_norm_dataset',['../lda_8sql__in.html#a85990f0bc07a2ab8834301561662939e',1,'lda.sql_in']]],
+  ['_5f_5flda_5futil_5fnorm_5fvocab',['__lda_util_norm_vocab',['../lda_8sql__in.html#a0032ed0be0c41a1b6ed08dca93f4a59f',1,'lda.sql_in']]],
+  ['_5f_5flda_5futil_5fnorm_5fwith_5fsmoothing',['__lda_util_norm_with_smoothing',['../lda_8sql__in.html#a9b522ce2d080956d7fb3d5ae79195b8a',1,'lda.sql_in']]],
+  ['_5f_5flda_5futil_5ftranspose',['__lda_util_transpose',['../lda_8sql__in.html#a2db0019220f10a1fca78ed77a5c2dcd5',1,'lda.sql_in']]],
+  ['_5f_5flda_5futil_5funnest',['__lda_util_unnest',['../lda_8sql__in.html#a2fcec45a37b459567ad0bbcd42c07142',1,'lda.sql_in']]],
+  ['_5f_5flda_5futil_5funnest_5ftranspose',['__lda_util_unnest_transpose',['../lda_8sql__in.html#a219c8432558301878384e5ef8aca1e3d',1,'lda.sql_in']]],
+  ['_5f_5flogregr_5fcg_5fresult',['__logregr_cg_result',['../logistic_8sql__in.html#af5fcfe75b7724e0b93901e64e3f8c1b4',1,'logistic.sql_in']]],
+  ['_5f_5flogregr_5fcg_5fstep',['__logregr_cg_step',['../logistic_8sql__in.html#a0037d0e2891dff4ec1b4e856b9ac103c',1,'logistic.sql_in']]],
+  ['_5f_5flogregr_5fcg_5fstep_5fdistance',['__logregr_cg_step_distance',['../logistic_8sql__in.html#aabc041a54449405558d8a522f0e7d995',1,'logistic.sql_in']]],
+  ['_5f_5flogregr_5fcg_5fstep_5ffinal',['__logregr_cg_step_final',['../logistic_8sql__in.html#a909ec8b38aac9dd78ed7fb52e5e5910d',1,'logistic.sql_in']]],
+  ['_5f_5flogregr_5fcg_5fstep_5fmerge_5fstates',['__logregr_cg_step_merge_states',['../logistic_8sql__in.html#ae4f6142efcde3c7d72405f5daf218af7',1,'logistic.sql_in']]],
+  ['_5f_5flogregr_5fcg_5fstep_5ftransition',['__logregr_cg_step_transition',['../logistic_8sql__in.html#a874e9c5a3ebb7efab16730f85d3e8d25',1,'logistic.sql_in']]],
+  ['_5f_5flogregr_5figd_5fresult',['__logregr_igd_result',['../logistic_8sql__in.html#ab0b377e0dc63a7d79602643a6ee827c9',1,'logistic.sql_in']]],
+  ['_5f_5flogregr_5figd_5fstep',['__logregr_igd_step',['../logistic_8sql__in.html#a782cd8580dac58cc0a70d534dd696801',1,'logistic.sql_in']]],
+  ['_5f_5flogregr_5figd_5fstep_5fdistance',['__logregr_igd_step_distance',['../logistic_8sql__in.html#a993ec0ebec0084170902c0cefc489ae8',1,'logistic.sql_in']]],
+  ['_5f_5flogregr_5figd_5fstep_5ffinal',['__logregr_igd_step_final',['../logistic_8sql__in.html#a44b3499c913ddcc44b0b9e18e2069fed',1,'logistic.sql_in']]],
+  ['_5f_5flogregr_5figd_5fstep_5fmerge_5fstates',['__logregr_igd_step_merge_states',['../logistic_8sql__in.html#a2b23f6e4f9671b511d675c43b42b6544',1,'logistic.sql_in']]],
+  ['_5f_5flogregr_5figd_5fstep_5ftransition',['__logregr_igd_step_transition',['../logistic_8sql__in.html#a0f4010cefc479196d2d280514f92e5b0',1,'logistic.sql_in']]],
+  ['_5f_5flogregr_5firls_5fresult',['__logregr_irls_result',['../logistic_8sql__in.html#aaaf5ea72356ebae7e808b54c495bc501',1,'logistic.sql_in']]],
+  ['_5f_5flogregr_5firls_5fstep',['__logregr_irls_step',['../logistic_8sql__in.html#a7bdf5d39836d8b8826e38a9c15a613c0',1,'logistic.sql_in']]],
+  ['_5f_5flogregr_5firls_5fstep_5fdistance',['__logregr_irls_step_distance',['../logistic_8sql__in.html#a56962d63f19d6c4672f9772f6d2b2810',1,'logistic.sql_in']]],
+  ['_5f_5flogregr_5firls_5fstep_5ffinal',['__logregr_irls_step_final',['../logistic_8sql__in.html#a45fbe307010fcb5890828e35a398c0a6',1,'logistic.sql_in']]],
+  ['_5f_5flogregr_5firls_5fstep_5fmerge_5fstates',['__logregr_irls_step_merge_states',['../logistic_8sql__in.html#a2671672fed9d07b5c8c68a63e3d99e5f',1,'logistic.sql_in']]],
+  ['_5f_5flogregr_5firls_5fstep_5ftransition',['__logregr_irls_step_transition',['../logistic_8sql__in.html#aa51c257177aa60df02dcf46bac43982e',1,'logistic.sql_in']]],
+  ['_5f_5fmargins_5fcompute_5fstats',['__margins_compute_stats',['../marginal_8sql__in.html#a5f270ce35e107912d5ea4e9efd075318',1,'marginal.sql_in']]],
+  ['_5f_5fmargins_5fcoxph_5fint_5ffinal',['__margins_coxph_int_final',['../marginal_8sql__in.html#a3d8c5567fd111b9d10b49d61006f35bf',1,'marginal.sql_in']]],
+  ['_5f_5fmargins_5fcoxph_5fint_5fmerge',['__margins_coxph_int_merge',['../marginal_8sql__in.html#a153bcc3884fa16399fa608442259d32d',1,'marginal.sql_in']]],
+  ['_5f_5fmargins_5fcoxph_5fint_5ftransition',['__margins_coxph_int_transition',['../marginal_8sql__in.html#af82b77209159da1b8bc75b39cc8abd98',1,'marginal.sql_in']]],
+  ['_5f_5fmargins_5fint_5fcoxph_5fagg',['__margins_int_coxph_agg',['../marginal_8sql__in.html#aa44a5bf9ba69ba5e87ebf1f5f4a297db',1,'marginal.sql_in']]],
+  ['_5f_5fmargins_5fint_5flinregr_5fagg',['__margins_int_linregr_agg',['../marginal_8sql__in.html#a228e94d07a25adef545e7f1948648b68',1,'marginal.sql_in']]],
+  ['_5f_5fmargins_5fint_5flogregr_5fagg',['__margins_int_logregr_agg',['../marginal_8sql__in.html#aa419eeb4ee78982d5ce8e3fe102f28c3',1,'marginal.sql_in']]],
+  ['_5f_5fmargins_5fint_5fmlogregr_5fagg',['__margins_int_mlogregr_agg',['../marginal_8sql__in.html#a56aec1f2d980a739df09e09ca52b34f4',1,'marginal.sql_in']]],
+  ['_5f_5fmargins_5flinregr_5fint_5ffinal',['__margins_linregr_int_final',['../marginal_8sql__in.html#a946260ec369f98b5b8d584d3e63fcf80',1,'marginal.sql_in']]],
+  ['_5f_5fmargins_5flinregr_5fint_5fmerge',['__margins_linregr_int_merge',['../marginal_8sql__in.html#a0db48e48baea1ab56841e5b57083d939',1,'marginal.sql_in']]],
+  ['_5f_5fmargins_5flinregr_5fint_5ftransition',['__margins_linregr_int_transition',['../marginal_8sql__in.html#a6f238f587436d904d2206e7edb795bb1',1,'marginal.sql_in']]],
+  ['_5f_5fmargins_5flogregr_5fint_5ffinal',['__margins_logregr_int_final',['../marginal_8sql__in.html#a7ffb6d8dd35dce6deef315458a4f85cd',1,'marginal.sql_in']]],
+  ['_5f_5fmargins_5flogregr_5fint_5fmerge',['__margins_logregr_int_merge',['../marginal_8sql__in.html#a7899421c84eaf701949c7e430dc3eb15',1,'marginal.sql_in']]],
+  ['_5f_5fmargins_5flogregr_5fint_5ftransition',['__margins_logregr_int_transition',['../marginal_8sql__in.html#a5aaf126f78c5eb0f4c7eaae3ebb53f13',1,'marginal.sql_in']]],
+  ['_5f_5fmargins_5fmlogregr_5fint_5ffinal',['__margins_mlogregr_int_final',['../marginal_8sql__in.html#a64e8f06dc5425379065f12eacb95ad05',1,'marginal.sql_in']]],
+  ['_5f_5fmargins_5fmlogregr_5fint_5fmerge',['__margins_mlogregr_int_merge',['../marginal_8sql__in.html#a8c1e7d827ee07f3f6532cdd12a4e1d29',1,'marginal.sql_in']]],
+  ['_5f_5fmargins_5fmlogregr_5fint_5ftransition',['__margins_mlogregr_int_transition',['../marginal_8sql__in.html#ade4ae58316e82c1de75f65f383043532',1,'marginal.sql_in']]],
+  ['_5f_5fmatrix_5fblockize_5fagg',['__matrix_blockize_agg',['../matrix__ops_8sql__in.html#acc0ca1d652b5bd1ad6ffe658bc45b758',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fblockize_5fsfunc',['__matrix_blockize_sfunc',['../matrix__ops_8sql__in.html#a320f5ca4aacb21d56ae2e5eebc908835',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fcholesky_5ffinal',['__matrix_cholesky_final',['../matrix__ops_8sql__in.html#a6b4ddaf2e9daf2452a016498c7f546fb',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fcolumn_5fabs_5fsum_5fagg',['__matrix_column_abs_sum_agg',['../matrix__ops_8sql__in.html#ab905d4447072594f1af9c2bd954bba90',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fcolumn_5fto_5farray_5fformat',['__matrix_column_to_array_format',['../matrix__ops_8sql__in.html#ae4176a88e13c09362af1e4c1afd1f12b',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fcompose_5fdense_5ftransition',['__matrix_compose_dense_transition',['../matrix__ops_8sql__in.html#ac8430e6b3e2595ec2f13bbc98609ebbb',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fcompose_5fmerge',['__matrix_compose_merge',['../matrix__ops_8sql__in.html#a067b397a47438e993a1b1577744e0cf6',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fcompose_5fsparse_5ftransition',['__matrix_compose_sparse_transition',['../matrix__ops_8sql__in.html#a2e0fda0e0ef7fc7d1669207d86667251',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fdense_5fcholesky',['__matrix_dense_cholesky',['../matrix__ops_8sql__in.html#aafdac25e2489777fa349c02272a52afe',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fdense_5feigen',['__matrix_dense_eigen',['../matrix__ops_8sql__in.html#a226bfdc99ee7b87750eb1e34839ba40b',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fdense_5finverse',['__matrix_dense_inverse',['../matrix__ops_8sql__in.html#a2a42b415200e2970528ee6db0070aaec',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fdense_5flu',['__matrix_dense_lu',['../matrix__ops_8sql__in.html#aabb7d39f86fa8442cb6893f7a51f1f07',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fdense_5fnuclear_5fnorm',['__matrix_dense_nuclear_norm',['../matrix__ops_8sql__in.html#a86e1545c3a5d9f83e3eeb374419f181b',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fdense_5fpinv',['__matrix_dense_pinv',['../matrix__ops_8sql__in.html#ac61111e1c209ec09a82a4370c6b2e5ad',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fdense_5fqr',['__matrix_dense_qr',['../matrix__ops_8sql__in.html#ab5ab1aca1133bf650a53d53a0fae226c',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fdense_5frank',['__matrix_dense_rank',['../matrix__ops_8sql__in.html#a65f0ffed59f979f066feba4b7640a11f',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fdensify_5fagg',['__matrix_densify_agg',['../matrix__ops_8sql__in.html#a10a095fb37e4505d38c926a2a390e72f',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fdensify_5fsfunc',['__matrix_densify_sfunc',['../matrix__ops_8sql__in.html#a04809ad9a25c7cf84afd0253fa825d6c',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5feigen_5ffinal',['__matrix_eigen_final',['../matrix__ops_8sql__in.html#ac113f89fe7f51491c8223480433495e5',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5finv_5ffinal',['__matrix_inv_final',['../matrix__ops_8sql__in.html#ad62966b094a7c4ce9c5e0c3b6679e4d1',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5flu_5ffinal',['__matrix_lu_final',['../matrix__ops_8sql__in.html#a47ca9c941be86f88c4746744a6105e89',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fmem_5fsum',['__matrix_mem_sum',['../matrix__ops_8sql__in.html#aa9f91e48c5890026fc35e65722bb6a0b',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fmem_5fsum_5fsfunc',['__matrix_mem_sum_sfunc',['../matrix__ops_8sql__in.html#a634478f746232cb12f3c46cbb2c20837',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fnuclear_5fnorm_5ffinal',['__matrix_nuclear_norm_final',['../matrix__ops_8sql__in.html#a7df499382f7b4ea9347f941cb049c738',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fpinv_5ffinal',['__matrix_pinv_final',['../matrix__ops_8sql__in.html#a1fecf03b9cb3df7423ce40e24a86c511',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fqr_5ffinal',['__matrix_qr_final',['../matrix__ops_8sql__in.html#aad1de24406ecd7ec29b5aa2553373dfc',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5frank_5ffinal',['__matrix_rank_final',['../matrix__ops_8sql__in.html#abe950f847a36db534edc393f04d5fd28',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5frow_5fsplit',['__matrix_row_split',['../matrix__ops_8sql__in.html#a461bf9972c8b132d6f21a1de19fd4f40',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fsparse_5fcholesky',['__matrix_sparse_cholesky',['../matrix__ops_8sql__in.html#af84acb7ebaa37616da8f5ad9f443cb23',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fsparse_5feigen',['__matrix_sparse_eigen',['../matrix__ops_8sql__in.html#afc9506600ad539ffd0a342bdbd22c11d',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fsparse_5finverse',['__matrix_sparse_inverse',['../matrix__ops_8sql__in.html#a91a74f848438f5376cb7e33b90f7f69a',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fsparse_5flu',['__matrix_sparse_lu',['../matrix__ops_8sql__in.html#a4df2e2056385af5f3f236613bca47083',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fsparse_5fnuclear_5fnorm',['__matrix_sparse_nuclear_norm',['../matrix__ops_8sql__in.html#a8823870472e1de1b090694b3a388e41b',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fsparse_5fpinv',['__matrix_sparse_pinv',['../matrix__ops_8sql__in.html#ad1d693b401ca30e14052647d6c10b0b9',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fsparse_5fqr',['__matrix_sparse_qr',['../matrix__ops_8sql__in.html#a2379145bebdb037b482836ac5e592119',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fsparse_5frank',['__matrix_sparse_rank',['../matrix__ops_8sql__in.html#a5e09639f4ce3b62338c421635b1d9e3f',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5funblockize_5fagg',['__matrix_unblockize_agg',['../matrix__ops_8sql__in.html#a9040650f804ace7108c0bca001ed6fae',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5funblockize_5fsfunc',['__matrix_unblockize_sfunc',['../matrix__ops_8sql__in.html#a66142991fa1c3abc0c1b1327002743ce',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5funnest_5fblock',['__matrix_unnest_block',['../matrix__ops_8sql__in.html#a01ea5d175f37efba0cedbba6ade0f7bd',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fvec_5fmult_5fin_5fmem',['__matrix_vec_mult_in_mem',['../matrix__ops_8sql__in.html#a4d267c1d4a4869414c880ea18d44a260',1,'__matrix_vec_mult_in_mem(float8[] vector, float8[][] matrix):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a86db6cbb11df1f7077540ce531b52399',1,'__matrix_vec_mult_in_mem(float8[] vector, float8[] matrix):&#160;matrix_ops.sql_in']]],
+  ['_5f_5fmfvsketch_5ffinal',['__mfvsketch_final',['../sketch_8sql__in.html#a704f9719f5565960a12e3c9d32aac01d',1,'sketch.sql_in']]],
+  ['_5f_5fmfvsketch_5fmerge',['__mfvsketch_merge',['../sketch_8sql__in.html#a3ebb4ce07471e55aae91478d7a7bd15a',1,'sketch.sql_in']]],
+  ['_5f_5fmfvsketch_5ftrans',['__mfvsketch_trans',['../sketch_8sql__in.html#af468ecc80e53fed205f475d4e1309995',1,'sketch.sql_in']]],
+  ['_5f_5fmlogregr_5fformat',['__mlogregr_format',['../multilogistic_8sql__in.html#a55ffab7c3e95b301b3ad5733f185a1ec',1,'multilogistic.sql_in']]],
+  ['_5f_5fmlogregr_5firls_5fstep',['__mlogregr_irls_step',['../multilogistic_8sql__in.html#a695395e04b6d95afafc7c8ac9e01b7b2',1,'multilogistic.sql_in']]],
+  ['_5f_5fmlogregr_5firls_5fstep_5ffinal',['__mlogregr_irls_step_final',['../multilogistic_8sql__in.html#a690a74b753dceec66c4e0ad22f50c51e',1,'multilogistic.sql_in']]],
+  ['_5f_5fmlogregr_5firls_5fstep_5fmerge_5fstates',['__mlogregr_irls_step_merge_states',['../multilogistic_8sql__in.html#a7cae4ea602fc9c159fa2cc8c1a7653a6',1,'multilogistic.sql_in']]],
+  ['_5f_5fmlogregr_5firls_5fstep_5ftransition',['__mlogregr_irls_step_transition',['../multilogistic_8sql__in.html#aef43e4a6363495901045daf339d5c6d7',1,'multilogistic.sql_in']]],
+  ['_5f_5fmlogregr_5fpredict_5fprob',['__mlogregr_predict_prob',['../multilogistic_8sql__in.html#a7418e1ce65432793d0889f7e53f668cd',1,'multilogistic.sql_in']]],
+  ['_5f_5fmlogregr_5fpredict_5fresponse',['__mlogregr_predict_response',['../multilogistic_8sql__in.html#ad5e9a79ac38439db8ecd25148ca6f244',1,'multilogistic.sql_in']]],
+  ['_5f_5fmultinom_5ffinal',['__multinom_final',['../multiresponseglm_8sql__in.html#ab0f66e577e5734114060cef6bfe9a36b',1,'multiresponseglm.sql_in']]],
+  ['_5f_5fmultinom_5flogit_5ftransition',['__multinom_logit_transition',['../multiresponseglm_8sql__in.html#afcd02b370d023e2faf028390f2b7f0c7',1,'multiresponseglm.sql_in']]],
+  ['_5f_5fmultinom_5fmerge_5fstates',['__multinom_merge_states',['../multiresponseglm_8sql__in.html#ac08c2fc81967cc26f8475cc0495fb4ec',1,'multiresponseglm.sql_in']]],
+  ['_5f_5fnormal_5fvector',['__normal_vector',['../matrix__ops_8sql__in.html#a1545c36760a94943c2e1aeca23f1db84',1,'__normal_vector(integer dim, float8 mu, float8 sigma, integer seed):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a32e4cb006c85a878f6054fae7a41b135',1,'__normal_vector(integer dim, float8 mu, float8 sigma):&#160;matrix_ops.sql_in']]],
+  ['_5f_5fordinal_5ffinal',['__ordinal_final',['../ordinal_8sql__in.html#a43acfb9669b17dc032850322993238bd',1,'ordinal.sql_in']]],
+  ['_5f_5fordinal_5flogit_5ftransition',['__ordinal_logit_transition',['../ordinal_8sql__in.html#a8430c72e6eeccf6f057432e0c09df784',1,'ordinal.sql_in']]],
+  ['_5f_5fordinal_5fmerge_5fstates',['__ordinal_merge_states',['../ordinal_8sql__in.html#aea97aa914403a78b150dcaa54b08dc2b',1,'ordinal.sql_in']]],
+  ['_5f_5fpivotalr_5fcrossprod_5fmerge',['__pivotalr_crossprod_merge',['../pivotalr__arrayops_8sql__in.html#a1ce8de76ca7156f2608ff5142921b7ef',1,'pivotalr_arrayops.sql_in']]],
+  ['_5f_5fpivotalr_5fcrossprod_5fsym_5ftransition',['__pivotalr_crossprod_sym_transition',['../pivotalr__arrayops_8sql__in.html#a2667b2584e46a241c98358d8a7db4be4',1,'pivotalr_arrayops.sql_in']]],
+  ['_5f_5fpivotalr_5fcrossprod_5ftransition',['__pivotalr_crossprod_transition',['../pivotalr__arrayops_8sql__in.html#a7aee64ab0f57185432fb0709f7769f6a',1,'pivotalr_arrayops.sql_in']]],
+  ['_5f_5frand_5fblock',['__rand_block',['../matrix__ops_8sql__in.html#a049ad6b2bb6a728539fb49e4e6610233',1,'__rand_block(integer row_dim, integer col_dim):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a5b183fd27db62e94f9275dd6ca8077c3',1,'__rand_block(integer dim):&#160;matrix_ops.sql_in']]],
+  ['_5f_5frand_5fvector',['__rand_vector',['../matrix__ops_8sql__in.html#a845a3e8b711a3ad64103a2c0442f7baf',1,'matrix_ops.sql_in']]],
+  ['_5f_5frow_5ffold',['__row_fold',['../matrix__ops_8sql__in.html#aaeacfbaf004310e36ebb8c4ce4ac601c',1,'matrix_ops.sql_in']]],
+  ['_5f_5fsketch_5farray_5fset_5fbit_5fin_5fplace',['__sketch_array_set_bit_in_place',['../sketch_8sql__in.html#accad714b33677ecddc1da621d23d56ed',1,'sketch.sql_in']]],
+  ['_5f_5fsketch_5fleftmost_5fzero',['__sketch_leftmost_zero',['../sketch_8sql__in.html#a6f8100369e3d3bfc0567381da082db96',1,'sketch.sql_in']]],
+  ['_5f_5fsketch_5frightmost_5fone',['__sketch_rightmost_one',['../sketch_8sql__in.html#a7da3910af51118f6f2831d00fa287bc2',1,'sketch.sql_in']]],
+  ['_5f_5fsub_5farray',['__sub_array',['../marginal_8sql__in.html#aa4edc871f05eb57354a82a16f85e0ee7',1,'marginal.sql_in']]],
+  ['_5f_5fsvd_5fblock_5flanczos_5fagg',['__svd_block_lanczos_agg',['../svd_8sql__in.html#acd10d4d0a196e1ed062f5e38288555df',1,'svd.sql_in']]],
+  ['_5f_5fsvd_5fblock_5flanczos_5fsfunc',['__svd_block_lanczos_sfunc',['../svd_8sql__in.html#a6bc4dbb608e1042746c10b9fa180ec13',1,'svd.sql_in']]],
+  ['_5f_5fsvd_5fdecompose_5fbidiag',['__svd_decompose_bidiag',['../svd_8sql__in.html#a53034f4da049595a4c0ea03e67c727fb',1,'svd.sql_in']]],
+  ['_5f_5fsvd_5fgram_5fschmidt_5forthogonalize_5fagg',['__svd_gram_schmidt_orthogonalize_agg',['../svd_8sql__in.html#abb9c16df6000f260e101bb8dd5c7aa0e',1,'svd.sql_in']]],
+  ['_5f_5fsvd_5fgram_5fschmidt_5forthogonalize_5fffunc',['__svd_gram_schmidt_orthogonalize_ffunc',['../svd_8sql__in.html#af006d422c49a2de762cbf7ebfe588484',1,'svd.sql_in']]],
+  ['_5f_5fsvd_5fgram_5fschmidt_5forthogonalize_5fprefunc',['__svd_gram_schmidt_orthogonalize_prefunc',['../svd_8sql__in.html#ae8f2006de42ea486eccfb82b3623218c',1,'svd.sql_in']]],
+  ['_5f_5fsvd_5fgram_5fschmidt_5forthogonalize_5fsfunc',['__svd_gram_schmidt_orthogonalize_sfunc',['../svd_8sql__in.html#ab145d0ed41d32120b31adf8cf29691f6',1,'svd.sql_in']]],
+  ['_5f_5fsvd_5flanczos_5fagg',['__svd_lanczos_agg',['../svd_8sql__in.html#aa5e1fcbd1d65133acab96cc2085b56b3',1,'svd.sql_in']]],
+  ['_5f_5fsvd_5flanczos_5fbidiagonalize',['__svd_lanczos_bidiagonalize',['../svd_8sql__in.html#a4bd839e9214cec1dfcdcfb3ca9755df1',1,'svd.sql_in']]],
+  ['_5f_5fsvd_5flanczos_5fbidiagonalize_5fsparse',['__svd_lanczos_bidiagonalize_sparse',['../svd_8sql__in.html#a48b5b42e70a402926e39c59cd16e539e',1,'svd.sql_in']]],
+  ['_5f_5fsvd_5flanczos_5fprefunc',['__svd_lanczos_prefunc',['../svd_8sql__in.html#ae7b94da849ee17b7743fc18588c629f5',1,'svd.sql_in']]],
+  ['_5f_5fsvd_5flanczos_5fpvec',['__svd_lanczos_pvec',['../svd_8sql__in.html#ae86146392b1b5065fc6badc0f25b3f3e',1,'svd.sql_in']]],
+  ['_5f_5fsvd_5flanczos_5fqvec',['__svd_lanczos_qvec',['../svd_8sql__in.html#a6b85b00dae1c49821be7d3e68ccf266b',1,'svd.sql_in']]],
+  ['_5f_5fsvd_5flanczos_5fsfunc',['__svd_lanczos_sfunc',['../svd_8sql__in.html#a63ae741e70fbfba1082241c75d6cdd51',1,'svd.sql_in']]],
+  ['_5f_5fsvd_5fsparse_5flanczos_5fagg',['__svd_sparse_lanczos_agg',['../svd_8sql__in.html#a1ba5e18c0f8db1190ef75a9d209a1f0f',1,'svd.sql_in']]],
+  ['_5f_5fsvd_5fsparse_5flanczos_5fsfunc',['__svd_sparse_lanczos_sfunc',['../svd_8sql__in.html#a6f1c90152f497ef91526cc9200bad00a',1,'svd.sql_in']]],
+  ['_5f_5fsvd_5funit_5fvector',['__svd_unit_vector',['../svd_8sql__in.html#a7638f4ea701362e5c318b5272c0e98b9',1,'svd.sql_in']]],
+  ['_5f_5fsvd_5fvec_5fmult_5fmatrix',['__svd_vec_mult_matrix',['../svd_8sql__in.html#a95e025c969e4a93696b49bad69f993d5',1,'svd.sql_in']]],
+  ['_5f_5fsvd_5fvec_5ftrans_5fmult_5fmatrix',['__svd_vec_trans_mult_matrix',['../svd_8sql__in.html#ab18d5d90ce54e9e80c06b843a4bd8ba5',1,'svd.sql_in']]],
+  ['_5f_5fsvd_5fvec_5ftrans_5fmult_5fmatrix_5finternal',['__svd_vec_trans_mult_matrix_internal',['../svd_8sql__in.html#a9a6498e5a9a9d78b46f89401df776ed8',1,'svd.sql_in']]],
+  ['_5f_5fto_5fchar',['__to_char',['../utilities_8sql__in.html#abdd2768e61b034d04c934a981259bbfd',1,'utilities.sql_in']]],
+  ['_5f_5ftree_5fpredict',['__tree_predict',['../decision__tree_8sql__in.html#a71a536f94609625aabceaaa8a9030ac6',1,'decision_tree.sql_in']]],
+  ['_5f_5funiform_5fvector',['__uniform_vector',['../matrix__ops_8sql__in.html#a659d654fc2cd25e498ad83950e044b13',1,'__uniform_vector(integer dim, float8 a, float8 b, integer seed):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a69a8dcfcacf6d5d362e26d74192cea92',1,'__uniform_vector(integer dim, float8 a, float8 b):&#160;matrix_ops.sql_in']]],
+  ['_5f_5funique_5fstring',['__unique_string',['../utilities_8sql__in.html#a5b0156044142673183205154f9e63ddc',1,'utilities.sql_in']]],
+  ['_5f_5futils_5fvar_5fscales_5ffinal',['__utils_var_scales_final',['../utils__regularization_8sql__in.html#a39dba68ff8a3da3a83c646902ca3949d',1,'utils_regularization.sql_in']]],
+  ['_5f_5futils_5fvar_5fscales_5fmerge',['__utils_var_scales_merge',['../utils__regularization_8sql__in.html#abfaba5b835e943b6a79eb785a6901536',1,'utils_regularization.sql_in']]],
+  ['_5f_5futils_5fvar_5fscales_5fnon_5fzero_5fstd_5ffinal',['__utils_var_scales_non_zero_std_final',['../utils__regularization_8sql__in.html#abeb442ad31298aa56b5ca8d2c138a5e1',1,'utils_regularization.sql_in']]],
+  ['_5f_5futils_5fvar_5fscales_5fresult',['__utils_var_scales_result',['../utils__regularization_8sql__in.html#a5cfe62b0f14b537d50ebe122eacc5c77',1,'utils_regularization.sql_in']]],
+  ['_5f_5futils_5fvar_5fscales_5ftransition',['__utils_var_scales_transition',['../utils__regularization_8sql__in.html#a930148a43d97714bf76988122b4a2cd6',1,'utils_regularization.sql_in']]],
+  ['_5f_5fzph_5ffinal',['__zph_final',['../cox__prop__hazards_8sql__in.html#ac4025de22406c470e32e35376d0f54a4',1,'cox_prop_hazards.sql_in']]],
+  ['_5f_5fzph_5fmerge',['__zph_merge',['../cox__prop__hazards_8sql__in.html#afe87ae70e07135bc657b6c9db58a2820',1,'cox_prop_hazards.sql_in']]],
+  ['_5f_5fzph_5ftransition',['__zph_transition',['../cox__prop__hazards_8sql__in.html#abb83dc1e36c379287e4dfdf14a350647',1,'cox_prop_hazards.sql_in']]],
+  ['_5fclosest_5fcolumn',['_closest_column',['../linalg_8sql__in.html#a8239fac12096a5dc2720f6cb35b011e5',1,'linalg.sql_in']]],
+  ['_5fclosest_5fcolumns',['_closest_columns',['../linalg_8sql__in.html#a37fd07274dbc9a7f779346b8572ec989',1,'linalg.sql_in']]],
+  ['_5fcompute_5fgrpid',['_compute_grpid',['../cox__prop__hazards_8sql__in.html#a85be1c85fcf03e9b1bc25798e6fa9914',1,'_compute_grpid(float8[] splits, float8 split_col, boolean reverse):&#160;cox_prop_hazards.sql_in'],['../cox__prop__hazards_8sql__in.html#ae94792f3fb4a0697e11db4334f643164',1,'_compute_grpid(float8[] splits, float8 split_col):&#160;cox_prop_hazards.sql_in']]],
+  ['_5fcompute_5fleaf_5fstats',['_compute_leaf_stats',['../decision__tree_8sql__in.html#a93896cc01cd324ff6dec20d3791b8500',1,'decision_tree.sql_in']]],
+  ['_5fcompute_5fleaf_5fstats_5fmerge',['_compute_leaf_stats_merge',['../decision__tree_8sql__in.html#aec006330e98f6c322f30c05cb07518c0',1,'decision_tree.sql_in']]],
+  ['_5fcompute_5fleaf_5fstats_5ftransition',['_compute_leaf_stats_transition',['../decision__tree_8sql__in.html#aadad9dcc5dd62e335305e99dc1a1b68e',1,'decision_tree.sql_in']]],
+  ['_5fcompute_5fsplits',['_compute_splits',['../cox__prop__hazards_8sql__in.html#a138656eb9696e48be0c5a90ee2de5a44',1,'cox_prop_hazards.sql_in']]],
+  ['_5fcompute_5fsurr_5fstats',['_compute_surr_stats',['../decision__tree_8sql__in.html#a52020e1216a5ca6b255aa9fefa5ed0f1',1,'decision_tree.sql_in']]],
+  ['_5fcompute_5fsurr_5fstats_5ftransition',['_compute_surr_stats_transition',['../decision__tree_8sql__in.html#af17fb0c819380de1c090731dba54ec40',1,'decision_tree.sql_in']]],
+  ['_5fcompute_5fvar_5fimportance',['_compute_var_importance',['../decision__tree_8sql__in.html#adb43607742d993e1588e1e7a74e82320',1,'decision_tree.sql_in']]],
+  ['_5fconvert_5fto_5frandom_5fforest_5fformat',['_convert_to_random_forest_format',['../random__forest_8sql__in.html#a5ec3574505880bc3f6e2620b6ab5cd02',1,'random_forest.sql_in']]],
+  ['_5fcoxph_5fpredict_5fresp',['_coxph_predict_resp',['../cox__prop__hazards_8sql__in.html#a1d53d501174ed20ace7108db2ca8863d',1,'cox_prop_hazards.sql_in']]],
+  ['_5fcoxph_5fpredict_5fterms',['_coxph_predict_terms',['../cox__prop__hazards_8sql__in.html#a063f714c9a2c0f618007f0274febb266',1,'cox_prop_hazards.sql_in']]],
+  ['_5fdisplay_5fdecision_5ftree',['_display_decision_tree',['../decision__tree_8sql__in.html#a77f0212dd3776488cf73080eeb4e851c',1,'_display_decision_tree(bytea8 tree, text[] cat_features, text[] con_features, text[] cat_levels_in_text, integer[] cat_n_levels, text[] dependent_levels, text id_prefix, boolean verbose):&#160;decision_tree.sql_in'],['../decision__tree_8sql__in.html#a0dd7cec9ec3db8482ae60a3f274c3488',1,'_display_decision_tree(bytea8 tree, text[] cat_features, text[] con_features, text[] cat_levels_in_text, integer[] cat_n_levels, text[] dependent_levels, text id_prefix):&#160;decision_tree.sql_in']]],
+  ['_5fdisplay_5fdecision_5ftree_5fsurrogate',['_display_decision_tree_surrogate',['../decision__tree_8sql__in.html#a071ad5dd0cf985d9e5258968fa8c214d',1,'decision_tree.sql_in']]],
+  ['_5fdisplay_5ftext_5fdecision_5ftree',['_display_text_decision_tree',['../decision__tree_8sql__in.html#af030ab954fd282bb08e13134e087fafb',1,'decision_tree.sql_in']]],
+  ['_5fdst_5fcompute_5fcon_5fsplits',['_dst_compute_con_splits',['../decision__tree_8sql__in.html#aaabc1efd8cc211886572692062f74732',1,'decision_tree.sql_in']]],
+  ['_5fdst_5fcompute_5fcon_5fsplits_5ffinal',['_dst_compute_con_splits_final',['../decision__tree_8sql__in.html#a1ce0c3bc05f5f6657ce61f2890b27a33',1,'decision_tree.sql_in']]],
+  ['_5fdst_5fcompute_5fcon_5fsplits_5ftransition',['_dst_compute_con_splits_transition',['../decision__tree_8sql__in.html#ac6533f633d95f6c41a628a751b356ce1',1,'decision_tree.sql_in']]],
+  ['_5fdst_5fcompute_5fentropy',['_dst_compute_entropy',['../decision__tree_8sql__in.html#a71e8f6ae4227a3cd3734d8c8f7ef54fe',1,'decision_tree.sql_in']]],
+  ['_5fdst_5fcompute_5fentropy_5ffinal',['_dst_compute_entropy_final',['../decision__tree_8sql__in.html#ac81d2cf47356702c5bc30790f505c05f',1,'decision_tree.sql_in']]],
+  ['_5fdst_5fcompute_5fentropy_5fmerge',['_dst_compute_entropy_merge',['../decision__tree_8sql__in.html#a992c692244ec9f1dd38557bc8cf5c2ef',1,'decision_tree.sql_in']]],
+  ['_5fdst_5fcompute_5fentropy_5ftransition',['_dst_compute_entropy_transition',['../decision__tree_8sql__in.html#a88589c4a865221cd97af52284e222195',1,'decision_tree.sql_in']]],
+  ['_5fdt_5fapply',['_dt_apply',['../decision__tree_8sql__in.html#a164580846362686fe4ab55db7c4fa52a',1,'decision_tree.sql_in']]],
+  ['_5fdt_5fsurr_5fapply',['_dt_surr_apply',['../decision__tree_8sql__in.html#a05665f86bc28346cdf12e4b4d05aa3d9',1,'decision_tree.sql_in']]],
+  ['_5ffinal_5fmode',['_final_mode',['../utilities_8sql__in.html#a378fd0afa1245520f2270e602ed9e6b6',1,'utilities.sql_in']]],
+  ['_5fgen_5fcat_5flevels_5fset',['_gen_cat_levels_set',['../decision__tree_8sql__in.html#a658412807f7b28e9e367a1421cb8ad96',1,'decision_tree.sql_in']]],
+  ['_5fgen_5fstate',['_gen_state',['../utilities_8sql__in.html#a2dc21ec6de26adef2cf1699ed8dab5aa',1,'utilities.sql_in']]],
+  ['_5fget_5fbin_5findex_5fby_5fvalue',['_get_bin_index_by_value',['../random__forest_8sql__in.html#a5abaf34ca61c9870463291b0851ef261',1,'random_forest.sql_in']]],
+  ['_5fget_5fbin_5findices_5fby_5fvalues',['_get_bin_indices_by_values',['../random__forest_8sql__in.html#a022b4a4701e439538bd8aad7891ecee5',1,'random_forest.sql_in']]],
+  ['_5fget_5fbin_5fvalue_5fby_5findex',['_get_bin_value_by_index',['../random__forest_8sql__in.html#a807c2d0ab7a4c3b56d52aad07aedd02a',1,'random_forest.sql_in']]],
+  ['_5finitialize_5fdecision_5ftree',['_initialize_decision_tree',['../decision__tree_8sql__in.html#ad63f7b9a78190275509744f9517dd370',1,'decision_tree.sql_in']]],
+  ['_5fmap_5fcatlevel_5fto_5fint',['_map_catlevel_to_int',['../decision__tree_8sql__in.html#a56fec99839acd3f7f9d33f0912480928',1,'decision_tree.sql_in']]],
+  ['_5fpca_5fproject_5funion',['_pca_project_union',['../pca__project_8sql__in.html#a326bbd91fea50c9ebd8edcfe963eb535',1,'pca_project.sql_in']]],
+  ['_5fpca_5funion',['_pca_union',['../pca_8sql__in.html#a2c896b607596a09d707365bb9287e73b',1,'pca.sql_in']]],
+  ['_5fpredict_5fdt_5fprob',['_predict_dt_prob',['../decision__tree_8sql__in.html#a25ef01785744c7cf005e6b517602b497',1,'decision_tree.sql_in']]],
+  ['_5fpredict_5fdt_5fresponse',['_predict_dt_response',['../decision__tree_8sql__in.html#a59b5f555e1f8d7c57830c9cfe3401615',1,'decision_tree.sql_in']]],
+  ['_5fprint_5fdecision_5ftree',['_print_decision_tree',['../decision__tree_8sql__in.html#a32e1056ceed38cc5da2e022e455b7de6',1,'decision_tree.sql_in']]],
+  ['_5frf_5fcat_5fimp_5fscore',['_rf_cat_imp_score',['../random__forest_8sql__in.html#a9b188037fd90e41b9590d8296351b645',1,'random_forest.sql_in']]],
+  ['_5frf_5fcon_5fimp_5fscore',['_rf_con_imp_score',['../random__forest_8sql__in.html#aa237f4a451150d5a44f7e871a62b4621',1,'random_forest.sql_in']]],
+  ['_5fsplit_5ffinal',['_split_final',['../cox__prop__hazards_8sql__in.html#ac5ba4af69415de3372e5a9d9f97a96af',1,'cox_prop_hazards.sql_in']]],
+  ['_5fsplit_5fmerge',['_split_merge',['../cox__prop__hazards_8sql__in.html#a2e641566026ce44f191e722db6d4f4d3',1,'cox_prop_hazards.sql_in']]],
+  ['_5fsplit_5ftransition',['_split_transition',['../cox__prop__hazards_8sql__in.html#a842f88fb0d1f17d5410ac30fb1445deb',1,'cox_prop_hazards.sql_in']]],
+  ['_5fstring_5fto_5farray',['_string_to_array',['../utilities_8sql__in.html#a967afc3041b28c8ceedcef8d25c26b9b',1,'utilities.sql_in']]]
+];
diff --git a/docs/rc/search/all_1.html b/docs/rc/search/all_1.html
new file mode 100644
index 0000000..b13f0f7
--- /dev/null
+++ b/docs/rc/search/all_1.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_1.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/all_1.js b/docs/rc/search/all_1.js
new file mode 100644
index 0000000..d4208e1
--- /dev/null
+++ b/docs/rc/search/all_1.js
@@ -0,0 +1,72 @@
+var searchData=
+[
+  ['adjusted_5fr2_5fscore',['adjusted_r2_score',['../pred__metrics_8sql__in.html#a129d96c2f4645d026634d9e1826ed9a0',1,'adjusted_r2_score(text table_in, text table_out, text prediction_col, text observed_col, integer num_predictors, integer training_size, text grouping_cols):&#160;pred_metrics.sql_in'],['../pred__metrics_8sql__in.html#ad50bf1fb684d2e285ad26478f9a2aa84',1,'adjusted_r2_score(text table_in, text table_out, text prediction_col, text observed_col, integer num_predictors, integer training_size):&#160;pred_metrics.sql_in'],['../pred__metrics_8sql__in.html#a424d641abd6653a870f7a835778450c7',1,'adjusted_r2_score(text message):&#160;pred_metrics.sql_in'],['../pred__metrics_8sql__in.html#a70d9e59f0f44519b173a82b9731e1cc1',1,'adjusted_r2_score():&#160;pred_metrics.sql_in']]],
+  ['agg_5farray_5fconcat',['agg_array_concat',['../input__data__preprocessor_8sql__in.html#a0d24b7a8306ca61b0d89d1afe1f892b0',1,'agg_array_concat(real[]):&#160;input_data_preprocessor.sql_in'],['../input__data__preprocessor_8sql__in.html#ab478cd585b6a2aa1435c93d53429987f',1,'agg_array_concat(smallint[]):&#160;input_data_preprocessor.sql_in']]],
+  ['angle',['angle',['../svec__util_8sql__in.html#a7e395ee71f6cf05afa76d89a72d45bec',1,'svec_util.sql_in']]],
+  ['apsp_2esql_5fin',['apsp.sql_in',['../apsp_8sql__in.html',1,'']]],
+  ['area_5funder_5froc',['area_under_roc',['../pred__metrics_8sql__in.html#ac9a3057fb15ed515509de58c829bb591',1,'area_under_roc(text table_in, text table_out, text prediction_col, text observed_col, text grouping_cols):&#160;pred_metrics.sql_in'],['../pred__metrics_8sql__in.html#a9c0f1d6fa8ac88b1151710795d762e47',1,'area_under_roc(text table_in, text table_out, text prediction_col, text observed_col):&#160;pred_metrics.sql_in'],['../pred__metrics_8sql__in.html#a92da7daab6584c8981b85a3c4f830c3b',1,'area_under_roc(text message):&#160;pred_metrics.sql_in'],['../pred__metrics_8sql__in.html#a341c337551c0bf8785093b48bbf10cc9',1,'area_under_roc():&#160;pred_metrics.sql_in']]],
+  ['argmax',['argmax',['../bayes_8sql__in.html#ad47c68a2b8aeedf66d509f0c32a9732d',1,'bayes.sql_in']]],
+  ['argmax_5fcombine',['argmax_combine',['../bayes_8sql__in.html#ab150442ec577f4a0a3948176baf5ebd0',1,'bayes.sql_in']]],
+  ['argmax_5ffinal',['argmax_final',['../bayes_8sql__in.html#aa7017323fd6fad40c9acbbee5f1fec7e',1,'bayes.sql_in']]],
+  ['argmax_5ftransition',['argmax_transition',['../bayes_8sql__in.html#a0671e6ac35a1967f41d2efb9e8417e1b',1,'bayes.sql_in']]],
+  ['arima_2esql_5fin',['arima.sql_in',['../arima_8sql__in.html',1,'']]],
+  ['arima_5fforecast',['arima_forecast',['../arima_8sql__in.html#a52416f13110c15b6b7fe8736a4eb0202',1,'arima_forecast(text model_table, text output_table, integer steps_ahead):&#160;arima.sql_in'],['../arima_8sql__in.html#ada9e8962693411ec919953bad1ef6007',1,'arima_forecast(text message):&#160;arima.sql_in'],['../arima_8sql__in.html#a08645edc97c591bce174964ac309a3a0',1,'arima_forecast():&#160;arima.sql_in']]],
+  ['arima_5ftrain',['arima_train',['../arima_8sql__in.html#a9af899e0260745b75b1872159fea1281',1,'arima_train(text input_table, text output_table, text timestamp_column, text timeseries_column, text grouping_columns, boolean include_mean, integer[] non_seasonal_orders, text optimizer_params):&#160;arima.sql_in'],['../arima_8sql__in.html#ac5b071de3f011a05b877afd6a415f993',1,'arima_train(text input_table, text output_table, text timestamp_column, text timeseries_column, text grouping_columns, boolean include_mean, integer[] non_seasonal_orders):&#160;arima.sql_in'],['../arima_8sql__in.html#ac4d148eefd1d5fbf4e613d5f10df4930',1,'arima_train(text input_table, text output_table, text timestamp_column, text timeseries_column, text grouping_columns, boolean include_mean):&#160;arima.sql_in'],['../arima_8sql__in.html#a47977919832510a148d237b11688aee6',1,'arima_train(text input_table, text output_table, text timestamp_column, text timeseries_column, text grouping_columns):&#160;arima.sql_in'],['../arima_8sql__in.html#a1842458490b5b3a3a80d9663792c5e48',1,'arima_train(text input_table, text output_table, text timestamp_column, text timeseries_column):&#160;arima.sql_in'],['../arima_8sql__in.html#a97025971eb41b5480e279e8b56d5c018',1,'arima_train(text message):&#160;arima.sql_in'],['../arima_8sql__in.html#a71f407786355a4226ff44a94b6c80589',1,'arima_train():&#160;arima.sql_in']]],
+  ['array_5fabs',['array_abs',['../array__ops_8sql__in.html#ac14e74c10b58f5518cd0e3e56067e5ba',1,'array_ops.sql_in']]],
+  ['array_5fabs_5fsum',['array_abs_sum',['../array__ops_8sql__in.html#a13c0b0c53e8b0dc4e08c21bb8152ee7d',1,'array_ops.sql_in']]],
+  ['array_5fadd',['array_add',['../array__ops_8sql__in.html#a91c8d3715142927b3967f05a4fbf1575',1,'array_ops.sql_in']]],
+  ['array_5favg',['array_avg',['../cox__prop__hazards_8sql__in.html#a5734f5796a403ebf2e765cba136f54c8',1,'cox_prop_hazards.sql_in']]],
+  ['array_5favg_5ffinal',['array_avg_final',['../cox__prop__hazards_8sql__in.html#a1f5594f3a1199bfd91d7479292e25b5c',1,'cox_prop_hazards.sql_in']]],
+  ['array_5favg_5fmerge',['array_avg_merge',['../cox__prop__hazards_8sql__in.html#a45bd6774621ad8fe0baa9427f7ce8fd4',1,'cox_prop_hazards.sql_in']]],
+  ['array_5favg_5ftransition',['array_avg_transition',['../cox__prop__hazards_8sql__in.html#a0ffc559f8f54d7ea49c8d1a865ef5a37',1,'cox_prop_hazards.sql_in']]],
+  ['array_5fcontains',['array_contains',['../array__ops_8sql__in.html#aedf6cb13eb4803bcc12dc4d95ea8ff4e',1,'array_ops.sql_in']]],
+  ['array_5fcontains_5fnull',['array_contains_null',['../array__ops_8sql__in.html#a86e48d6f0ed7572cfc10576a07f84d25',1,'array_ops.sql_in']]],
+  ['array_5fcos',['array_cos',['../array__ops_8sql__in.html#a8855869bb9f124c3ff5b10041988610c',1,'array_ops.sql_in']]],
+  ['array_5fcum_5fprod',['array_cum_prod',['../array__ops_8sql__in.html#a69642cec81403897436d3c286bf2b36b',1,'array_ops.sql_in']]],
+  ['array_5fcum_5fsum',['array_cum_sum',['../array__ops_8sql__in.html#a819f395ada41a446dd4941f172d0bfef',1,'array_ops.sql_in']]],
+  ['array_5fdiv',['array_div',['../array__ops_8sql__in.html#a6cc05e7052495f8b64692faf40219576',1,'array_ops.sql_in']]],
+  ['array_5fdot',['array_dot',['../array__ops_8sql__in.html#acde10964ed23b7c8da515fb84cb8d5e0',1,'array_ops.sql_in']]],
+  ['array_5felem_5fcorr_5fagg',['array_elem_corr_agg',['../cox__prop__hazards_8sql__in.html#a8928da50ddcf85de812ab058214324db',1,'cox_prop_hazards.sql_in']]],
+  ['array_5felement_5fmax',['array_element_max',['../cox__prop__hazards_8sql__in.html#a1de2b192c73ede707b42726e9469664d',1,'cox_prop_hazards.sql_in']]],
+  ['array_5felement_5fmin',['array_element_min',['../cox__prop__hazards_8sql__in.html#a2ec0ea5a3faba236a75d4d9cc16e40a4',1,'cox_prop_hazards.sql_in']]],
+  ['array_5ffill',['array_fill',['../array__ops_8sql__in.html#a065a5323f3b742be47e39ad8b4c90fc2',1,'array_ops.sql_in']]],
+  ['array_5ffilter',['array_filter',['../array__ops_8sql__in.html#acc295a568878940ffc3e2c9a75990efb',1,'array_filter(anyarray x, anyelement k, text op):&#160;array_ops.sql_in'],['../array__ops_8sql__in.html#a0c3c44e81ff158ce8914258aa5604872',1,'array_filter(anyarray x, anyelement k):&#160;array_ops.sql_in'],['../array__ops_8sql__in.html#ac4490f150ecb7aaab0933c223ccde5bd',1,'array_filter(anyarray x):&#160;array_ops.sql_in']]],
+  ['array_5fmax',['array_max',['../array__ops_8sql__in.html#ae891429cc50705c530f3e5ca15541849',1,'array_ops.sql_in']]],
+  ['array_5fmax_5findex',['array_max_index',['../array__ops_8sql__in.html#aa415256a9064aecc600dfb5e377fb7b1',1,'array_ops.sql_in']]],
+  ['array_5fmean',['array_mean',['../array__ops_8sql__in.html#a407598f9eb70637798b02fd731bfca2c',1,'array_ops.sql_in']]],
+  ['array_5fmin',['array_min',['../array__ops_8sql__in.html#a6659bf9d9363eb179fab34f81f8ac59b',1,'array_ops.sql_in']]],
+  ['array_5fmin_5findex',['array_min_index',['../array__ops_8sql__in.html#a813a4d9ffc1c18b1b3e18f6ecdb2051f',1,'array_ops.sql_in']]],
+  ['array_5fmult',['array_mult',['../array__ops_8sql__in.html#a652d70c480d484c4a1a92ded384b0dd7',1,'array_ops.sql_in']]],
+  ['array_5fof_5fbigint',['array_of_bigint',['../array__ops_8sql__in.html#ab7d8550e66d2e0bd54b8f0997d93880c',1,'array_ops.sql_in']]],
+  ['array_5fof_5ffloat',['array_of_float',['../array__ops_8sql__in.html#ab066e65a41db78b00b4532996b2a6efc',1,'array_ops.sql_in']]],
+  ['array_5fops_2esql_5fin',['array_ops.sql_in',['../array__ops_8sql__in.html',1,'']]],
+  ['array_5fpow',['array_pow',['../array__ops_8sql__in.html#a761e7ca753a5e1acf26896b37ed8b0bd',1,'array_ops.sql_in']]],
+  ['array_5fscalar_5fadd',['array_scalar_add',['../array__ops_8sql__in.html#a0b6ffe59b12c3dee076c3059f9ab363f',1,'array_ops.sql_in']]],
+  ['array_5fscalar_5fmult',['array_scalar_mult',['../array__ops_8sql__in.html#ae6881cc5c86941b6ffca35d7f3cd5c12',1,'array_ops.sql_in']]],
+  ['array_5fsqrt',['array_sqrt',['../array__ops_8sql__in.html#a83451ed0c3ca5a9c62751dba47e45df7',1,'array_ops.sql_in']]],
+  ['array_5fsquare',['array_square',['../array__ops_8sql__in.html#aff60f4091bed6374683f047c8a70ef9a',1,'array_ops.sql_in']]],
+  ['array_5fstddev',['array_stddev',['../array__ops_8sql__in.html#a3b6c2d173a611e6d6b184d825c2b336d',1,'array_ops.sql_in']]],
+  ['array_5fsub',['array_sub',['../array__ops_8sql__in.html#a2875a161a01c7dcdea9a4997b074eefc',1,'array_ops.sql_in']]],
+  ['array_5fsum',['array_sum',['../array__ops_8sql__in.html#a4c98f20e6a737358806f63318daea5ec',1,'array_ops.sql_in']]],
+  ['array_5fsum_5fbig',['array_sum_big',['../array__ops_8sql__in.html#a418de59800833aa95f9b7cbd6b12901c',1,'array_ops.sql_in']]],
+  ['array_5fto_5f1d',['array_to_1d',['../linalg_8sql__in.html#a71304c333a999e69ac1430c285c35181',1,'linalg.sql_in']]],
+  ['array_5fto_5f2d',['array_to_2d',['../linalg_8sql__in.html#a0799a4ccb93a699a280861126c3e1a74',1,'linalg.sql_in']]],
+  ['array_5fto_5fbytea',['array_to_bytea',['../array__ops_8sql__in.html#ae82f5f104ce04c1b0e6cf8dbf9c110ee',1,'array_ops.sql_in']]],
+  ['array_5funion',['array_union',['../crf_8sql__in.html#a73693c959db4ca3dbfd1b9debcca2c8f',1,'crf.sql_in']]],
+  ['array_5funnest_5f2d_5fto_5f1d',['array_unnest_2d_to_1d',['../array__ops_8sql__in.html#af057b589f2a2cb1095caa99feaeb3d70',1,'array_unnest_2d_to_1d(anyarray x, int unnest_row_id, anyarray unnest_result):&#160;array_ops.sql_in'],['../array__ops_8sql__in.html#aa86efceb2ac80f621db00844bab77553',1,'array_unnest_2d_to_1d():&#160;array_ops.sql_in']]],
+  ['assert',['assert',['../utilities_8sql__in.html#a76cfdbed8a6782f37f50710d855434bd',1,'utilities.sql_in']]],
+  ['assert_5fguc_5fvalue',['assert_guc_value',['../utilities_8sql__in.html#ab0c056b9f6ec748b24352261276775ba',1,'utilities.sql_in']]],
+  ['assoc_5frules',['assoc_rules',['../assoc__rules_8sql__in.html#a7c215a102cc18276a3ca14c38ed35f89',1,'assoc_rules(float8 support, float8 confidence, text tid_col, text item_col, text input_table, text output_schema, boolean verbose, integer max_itemset_size, integer max_lhs_size, integer max_rhs_size):&#160;assoc_rules.sql_in'],['../assoc__rules_8sql__in.html#a033f13252ebfc88b21f18835e5d3ce37',1,'assoc_rules(float8 support, float8 confidence, text tid_col, text item_col, text input_table, text output_schema, boolean verbose, integer max_itemset_size, integer max_lhs_size):&#160;assoc_rules.sql_in'],['../assoc__rules_8sql__in.html#a2ce0222d57332da628eb98220130e905',1,'assoc_rules(float8 support, float8 confidence, text tid_col, text item_col, text input_table, text output_schema, boolean verbose, integer max_itemset_size):&#160;assoc_rules.sql_in'],['../assoc__rules_8sql__in.html#a68a256d98b82ac15bac7df92e806f6f8',1,'assoc_rules(float8 support, float8 confidence, text tid_col, text item_col, text input_table, text output_schema):&#160;assoc_rules.sql_in'],['../assoc__rules_8sql__in.html#af9456adb6dad01e452415b9a0a5371dc',1,'assoc_rules(float8 support, float8 confidence, text tid_col, text item_col, text input_table, text output_schema, boolean verbose):&#160;assoc_rules.sql_in'],['../assoc__rules_8sql__in.html#aeddb752c12b9af779d796b135f900e38',1,'assoc_rules(text message):&#160;assoc_rules.sql_in'],['../assoc__rules_8sql__in.html#a8362eb54bb0eeb551d5a1aadb96e7092',1,'assoc_rules():&#160;assoc_rules.sql_in']]],
+  ['assoc_5frules_2esql_5fin',['assoc_rules.sql_in',['../assoc__rules_8sql__in.html',1,'']]],
+  ['avg',['avg',['../linalg_8sql__in.html#a1aa37f73fb1cd8d7d106aa518dd8c0b4',1,'linalg.sql_in']]],
+  ['avg_5fvector_5ffinal',['avg_vector_final',['../linalg_8sql__in.html#ad468b52a7caa9b47a0650d39e32d9c50',1,'linalg.sql_in']]],
+  ['avg_5fvector_5fmerge',['avg_vector_merge',['../linalg_8sql__in.html#a5ac255c13e1f2d91274b829ff0383e44',1,'linalg.sql_in']]],
+  ['avg_5fvector_5ftransition',['avg_vector_transition',['../linalg_8sql__in.html#aaea269f4746f952faadffed9d9b107d7',1,'linalg.sql_in']]],
+  ['all_20pairs_20shortest_20path',['All Pairs Shortest Path',['../group__grp__apsp.html',1,'']]],
+  ['arima',['ARIMA',['../group__grp__arima.html',1,'']]],
+  ['array_20operations',['Array Operations',['../group__grp__array.html',1,'']]],
+  ['arrays_20and_20matrices',['Arrays and Matrices',['../group__grp__arraysmatrix.html',1,'']]],
+  ['apriori_20algorithm',['Apriori Algorithm',['../group__grp__assoc__rules.html',1,'']]],
+  ['association_20rules',['Association Rules',['../group__grp__association__rules.html',1,'']]],
+  ['average_20path_20length',['Average Path Length',['../group__grp__graph__avg__path__length.html',1,'']]]
+];
diff --git a/docs/rc/search/all_10.html b/docs/rc/search/all_10.html
new file mode 100644
index 0000000..d1345a1
--- /dev/null
+++ b/docs/rc/search/all_10.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_10.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/all_10.js b/docs/rc/search/all_10.js
new file mode 100644
index 0000000..fd84287
--- /dev/null
+++ b/docs/rc/search/all_10.js
@@ -0,0 +1,36 @@
+var searchData=
+[
+  ['run_20model_20selection',['Run Model Selection',['../group__grp__keras__run__model__selection.html',1,'']]],
+  ['random_20forest',['Random Forest',['../group__grp__random__forest.html',1,'']]],
+  ['regression_20models',['Regression Models',['../group__grp__regml.html',1,'']]],
+  ['robust_20variance',['Robust Variance',['../group__grp__robust.html',1,'']]],
+  ['random_20sampling',['Random Sampling',['../group__grp__sample.html',1,'']]],
+  ['r2_5fscore',['r2_score',['../pred__metrics_8sql__in.html#a2e00cc6c0666528b7ed420a89a3b6413',1,'r2_score(text table_in, text table_out, text prediction_col, text observed_col, text grouping_cols):&#160;pred_metrics.sql_in'],['../pred__metrics_8sql__in.html#aee34887f9fe23e90cd130ec0c2666008',1,'r2_score(text table_in, text table_out, text prediction_col, text observed_col):&#160;pred_metrics.sql_in'],['../pred__metrics_8sql__in.html#a0061e653014344317bd9a0e9f964a3e2',1,'r2_score(text message):&#160;pred_metrics.sql_in'],['../pred__metrics_8sql__in.html#ae858a4cf95d805da71db17d1018d500f',1,'r2_score():&#160;pred_metrics.sql_in']]],
+  ['random_5fforest',['random_forest',['../random__forest_8sql__in.html#a7b9a14c36355554372b1163f7b157b88',1,'random_forest.sql_in']]],
+  ['random_5fforest_2esql_5fin',['random_forest.sql_in',['../random__forest_8sql__in.html',1,'']]],
+  ['rayleigh_5fcdf',['rayleigh_cdf',['../prob_8sql__in.html#aab0ddb8a5348cfa387d777043a3cb6d0',1,'prob.sql_in']]],
+  ['rayleigh_5fpdf',['rayleigh_pdf',['../prob_8sql__in.html#a798541736d9255bdd5c0bd94924d47bc',1,'prob.sql_in']]],
+  ['rayleigh_5fquantile',['rayleigh_quantile',['../prob_8sql__in.html#acd6757acab1683c735e2b57901494336',1,'prob.sql_in']]],
+  ['rb_5fcoxph_5fstep_5ffinal',['rb_coxph_step_final',['../robust__variance__coxph_8sql__in.html#a504aa4de0f53044a065e6b1e8a66a285',1,'robust_variance_coxph.sql_in']]],
+  ['rb_5fcoxph_5fstep_5ftransition',['rb_coxph_step_transition',['../robust__variance__coxph_8sql__in.html#a0bd8046f4e0956b8dc503656d5127467',1,'robust_variance_coxph.sql_in']]],
+  ['rb_5fcoxph_5fstrata_5fstep_5ffinal',['rb_coxph_strata_step_final',['../robust__variance__coxph_8sql__in.html#a9826d93b250c1fb6e06d412181545754',1,'robust_variance_coxph.sql_in']]],
+  ['rb_5fsum_5fstrata',['rb_sum_strata',['../robust__variance__coxph_8sql__in.html#ad8fc6f9cca64b26bc7a12f15abfc6234',1,'robust_variance_coxph.sql_in']]],
+  ['rb_5fsum_5fstrata_5ffinal',['rb_sum_strata_final',['../robust__variance__coxph_8sql__in.html#a9473298f0225d2ad1f6297f360a639d4',1,'robust_variance_coxph.sql_in']]],
+  ['rb_5fsum_5fstrata_5ftransition',['rb_sum_strata_transition',['../robust__variance__coxph_8sql__in.html#a4bf2a610417ee174074b2191fb921256',1,'robust_variance_coxph.sql_in']]],
+  ['relative_5ferror',['relative_error',['../utilities_8sql__in.html#a4d49e00b4dd6059f61ffb9fdc0a696f7',1,'relative_error(float8 approx, float8 value):&#160;utilities.sql_in'],['../utilities_8sql__in.html#a26a54368fbf2460323cacf95db76fd2f',1,'relative_error(float8[] approx, float8[] value):&#160;utilities.sql_in']]],
+  ['robust_2esql_5fin',['robust.sql_in',['../robust_8sql__in.html',1,'']]],
+  ['robust_5flinregr',['robust_linregr',['../robust_8sql__in.html#ade1af85b04294ee404a638aa2bfbf051',1,'robust.sql_in']]],
+  ['robust_5flinregr_5ffinal',['robust_linregr_final',['../robust_8sql__in.html#a458741a15dc6c2ca627f0d1c1d19b7f8',1,'robust.sql_in']]],
+  ['robust_5flinregr_5fmerge_5fstates',['robust_linregr_merge_states',['../robust_8sql__in.html#ad85d9925cbab4b59acd798a7b32671ff',1,'robust.sql_in']]],
+  ['robust_5flinregr_5ftransition',['robust_linregr_transition',['../robust_8sql__in.html#a3f978229f9a2e229276278985d76c438',1,'robust.sql_in']]],
+  ['robust_5flogregr',['robust_logregr',['../robust_8sql__in.html#a6a9290aafa048bcb7cdc13410d5814aa',1,'robust.sql_in']]],
+  ['robust_5flogregr_5fstep_5ffinal',['robust_logregr_step_final',['../robust_8sql__in.html#af8efdd02ad3155411507bf786095a562',1,'robust.sql_in']]],
+  ['robust_5flogregr_5fstep_5fmerge_5fstates',['robust_logregr_step_merge_states',['../robust_8sql__in.html#aa715a6f6885b56d919a243ec4ff07fde',1,'robust.sql_in']]],
+  ['robust_5flogregr_5fstep_5ftransition',['robust_logregr_step_transition',['../robust_8sql__in.html#a840ddaa14013c4445b7a0d55e9489d8d',1,'robust.sql_in']]],
+  ['robust_5fmlogregr',['robust_mlogregr',['../robust_8sql__in.html#a209021ac52461f029353cec7fb900cd4',1,'robust.sql_in']]],
+  ['robust_5fvariance_5fcoxph',['robust_variance_coxph',['../clustered__variance__coxph_8sql__in.html#abaeae5d6cd30db4b06a49d24d714812e',1,'robust_variance_coxph(varchar model_table, varchar output_table, varchar clustervar):&#160;clustered_variance_coxph.sql_in'],['../robust__variance__coxph_8sql__in.html#a9d08b7ab1efa1f58543214a311344741',1,'robust_variance_coxph():&#160;robust_variance_coxph.sql_in'],['../robust__variance__coxph_8sql__in.html#aee46845ee87505ad1d35badb7db4dfd7',1,'robust_variance_coxph(varchar message):&#160;robust_variance_coxph.sql_in'],['../robust__variance__coxph_8sql__in.html#a746cf7ce7d9db6ad50bb399125403a55',1,'robust_variance_coxph(varchar model_table, varchar output_table):&#160;robust_variance_coxph.sql_in']]],
+  ['robust_5fvariance_5fcoxph_2esql_5fin',['robust_variance_coxph.sql_in',['../robust__variance__coxph_8sql__in.html',1,'']]],
+  ['robust_5fvariance_5flinregr',['robust_variance_linregr',['../robust_8sql__in.html#a390473d2fd45e268f0fc13ca971b49b4',1,'robust_variance_linregr(varchar message):&#160;robust.sql_in'],['../robust_8sql__in.html#aec15331f90464a70c222774d78a5caf2',1,'robust_variance_linregr():&#160;robust.sql_in'],['../robust_8sql__in.html#a3f79ad2b83c9749fa85d4f96a12c5af0',1,'robust_variance_linregr(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, varchar grouping_cols, boolean verbose_mode):&#160;robust.sql_in'],['../robust_8sql__in.html#a80b264be3cd0784d49424efee14b78a8',1,'robust_variance_linregr(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, varchar grouping_cols):&#160;robust.sql_in'],['../robust_8sql__in.html#ac513ea8711b165dac3f75e0c5f4a577f',1,'robust_variance_linregr(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname):&#160;robust.sql_in']]],
+  ['robust_5fvariance_5flogregr',['robust_variance_logregr',['../robust_8sql__in.html#abc20ec2c5e74f268e7727c33a4bb9054',1,'robust_variance_logregr(varchar message):&#160;robust.sql_in'],['../robust_8sql__in.html#a0c426835208c1c9b14a9cce168c8bf87',1,'robust_variance_logregr():&#160;robust.sql_in'],['../robust_8sql__in.html#a815cadfeb54447993db9ce2bd2aa709e',1,'robust_variance_logregr(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, varchar grouping_cols, integer max_iter, varchar optimizer, float8 tolerance, boolean verbose_mode):&#160;robust.sql_in'],['../robust_8sql__in.html#a0924470ae6bf5bb3b4b03e41f69d6f7b',1,'robust_variance_logregr(varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable, varchar grouping_cols, integer max_iter, varchar optimizer, float8 tolerance):&#160;robust.sql_in'],['../robust_8sql__in.html#a9a9a8c67a89f4ecf6e783762536239bc',1,'robust_variance_logregr(varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable, varchar grouping_cols, integer max_iter, varchar optimizer):&#160;robust.sql_in'],['../robust_8sql__in.html#aef8d807073c9e5a8c62b6a318b5048a1',1,'robust_variance_logregr(varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable, varchar grouping_cols, integer max_iter):&#160;robust.sql_in'],['../robust_8sql__in.html#a89770eec0b2e47c714a755b5b1697dd9',1,'robust_variance_logregr(varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable, varchar grouping_cols):&#160;robust.sql_in'],['../robust_8sql__in.html#ab73b9a117ba6bd637bac5757ed122d59',1,'robust_variance_logregr(varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable):&#160;robust.sql_in']]],
+  ['robust_5fvariance_5fmlogregr',['robust_variance_mlogregr',['../robust_8sql__in.html#a1f27c072a4ef885a55825f75d12b3bd8',1,'robust_variance_mlogregr(varchar message):&#160;robust.sql_in'],['../robust_8sql__in.html#abd0fb2d66b0dcb4ee6649aaa97bc62f9',1,'robust_variance_mlogregr():&#160;robust.sql_in'],['../robust_8sql__in.html#a8ee938491f0cd0eda60c9fd320740566',1,'robust_variance_mlogregr(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, integer ref_category, varchar grouping_cols, varchar optimizer_params, boolean verbose_mode):&#160;robust.sql_in'],['../robust_8sql__in.html#a2a00a61722a2b92fca37883c795598f6',1,'robust_variance_mlogregr(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, integer ref_category, varchar grouping_cols, varchar optimizer_params):&#160;robust.sql_in'],['../robust_8sql__in.html#afe0d690ca9e2a75f8fd157b548ece204',1,'robust_variance_mlogregr(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, integer ref_category, varchar grouping_cols):&#160;robust.sql_in'],['../robust_8sql__in.html#af3b1cba3e31f65233524d110f5873682',1,'robust_variance_mlogregr(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, integer ref_category):&#160;robust.sql_in'],['../robust_8sql__in.html#a93031a31e4c93d3caa22d963927e75c8',1,'robust_variance_mlogregr(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname):&#160;robust.sql_in'],['../robust_8sql__in.html#a99a3252474c5fbb2982e461325b1838d',1,'robust_variance_mlogregr(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, integer ref_category, varchar grouping_cols, integer max_iter, varchar optimizer, float8 tolerance, boolean verbose_mode):&#160;robust.sql_in'],['../robust_8sql__in.html#a08cd16eaf72e07c3034951863951d7e1',1,'robust_variance_mlogregr(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, integer ref_category, varchar grouping_cols, integer max_iter, varchar optimizer, float8 tolerance):&#160;robust.sql_in'],['../robust_8sql__in.html#abdebb95685f06580eade2941a2edd2af',1,'robust_variance_mlogregr(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, integer ref_category, varchar grouping_cols, integer max_iter, varchar optimizer):&#160;robust.sql_in'],['../robust_8sql__in.html#a4ebbb7afe6193dfa77116a5c3ae9b7dc',1,'robust_variance_mlogregr(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, integer ref_category, varchar grouping_cols, integer max_iter):&#160;robust.sql_in']]]
+];
diff --git a/docs/rc/search/all_11.html b/docs/rc/search/all_11.html
new file mode 100644
index 0000000..2be8b71
--- /dev/null
+++ b/docs/rc/search/all_11.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_11.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/all_11.js b/docs/rc/search/all_11.js
new file mode 100644
index 0000000..4d43061
--- /dev/null
+++ b/docs/rc/search/all_11.js
@@ -0,0 +1,124 @@
+var searchData=
+[
+  ['setup_20model_20selection',['Setup Model Selection',['../group__grp__keras__setup__model__selection.html',1,'']]],
+  ['sampling',['Sampling',['../group__grp__sampling.html',1,'']]],
+  ['sessionize',['Sessionize',['../group__grp__sessionize.html',1,'']]],
+  ['sparse_20linear_20systems',['Sparse Linear Systems',['../group__grp__sparse__linear__solver.html',1,'']]],
+  ['single_20source_20shortest_20path',['Single Source Shortest Path',['../group__grp__sssp.html',1,'']]],
+  ['statistics',['Statistics',['../group__grp__stats.html',1,'']]],
+  ['stemming',['Stemming',['../group__grp__stemmer.html',1,'']]],
+  ['stratified_20sampling',['Stratified Sampling',['../group__grp__strs.html',1,'']]],
+  ['summary',['Summary',['../group__grp__summary.html',1,'']]],
+  ['supervised_20learning',['Supervised Learning',['../group__grp__super.html',1,'']]],
+  ['singular_20value_20decomposition',['Singular Value Decomposition',['../group__grp__svd.html',1,'']]],
+  ['sparse_20vectors',['Sparse Vectors',['../group__grp__svec.html',1,'']]],
+  ['support_20vector_20machines',['Support Vector Machines',['../group__grp__svm.html',1,'']]],
+  ['sample_2esql_5fin',['sample.sql_in',['../sample_8sql__in.html',1,'']]],
+  ['sessionize',['sessionize',['../sessionize_8sql__in.html#a288509ef965178e3841153997c63b0b2',1,'sessionize(varchar source_table, varchar output_table, varchar partition_expr, varchar time_stamp, interval max_time, varchar output_cols, boolean create_view):&#160;sessionize.sql_in'],['../sessionize_8sql__in.html#afb8a7e6fed41778e20d297051f5184cd',1,'sessionize(varchar source_table, varchar output_table, varchar partition_expr, varchar time_stamp, interval max_time, varchar output_cols):&#160;sessionize.sql_in'],['../sessionize_8sql__in.html#a73adab9955f25ef5b3bec39376cea014',1,'sessionize(varchar source_table, varchar output_table, varchar partition_expr, varchar time_stamp, interval max_time):&#160;sessionize.sql_in'],['../sessionize_8sql__in.html#acbb16f241e71c43e7f972d17e1619fa7',1,'sessionize(text message):&#160;sessionize.sql_in'],['../sessionize_8sql__in.html#a61a22075a6e70172e568756381798c1d',1,'sessionize():&#160;sessionize.sql_in']]],
+  ['sessionize_2esql_5fin',['sessionize.sql_in',['../sessionize_8sql__in.html',1,'']]],
+  ['sketch_2esql_5fin',['sketch.sql_in',['../sketch_8sql__in.html',1,'']]],
+  ['sparse_5fdirect_5flinear_5fsystem',['sparse_direct_linear_system',['../sparse__linear__systems_8sql__in.html#a8d22e4088dedd57a931b465a73a0357a',1,'sparse_linear_systems.sql_in']]],
+  ['sparse_5fdirect_5flinear_5fsystem_5ffinal',['sparse_direct_linear_system_final',['../sparse__linear__systems_8sql__in.html#a37d42899e8ec22d8642aa2c943689d19',1,'sparse_linear_systems.sql_in']]],
+  ['sparse_5fdirect_5flinear_5fsystem_5fmerge_5fstates',['sparse_direct_linear_system_merge_states',['../sparse__linear__systems_8sql__in.html#a81014be318749e53d8c3fd58eece9600',1,'sparse_linear_systems.sql_in']]],
+  ['sparse_5fdirect_5flinear_5fsystem_5ftransition',['sparse_direct_linear_system_transition',['../sparse__linear__systems_8sql__in.html#a8175311c8e181a3ac73d9cc87814bbb0',1,'sparse_linear_systems.sql_in']]],
+  ['sparse_5finmem_5fiterative_5flinear_5fsystem',['sparse_inmem_iterative_linear_system',['../sparse__linear__systems_8sql__in.html#ace39ff8e846754e3e0709bfbbbee9a60',1,'sparse_linear_systems.sql_in']]],
+  ['sparse_5finmem_5fiterative_5flinear_5fsystem_5ffinal',['sparse_inmem_iterative_linear_system_final',['../sparse__linear__systems_8sql__in.html#a5ff2f1afd945580fc9cb9bedba84695b',1,'sparse_linear_systems.sql_in']]],
+  ['sparse_5finmem_5fiterative_5flinear_5fsystem_5fmerge_5fstates',['sparse_inmem_iterative_linear_system_merge_states',['../sparse__linear__systems_8sql__in.html#a3daa8daf05cda974b4137ce07c694e2e',1,'sparse_linear_systems.sql_in']]],
+  ['sparse_5finmem_5fiterative_5flinear_5fsystem_5ftransition',['sparse_inmem_iterative_linear_system_transition',['../sparse__linear__systems_8sql__in.html#a5463eaef5dc5e4040acd56a1035ecc91',1,'sparse_linear_systems.sql_in']]],
+  ['sparse_5flinear_5fsystems_2esql_5fin',['sparse_linear_systems.sql_in',['../sparse__linear__systems_8sql__in.html',1,'']]],
+  ['squared_5fdist_5fnorm2',['squared_dist_norm2',['../linalg_8sql__in.html#a00a08e69f27524f2096032214e15b668',1,'linalg.sql_in']]],
+  ['sssp_2esql_5fin',['sssp.sql_in',['../sssp_8sql__in.html',1,'']]],
+  ['stem_5ftoken',['stem_token',['../porter__stemmer_8sql__in.html#aca5bc24a9a8f5c33470b9f0bf0b3c515',1,'stem_token(text token):&#160;porter_stemmer.sql_in'],['../porter__stemmer_8sql__in.html#ae074993f351b069eaa7831e8afb979ae',1,'stem_token():&#160;porter_stemmer.sql_in']]],
+  ['stem_5ftoken_5farr',['stem_token_arr',['../porter__stemmer_8sql__in.html#a1ac3a2fd645ddf807b36a1328134a4ea',1,'stem_token_arr(text[] token_arr):&#160;porter_stemmer.sql_in'],['../porter__stemmer_8sql__in.html#a23ebfbea896802dd4c489773819f6cd8',1,'stem_token_arr():&#160;porter_stemmer.sql_in']]],
+  ['stratified_5fsample',['stratified_sample',['../stratified__sample_8sql__in.html#a44753db6b486f7e020740ead271a2420',1,'stratified_sample(text source_table, text output_table, float8 proportion, text grouping_cols, text target_cols, boolean with_replacement):&#160;stratified_sample.sql_in'],['../stratified__sample_8sql__in.html#a9107baf0d8ea245273e06ae5c41d16aa',1,'stratified_sample(text source_table, text output_table, float8 proportion, text grouping_cols, text target_cols):&#160;stratified_sample.sql_in'],['../stratified__sample_8sql__in.html#a5a09f753977051e3eb337f39680c3730',1,'stratified_sample(text source_table, text output_table, float8 proportion, text grouping_cols):&#160;stratified_sample.sql_in'],['../stratified__sample_8sql__in.html#aadb9952a02cb0977b2fcead3445adde2',1,'stratified_sample(text source_table, text output_table, float8 proportion):&#160;stratified_sample.sql_in'],['../stratified__sample_8sql__in.html#a489042579fb1e9b138a309584b57ca36',1,'stratified_sample(varchar message):&#160;stratified_sample.sql_in'],['../stratified__sample_8sql__in.html#aa89c8ef2dbb59b4c84657b75572bf7ff',1,'stratified_sample():&#160;stratified_sample.sql_in']]],
+  ['stratified_5fsample_2esql_5fin',['stratified_sample.sql_in',['../stratified__sample_8sql__in.html',1,'']]],
+  ['students_5ft_5fcdf',['students_t_cdf',['../prob_8sql__in.html#a5322531131074c23a2dbf067ee504ef7',1,'prob.sql_in']]],
+  ['students_5ft_5fpdf',['students_t_pdf',['../prob_8sql__in.html#a8815c21670fff9d31946553a84b845b1',1,'prob.sql_in']]],
+  ['students_5ft_5fquantile',['students_t_quantile',['../prob_8sql__in.html#a7d64add02af21a95d73502b2dd466a75',1,'prob.sql_in']]],
+  ['sum',['sum',['../array__ops_8sql__in.html#a26e8508a2bae10a6574cec697a270eea',1,'array_ops.sql_in']]],
+  ['summary',['summary',['../summary_8sql__in.html#a4be51e88a1df45191a1692b95429af36',1,'summary(text source_table, text output_table, text target_cols, text grouping_cols, boolean get_distinct, boolean get_quartiles, float8[] ntile_array, integer how_many_mfv, boolean get_estimates, integer n_cols_per_run):&#160;summary.sql_in'],['../summary_8sql__in.html#a14ff66aaa0248c5e2741dfaf2e360881',1,'summary(text source_table, text output_table, text target_cols, text grouping_cols, boolean get_distinct, boolean get_quartiles, float8[] ntile_array, integer how_many_mfv, boolean get_estimates):&#160;summary.sql_in'],['../summary_8sql__in.html#ab14b423b19a17fe7bbc6d522dda13402',1,'summary(text source_table, text output_table, text target_cols, text grouping_cols, boolean get_distinct, boolean get_quartiles, float8[] ntile_array, integer how_many_mfv):&#160;summary.sql_in'],['../summary_8sql__in.html#ae39edc1569d25b212ca5ebc06703c6d6',1,'summary(text source_table, text output_table, text target_cols, text grouping_cols, boolean get_distinct, boolean get_quartiles, float8[] ntile_array):&#160;summary.sql_in'],['../summary_8sql__in.html#a44d256be00bd0f79f8bea359fa32de32',1,'summary(text source_table, text output_table, text target_cols, text grouping_cols, boolean get_distinct, boolean get_quartiles):&#160;summary.sql_in'],['../summary_8sql__in.html#a7cfc420930c03f5b50421aee757d02bb',1,'summary(text source_table, text output_table, text target_cols, text grouping_cols, boolean get_distinct):&#160;summary.sql_in'],['../summary_8sql__in.html#ad562be9b174fa1c5e0384005f5478009',1,'summary(text source_table, text output_table, text target_cols, text grouping_cols):&#160;summary.sql_in'],['../summary_8sql__in.html#a02b92e4f8962278c063738ecae488d53',1,'summary(text source_table, text output_table, text target_cols):&#160;summary.sql_in'],['../summary_8sql__in.html#ab56b9ffdee9c36566e0079ca5f2b19fd',1,'summary(text source_table, text output_table):&#160;summary.sql_in'],['../summary_8sql__in.html#aad245ee0091df4c4955dbbaff5c9bd3f',1,'summary(text input_message):&#160;summary.sql_in'],['../summary_8sql__in.html#aeed4f7ad586b0ea344bd623d8d48e2bb',1,'summary():&#160;summary.sql_in']]],
+  ['summary_2esql_5fin',['summary.sql_in',['../summary_8sql__in.html',1,'']]],
+  ['svd',['svd',['../svd_8sql__in.html#a8dbab74f5bde863a63431a6ec6f66a61',1,'svd(text source_table, text output_table_prefix, text row_id, integer k, integer n_iterations, text result_summary_table):&#160;svd.sql_in'],['../svd_8sql__in.html#a3222ad5181b1b7dde8e89ae00c663177',1,'svd(text source_table, text output_table_prefix, text row_id, integer k):&#160;svd.sql_in'],['../svd_8sql__in.html#a9deeee6cc15d9f9713f0c93665923622',1,'svd(text source_table, text output_table_prefix, text row_id, integer k, integer n_iterations):&#160;svd.sql_in'],['../svd_8sql__in.html#ad020de39296f7e8e121ba2a173700fa6',1,'svd(text input_message):&#160;svd.sql_in'],['../svd_8sql__in.html#a33268c776f0e4f86f7cefc52290b552a',1,'svd():&#160;svd.sql_in']]],
+  ['svd_2esql_5fin',['svd.sql_in',['../svd_8sql__in.html',1,'']]],
+  ['svd_5fblock',['svd_block',['../svd_8sql__in.html#a96fb5620eed9c936b5bbfe24d7e37ad6',1,'svd_block(text source_table, text output_table_prefix, integer k, integer n_iterations, text result_summary_table):&#160;svd.sql_in'],['../svd_8sql__in.html#a2927cf2c1a1addd00f838718e8b1fea1',1,'svd_block(text source_table, text output_table_prefix, integer k, integer n_iterations):&#160;svd.sql_in'],['../svd_8sql__in.html#a2ed4bfd5bba7b959deaccb3471e624ed',1,'svd_block(text source_table, text output_table_prefix, integer k):&#160;svd.sql_in']]],
+  ['svd_5fsparse',['svd_sparse',['../svd_8sql__in.html#a511f83e3eba19f6f41f8e3f7122ddb3a',1,'svd_sparse(text source_table, text output_table_prefix, text row_id, text col_id, text val_id, integer row_dim, integer col_dim, integer k, integer n_iterations, text result_summary_table):&#160;svd.sql_in'],['../svd_8sql__in.html#aaad7f45ad283fcffa5b5d9938432a038',1,'svd_sparse(text source_table, text output_table_prefix, text row_id, text col_id, text val_id, integer row_dim, integer col_dim, integer k):&#160;svd.sql_in'],['../svd_8sql__in.html#a20f535608417d4ff73b6e029b785ddef',1,'svd_sparse(text source_table, text output_table_prefix, text row_id, text col_id, text val_id, integer row_dim, integer col_dim, integer k, integer n_iterations):&#160;svd.sql_in']]],
+  ['svd_5fsparse_5fnative',['svd_sparse_native',['../svd_8sql__in.html#a0225b28fd4b71cf6e7072c034f3296c6',1,'svd_sparse_native(text source_table, text output_table_prefix, text row_id, text col_id, text val_id, integer row_dim, integer col_dim, integer k, integer n_iterations, text result_summary_table):&#160;svd.sql_in'],['../svd_8sql__in.html#a8e0f90441d3a2335aef8cc1403577bb9',1,'svd_sparse_native(text source_table, text output_table_prefix, text row_id, text col_id, text val_id, integer row_dim, integer col_dim, integer k):&#160;svd.sql_in'],['../svd_8sql__in.html#ad3a3a3d97f9d7bc96578be4aa6b54d1c',1,'svd_sparse_native(text source_table, text output_table_prefix, text row_id, text col_id, text val_id, integer row_dim, integer col_dim, integer k, integer n_iterations):&#160;svd.sql_in']]],
+  ['svec_2esql_5fin',['svec.sql_in',['../svec_8sql__in.html',1,'']]],
+  ['svec_5fappend',['svec_append',['../svec__util_8sql__in.html#a3950b17b103ceeddca520a0f0d097ddc',1,'svec_util.sql_in']]],
+  ['svec_5fcast_5ffloat4',['svec_cast_float4',['../svec_8sql__in.html#a1f1025124d5423cc1505991414f17582',1,'svec.sql_in']]],
+  ['svec_5fcast_5ffloat8',['svec_cast_float8',['../svec_8sql__in.html#af42e4b15879949032a68139c59443aac',1,'svec.sql_in']]],
+  ['svec_5fcast_5ffloat8arr',['svec_cast_float8arr',['../svec_8sql__in.html#a96025250e64f049a053c5696b3b96e02',1,'svec.sql_in']]],
+  ['svec_5fcast_5fint2',['svec_cast_int2',['../svec_8sql__in.html#af69458bf9b2906ca471d027966b13e6f',1,'svec.sql_in']]],
+  ['svec_5fcast_5fint4',['svec_cast_int4',['../svec_8sql__in.html#abc01ac6b36ea9d689d338fd72abbd540',1,'svec.sql_in']]],
+  ['svec_5fcast_5fint8',['svec_cast_int8',['../svec_8sql__in.html#a9ea167c01fb2999dc5aaf5e8e21f5e8f',1,'svec.sql_in']]],
+  ['svec_5fcast_5fnumeric',['svec_cast_numeric',['../svec_8sql__in.html#a50de0278ff7ceeff33a2ea4ca5fdf1a0',1,'svec.sql_in']]],
+  ['svec_5fcast_5fpositions_5ffloat8arr',['svec_cast_positions_float8arr',['../svec_8sql__in.html#a0ee423729fbca5abd46c86fa81d51f23',1,'svec.sql_in']]],
+  ['svec_5fchange',['svec_change',['../svec__util_8sql__in.html#a59407764a1cbf1937da39cf39a2f447c',1,'svec_util.sql_in']]],
+  ['svec_5fcmp',['svec_cmp',['../svec_8sql__in.html#a813762d8bd2a7fda083880e5bd8c355b',1,'svec.sql_in']]],
+  ['svec_5fconcat',['svec_concat',['../svec_8sql__in.html#a24f184bef083fd9068c28fc94dad8054',1,'svec.sql_in']]],
+  ['svec_5fconcat_5freplicate',['svec_concat_replicate',['../svec_8sql__in.html#a34cb5f83e0c010aacc719b8b078bfeb9',1,'svec.sql_in']]],
+  ['svec_5fcontains',['svec_contains',['../svec__util_8sql__in.html#afdef1c6bf65ffc0e838cf10f33ae5557',1,'svec_util.sql_in']]],
+  ['svec_5fcount',['svec_count',['../svec__util_8sql__in.html#a6a21e25d3f50053c888a0bd126f831f0',1,'svec_util.sql_in']]],
+  ['svec_5fcount_5fnonzero',['svec_count_nonzero',['../svec__util_8sql__in.html#abebdcbe45de346aff874db008e842e65',1,'svec_util.sql_in']]],
+  ['svec_5fdimension',['svec_dimension',['../svec__util_8sql__in.html#ab8d1acbe4e8551755fef217b506bed8a',1,'svec_util.sql_in']]],
+  ['svec_5fdiv',['svec_div',['../svec_8sql__in.html#a78a38512c860085e31f6153b8118cbe9',1,'svec.sql_in']]],
+  ['svec_5fdiv_5ffloat8arr',['svec_div_float8arr',['../svec_8sql__in.html#a211cf37584f54087dabc1fac14ed12dd',1,'svec.sql_in']]],
+  ['svec_5fdmax',['svec_dmax',['../svec__util_8sql__in.html#aa05abd8cb32253c07c0f2224861256a5',1,'svec_util.sql_in']]],
+  ['svec_5fdmin',['svec_dmin',['../svec__util_8sql__in.html#ad1011a13839994adbb1eb3e643c9074d',1,'svec_util.sql_in']]],
+  ['svec_5fdot',['svec_dot',['../svec_8sql__in.html#a4eeaf69c84d7ce0e46adc93e38b2b4f3',1,'svec_dot(svec, svec):&#160;svec.sql_in'],['../svec_8sql__in.html#af870f06fd4c51f585515b6306f64fe3b',1,'svec_dot(float8[], float8[]):&#160;svec.sql_in'],['../svec_8sql__in.html#a93f4a0901681fc11e847615a4aba0255',1,'svec_dot(svec, float8[]):&#160;svec.sql_in'],['../svec_8sql__in.html#a47b111663b39ec8646891edec8ab3925',1,'svec_dot(float8[], svec):&#160;svec.sql_in']]],
+  ['svec_5felsum',['svec_elsum',['../svec__util_8sql__in.html#a00a7b3260b9fde9b55061e6bf58a028a',1,'svec_elsum(svec):&#160;svec_util.sql_in'],['../svec__util_8sql__in.html#afb2076f09f00e512a62c06d4d33e5922',1,'svec_elsum(float8[]):&#160;svec_util.sql_in']]],
+  ['svec_5feq',['svec_eq',['../svec_8sql__in.html#adceeff7e2f2e43b3e17219bca5d4fea0',1,'svec.sql_in']]],
+  ['svec_5feq_5fnon_5fzero',['svec_eq_non_zero',['../svec__util_8sql__in.html#ab3a1cccd709379973f100e5eb35559d2',1,'svec_util.sql_in']]],
+  ['svec_5ffrom_5fstring',['svec_from_string',['../svec__util_8sql__in.html#a1f5e8911574cf30cc979478040bd3262',1,'svec_util.sql_in']]],
+  ['svec_5fge',['svec_ge',['../svec_8sql__in.html#ad08b0cadbcf50ff4685228f917cafd1f',1,'svec.sql_in']]],
+  ['svec_5fgt',['svec_gt',['../svec_8sql__in.html#a3e5d57b7a4473904e4d053884468e540',1,'svec.sql_in']]],
+  ['svec_5fhash',['svec_hash',['../svec__util_8sql__in.html#a0bfa8f8d083282bc9e8caf6f03bb5251',1,'svec_util.sql_in']]],
+  ['svec_5fin',['svec_in',['../svec_8sql__in.html#abe896192db26c02d5c517a5ccf2144f1',1,'svec.sql_in']]],
+  ['svec_5fl1norm',['svec_l1norm',['../svec__util_8sql__in.html#ae60f7aaa5710c765d08b6c3906e0c9f0',1,'svec_l1norm(svec):&#160;svec_util.sql_in'],['../svec__util_8sql__in.html#ae5ac6f098519439b76e03091022c9508',1,'svec_l1norm(float8[]):&#160;svec_util.sql_in']]],
+  ['svec_5fl2_5fcmp',['svec_l2_cmp',['../svec_8sql__in.html#a8f72c8cf6d39f08d939f23cf1338a3c6',1,'svec.sql_in']]],
+  ['svec_5fl2_5feq',['svec_l2_eq',['../svec_8sql__in.html#a9268d26c54c4b2905eb7938df95af8c0',1,'svec.sql_in']]],
+  ['svec_5fl2_5fge',['svec_l2_ge',['../svec_8sql__in.html#ac22b72fbae2a8f2b35b1c571d9f54dad',1,'svec.sql_in']]],
+  ['svec_5fl2_5fgt',['svec_l2_gt',['../svec_8sql__in.html#ab2414d0d78286884cd199cf44c1d17b9',1,'svec.sql_in']]],
+  ['svec_5fl2_5fle',['svec_l2_le',['../svec_8sql__in.html#a4045437bce8b9a9bdb0eb3115c97ca99',1,'svec.sql_in']]],
+  ['svec_5fl2_5flt',['svec_l2_lt',['../svec_8sql__in.html#ab53b85cb3412c9172bf0ee04f6856c69',1,'svec.sql_in']]],
+  ['svec_5fl2_5fne',['svec_l2_ne',['../svec_8sql__in.html#af35c08aadf164fa3bbc8678765bca643',1,'svec.sql_in']]],
+  ['svec_5fl2norm',['svec_l2norm',['../svec__util_8sql__in.html#a475f0f3e4602e8278b582e099fce2487',1,'svec_l2norm(svec):&#160;svec_util.sql_in'],['../svec__util_8sql__in.html#a536fbd3c596af5ea8ddfa2a3ca3e141c',1,'svec_l2norm(float8[]):&#160;svec_util.sql_in']]],
+  ['svec_5flapply',['svec_lapply',['../svec__util_8sql__in.html#a0d94c44dde95a00e3d802dee6d7c01eb',1,'svec_util.sql_in']]],
+  ['svec_5fle',['svec_le',['../svec_8sql__in.html#aa6f5715df728db0783b5dcb8db82a2a2',1,'svec.sql_in']]],
+  ['svec_5flog',['svec_log',['../svec__util_8sql__in.html#aab641f9db3deed5bbfa7e050c531e9c1',1,'svec_util.sql_in']]],
+  ['svec_5flt',['svec_lt',['../svec_8sql__in.html#ad7f05a6ce6efc51517bab6ccdb79ee23',1,'svec.sql_in']]],
+  ['svec_5fmean_5ffinal',['svec_mean_final',['../svec__util_8sql__in.html#ac3fc45511b50b5d054bf7bbeb952b98d',1,'svec_util.sql_in']]],
+  ['svec_5fmean_5fprefunc',['svec_mean_prefunc',['../svec__util_8sql__in.html#ab161647a1498c85762779966790eab71',1,'svec_util.sql_in']]],
+  ['svec_5fmean_5ftransition',['svec_mean_transition',['../svec__util_8sql__in.html#afcf2f75cd00ab0ba269caf79dcfcc62c',1,'svec_util.sql_in']]],
+  ['svec_5fmedian',['svec_median',['../svec__util_8sql__in.html#a2284a118fe03465203ecea8c34acefa5',1,'svec_median(float8[]):&#160;svec_util.sql_in'],['../svec__util_8sql__in.html#af9950e9ce4770738f2ce368d8124f142',1,'svec_median(svec):&#160;svec_util.sql_in']]],
+  ['svec_5fmedian_5finmemory',['svec_median_inmemory',['../svec__util_8sql__in.html#a93400e39ecce2f11b9ceb08403420a43',1,'svec_util.sql_in']]],
+  ['svec_5fminus',['svec_minus',['../svec_8sql__in.html#a170890a165bf662d343339ffc2a187cf',1,'svec.sql_in']]],
+  ['svec_5fminus_5ffloat8arr',['svec_minus_float8arr',['../svec_8sql__in.html#adf39975fbbd8a39629569c622db33ab9',1,'svec.sql_in']]],
+  ['svec_5fmult',['svec_mult',['../svec_8sql__in.html#a27f0629942dba2e395b005c728d53ac3',1,'svec.sql_in']]],
+  ['svec_5fmult_5ffloat8arr',['svec_mult_float8arr',['../svec_8sql__in.html#a6e6916baaf0a7ae0079424ce0565c8b4',1,'svec.sql_in']]],
+  ['svec_5fne',['svec_ne',['../svec_8sql__in.html#a80d9692f67e7cb482c4bda6dbaacd82b',1,'svec.sql_in']]],
+  ['svec_5fnonbase_5fpositions',['svec_nonbase_positions',['../svec__util_8sql__in.html#a5bc053a080fb38601ad91045dc3ffe74',1,'svec_util.sql_in']]],
+  ['svec_5fnonbase_5fvalues',['svec_nonbase_values',['../svec__util_8sql__in.html#a076dcbc0a278bb3b5161b0db2ad8fa44',1,'svec_util.sql_in']]],
+  ['svec_5fout',['svec_out',['../svec_8sql__in.html#a3db4af36acd318030ae57d2bfd19387a',1,'svec.sql_in']]],
+  ['svec_5fpivot',['svec_pivot',['../svec__util_8sql__in.html#a929bde3bc91b67300d9d370b6a1495f1',1,'svec_util.sql_in']]],
+  ['svec_5fplus',['svec_plus',['../svec_8sql__in.html#a612d8920c61e6fdf18dd4e3e9c69c979',1,'svec.sql_in']]],
+  ['svec_5fplus_5ffloat8arr',['svec_plus_float8arr',['../svec_8sql__in.html#aaeb54c952836c83c7f21a1c62a77955f',1,'svec.sql_in']]],
+  ['svec_5fpow',['svec_pow',['../svec_8sql__in.html#ab5166565f3482768db33ee677acc3d96',1,'svec.sql_in']]],
+  ['svec_5fproj',['svec_proj',['../svec__util_8sql__in.html#a8787222aec691f94d9808d1369aa401c',1,'svec_util.sql_in']]],
+  ['svec_5frecv',['svec_recv',['../svec_8sql__in.html#a585ea8bcb1d0647ef1295187b87405b2',1,'svec.sql_in']]],
+  ['svec_5freturn_5farray',['svec_return_array',['../svec_8sql__in.html#a7decda276d7ff1e9340dd44e0e7419c0',1,'svec.sql_in']]],
+  ['svec_5freverse',['svec_reverse',['../svec__util_8sql__in.html#a4a221435ca91b6fa45114e689ee96010',1,'svec_util.sql_in']]],
+  ['svec_5fsend',['svec_send',['../svec_8sql__in.html#a617557435170136b2781070c0a268b83',1,'svec.sql_in']]],
+  ['svec_5fsfv',['svec_sfv',['../svec__util_8sql__in.html#a375acd521ed9cb05f63b3696dcc10bf4',1,'svec_util.sql_in']]],
+  ['svec_5fsort',['svec_sort',['../svec__util_8sql__in.html#a91c23a7ce58932f48f5ab3579ea0309e',1,'svec_util.sql_in']]],
+  ['svec_5fsubvec',['svec_subvec',['../svec__util_8sql__in.html#a5cb3446de5fc117befe88ccb1ebb0e4e',1,'svec_util.sql_in']]],
+  ['svec_5fsum',['svec_sum',['../svec__util_8sql__in.html#af1ce6cdd7244ac0832d15c65b7ccc782',1,'svec_util.sql_in']]],
+  ['svec_5fto_5fstring',['svec_to_string',['../svec__util_8sql__in.html#a1de746ebd23530e72ba4f031ac41d155',1,'svec_util.sql_in']]],
+  ['svec_5funnest',['svec_unnest',['../svec__util_8sql__in.html#a87b45a983da4066fa7f35b17ccecf699',1,'svec_util.sql_in']]],
+  ['svec_5futil_2esql_5fin',['svec_util.sql_in',['../svec__util_8sql__in.html',1,'']]],
+  ['svm_2esql_5fin',['svm.sql_in',['../svm_8sql__in.html',1,'']]],
+  ['svm_5fclassification',['svm_classification',['../svm_8sql__in.html#a8da862a62df18a51dc88eba9c60b5638',1,'svm_classification(text source_table, text model_table, text dependent_varname, text independent_varname, text kernel_func, text kernel_params, text grouping_col, text params, bool verbose):&#160;svm.sql_in'],['../svm_8sql__in.html#a135884f3e412fde1bee4126446e9299e',1,'svm_classification(text source_table, text model_table, text dependent_varname, text independent_varname, text kernel_func, text kernel_params, text grouping_col, text params):&#160;svm.sql_in'],['../svm_8sql__in.html#ab1d29da8dde1eb9da5e9fac967514239',1,'svm_classification(text source_table, text model_table, text dependent_varname, text independent_varname, text kernel_func, text kernel_params, text grouping_col):&#160;svm.sql_in'],['../svm_8sql__in.html#a82aac4fbefbe918c16eb091e4f8f385f',1,'svm_classification(text source_table, text model_table, text dependent_varname, text independent_varname, text kernel_func, text kernel_params):&#160;svm.sql_in'],['../svm_8sql__in.html#abe8f5d1c4158bc8c38e2d74192c25a4b',1,'svm_classification(text source_table, text model_table, text dependent_varname, text independent_varname, text kernel_func):&#160;svm.sql_in'],['../svm_8sql__in.html#a57cc7e97be2a99498c581a59670e4a25',1,'svm_classification(text source_table, text model_table, text dependent_varname, text independent_varname):&#160;svm.sql_in'],['../svm_8sql__in.html#ae840bfcdc6cca8803dda06da8f05eda9',1,'svm_classification(text message):&#160;svm.sql_in'],['../svm_8sql__in.html#a69c5c09545536511f6273a9609428697',1,'svm_classification():&#160;svm.sql_in']]],
+  ['svm_5fone_5fclass',['svm_one_class',['../svm_8sql__in.html#a36f4846dfb1ea586ee5a742523cd6a09',1,'svm_one_class(text source_table, text model_table, text independent_varname, text kernel_func, text kernel_params, text grouping_col, text params, bool verbose):&#160;svm.sql_in'],['../svm_8sql__in.html#a5ce23d32a839eafc7097346dbaa05ee5',1,'svm_one_class(text source_table, text model_table, text independent_varname, text kernel_func, text kernel_params, text grouping_col, text params):&#160;svm.sql_in'],['../svm_8sql__in.html#adf2b25ab957e0d6f075a8d8db8a1d278',1,'svm_one_class(text source_table, text model_table, text independent_varname, text kernel_func, text kernel_params, text grouping_col):&#160;svm.sql_in'],['../svm_8sql__in.html#ac2507a4fc1e34e85c7865ceb7227c180',1,'svm_one_class(text source_table, text model_table, text independent_varname, text kernel_func, text kernel_params):&#160;svm.sql_in'],['../svm_8sql__in.html#a2eb45ccfefacf4a16054a6791e1acc5c',1,'svm_one_class(text source_table, text model_table, text independent_varname, text kernel_func):&#160;svm.sql_in'],['../svm_8sql__in.html#a3d3162c804ea9fd3ba205a7904ee07f7',1,'svm_one_class(text source_table, text model_table, text independent_varname):&#160;svm.sql_in'],['../svm_8sql__in.html#a4f208edc596f2deeb42e5e68bd379e95',1,'svm_one_class(text message):&#160;svm.sql_in'],['../svm_8sql__in.html#a239b651079546f081bd822dbb7da1f4c',1,'svm_one_class():&#160;svm.sql_in']]],
+  ['svm_5fpredict',['svm_predict',['../svm_8sql__in.html#a0a8bc159d9441835dcebd236a0b236fe',1,'svm_predict(text model_table, text new_data_table, text id_col_name, text output_table):&#160;svm.sql_in'],['../svm_8sql__in.html#a994c350eaa174f953d093ac94c8936e6',1,'svm_predict(text message):&#160;svm.sql_in'],['../svm_8sql__in.html#a8626e93e474e17cfe2d209170bd4203f',1,'svm_predict():&#160;svm.sql_in']]],
+  ['svm_5fregression',['svm_regression',['../svm_8sql__in.html#a1bf61091e404ae3eb4a14f034ec96783',1,'svm_regression(text source_table, text model_table, text dependent_varname, text independent_varname, text kernel_func, text kernel_params, text grouping_col, text params, bool verbose):&#160;svm.sql_in'],['../svm_8sql__in.html#ac4bfd11c7673467617815da11331c1d4',1,'svm_regression(text source_table, text model_table, text dependent_varname, text independent_varname, text kernel_func, text kernel_params, text grouping_col, text params):&#160;svm.sql_in'],['../svm_8sql__in.html#abeb319fa8b22a71614acf35cd0ec6ef4',1,'svm_regression(text source_table, text model_table, text dependent_varname, text independent_varname, text kernel_func, text kernel_params, text grouping_col):&#160;svm.sql_in'],['../svm_8sql__in.html#a091894b3be12694418f3ecb7553202cd',1,'svm_regression(text source_table, text model_table, text dependent_varname, text independent_varname, text kernel_func, text kernel_params):&#160;svm.sql_in'],['../svm_8sql__in.html#af6571d3807af4c2de1074cc8ad354d67',1,'svm_regression(text source_table, text model_table, text dependent_varname, text independent_varname, text kernel_func):&#160;svm.sql_in'],['../svm_8sql__in.html#a9c897d813c28d87556894199901714f4',1,'svm_regression(text source_table, text model_table, text dependent_varname, text independent_varname):&#160;svm.sql_in'],['../svm_8sql__in.html#ab52895e0f12df350cef58f9708d98afe',1,'svm_regression(text message):&#160;svm.sql_in'],['../svm_8sql__in.html#ad7485d9eed1d59d0a52e9036df7cbd9d',1,'svm_regression():&#160;svm.sql_in']]]
+];
diff --git a/docs/rc/search/all_12.html b/docs/rc/search/all_12.html
new file mode 100644
index 0000000..13c5263
--- /dev/null
+++ b/docs/rc/search/all_12.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_12.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/all_12.js b/docs/rc/search/all_12.js
new file mode 100644
index 0000000..4ce6345
--- /dev/null
+++ b/docs/rc/search/all_12.js
@@ -0,0 +1,32 @@
+var searchData=
+[
+  ['term_20frequency',['Term Frequency',['../group__grp__text__utilities.html',1,'']]],
+  ['topic_20modelling',['Topic Modelling',['../group__grp__topic__modelling.html',1,'']]],
+  ['train_2dtest_20split',['Train-Test Split',['../group__grp__train__test__split.html',1,'']]],
+  ['tree_20methods',['Tree Methods',['../group__grp__tree.html',1,'']]],
+  ['time_20series_20analysis',['Time Series Analysis',['../group__grp__tsa.html',1,'']]],
+  ['t_5ftest_5fmerge_5fstates',['t_test_merge_states',['../hypothesis__tests_8sql__in.html#ac97c5f5015790b59645d69858e127645',1,'hypothesis_tests.sql_in']]],
+  ['t_5ftest_5fone',['t_test_one',['../hypothesis__tests_8sql__in.html#a14fdcfa276fd1a7ea2e3adb41ebe7db4',1,'hypothesis_tests.sql_in']]],
+  ['t_5ftest_5fone_5ffinal',['t_test_one_final',['../hypothesis__tests_8sql__in.html#ad570d893565618bcbbcbb01b3bb0a9b9',1,'hypothesis_tests.sql_in']]],
+  ['t_5ftest_5fone_5ftransition',['t_test_one_transition',['../hypothesis__tests_8sql__in.html#a3bd1bcc335a2da73d01b40e06f7d2eea',1,'hypothesis_tests.sql_in']]],
+  ['t_5ftest_5ftwo_5fpooled',['t_test_two_pooled',['../hypothesis__tests_8sql__in.html#a5c306ba8380ce6567831fef4610e515b',1,'hypothesis_tests.sql_in']]],
+  ['t_5ftest_5ftwo_5fpooled_5ffinal',['t_test_two_pooled_final',['../hypothesis__tests_8sql__in.html#a0a0a8a579bbf0f0d1efcbf62223e3431',1,'hypothesis_tests.sql_in']]],
+  ['t_5ftest_5ftwo_5ftransition',['t_test_two_transition',['../hypothesis__tests_8sql__in.html#a1a835d80d1846a10a2c25b91ce81c6d2',1,'hypothesis_tests.sql_in']]],
+  ['t_5ftest_5ftwo_5funpooled',['t_test_two_unpooled',['../hypothesis__tests_8sql__in.html#ac50750a0e0797ce24af1dc479b9699e1',1,'hypothesis_tests.sql_in']]],
+  ['t_5ftest_5ftwo_5funpooled_5ffinal',['t_test_two_unpooled_final',['../hypothesis__tests_8sql__in.html#a8fe7f38d29bf835718adca811e36f15a',1,'hypothesis_tests.sql_in']]],
+  ['table_5fto_5fpmml_2esql_5fin',['table_to_pmml.sql_in',['../table__to__pmml_8sql__in.html',1,'']]],
+  ['tanimoto_5fdistance',['tanimoto_distance',['../svec__util_8sql__in.html#a98222e58bc519865a26643a61611b717',1,'svec_util.sql_in']]],
+  ['term_5ffrequency',['term_frequency',['../text__utilities_8sql__in.html#a8a2caae5bf0b45eb1b4b6bbc531bce46',1,'term_frequency(text input_table, text doc_id_col, text word_vec_col, text output_table, boolean compute_vocab):&#160;text_utilities.sql_in'],['../text__utilities_8sql__in.html#a4d1d32672751005a2a0be881cfd823af',1,'term_frequency(text input_table, text doc_id_col, text word_vec_col, text output_table):&#160;text_utilities.sql_in']]],
+  ['text_5futilities_2esql_5fin',['text_utilities.sql_in',['../text__utilities_8sql__in.html',1,'']]],
+  ['train_5ftest_5fsplit',['train_test_split',['../train__test__split_8sql__in.html#aba17253051cd9d1a256b1ee896fc1cd0',1,'train_test_split(text source_table, text output_table, float8 train_proportion, float8 test_proportion, text grouping_cols, text target_cols, boolean with_replacement, boolean separate_output_tables):&#160;train_test_split.sql_in'],['../train__test__split_8sql__in.html#a90c905afa6f2ce6befeceac788d61962',1,'train_test_split(text source_table, text output_table, float8 train_proportion, float8 test_proportion, text grouping_cols, text target_cols, boolean with_replacement):&#160;train_test_split.sql_in'],['../train__test__split_8sql__in.html#aa8e4a179b48d3fff7c6fe09a3fa44067',1,'train_test_split(text source_table, text output_table, float8 train_proportion, float8 test_proportion, text grouping_cols, text target_cols):&#160;train_test_split.sql_in'],['../train__test__split_8sql__in.html#a310308ef9f1f03eeef1a2f5bbb5b48c6',1,'train_test_split(text source_table, text output_table, float8 train_proportion, float8 test_proportion, text grouping_cols):&#160;train_test_split.sql_in'],['../train__test__split_8sql__in.html#a9eab6a5d1f52dc9d46c9494b725a682a',1,'train_test_split(text source_table, text output_table, float8 train_proportion, float8 test_proportion):&#160;train_test_split.sql_in'],['../train__test__split_8sql__in.html#a6054a02712476003f9012c4dc7c56aa3',1,'train_test_split(text source_table, text output_table, float8 train_proportion):&#160;train_test_split.sql_in'],['../train__test__split_8sql__in.html#af2bfc579fccaf5fd9133d06ad65e8074',1,'train_test_split(varchar message):&#160;train_test_split.sql_in'],['../train__test__split_8sql__in.html#aa0e8ccf4f4aedb34c9d7d4d0361e6228',1,'train_test_split():&#160;train_test_split.sql_in']]],
+  ['train_5ftest_5fsplit_2esql_5fin',['train_test_split.sql_in',['../train__test__split_8sql__in.html',1,'']]],
+  ['training_5fpreprocessor_5fdl',['training_preprocessor_dl',['../input__data__preprocessor_8sql__in.html#a11a26c03a879a4c7e40e3ba07ca39a22',1,'training_preprocessor_dl(varchar source_table, varchar output_table, varchar dependent_varname, varchar independent_varname, integer buffer_size, real normalizing_const, integer num_classes, text distribution_rules):&#160;input_data_preprocessor.sql_in'],['../input__data__preprocessor_8sql__in.html#a75a2de01ab9b86789faa7c41b2c55356',1,'training_preprocessor_dl(varchar source_table, varchar output_table, varchar dependent_varname, varchar independent_varname, integer buffer_size, real normalizing_const, integer num_classes):&#160;input_data_preprocessor.sql_in'],['../input__data__preprocessor_8sql__in.html#ab8bc5ee0db5db0e89da79ba3a0edc608',1,'training_preprocessor_dl(varchar source_table, varchar output_table, varchar dependent_varname, varchar independent_varname, integer buffer_size, real normalizing_const):&#160;input_data_preprocessor.sql_in'],['../input__data__preprocessor_8sql__in.html#a64cd744683e85892bf020cc936f532ed',1,'training_preprocessor_dl(varchar source_table, varchar output_table, varchar dependent_varname, varchar independent_varname, integer buffer_size):&#160;input_data_preprocessor.sql_in'],['../input__data__preprocessor_8sql__in.html#ab60b64f54439fe51608fa2cd2de93a91',1,'training_preprocessor_dl(varchar source_table, varchar output_table, varchar dependent_varname, varchar independent_varname):&#160;input_data_preprocessor.sql_in'],['../input__data__preprocessor_8sql__in.html#a1a999c1227078fa664faed39ee8f836b',1,'training_preprocessor_dl(varchar message):&#160;input_data_preprocessor.sql_in'],['../input__data__preprocessor_8sql__in.html#aed7b34f84c82c898742af1d7878ba42d',1,'training_preprocessor_dl():&#160;input_data_preprocessor.sql_in']]],
+  ['trap_5ferror',['trap_error',['../utilities_8sql__in.html#ad1c36cb57cfddb39b69fd4d46e0c7dcb',1,'utilities.sql_in']]],
+  ['tree_5fdisplay',['tree_display',['../decision__tree_8sql__in.html#ae3e4875107103a092d3ef560b1812ee5',1,'tree_display(text model_table, boolean dot_format, boolean verbose):&#160;decision_tree.sql_in'],['../decision__tree_8sql__in.html#a3c51edcc0fe3de029dc39a3f0306155d',1,'tree_display(text model_table, boolean dot_format):&#160;decision_tree.sql_in'],['../decision__tree_8sql__in.html#a5168f7f604b0ad1c9e581f0e3f52698e',1,'tree_display(text model_table):&#160;decision_tree.sql_in'],['../decision__tree_8sql__in.html#adc9d02213b4d906976805a9681ea13fb',1,'tree_display():&#160;decision_tree.sql_in']]],
+  ['tree_5fpredict',['tree_predict',['../decision__tree_8sql__in.html#ae371963e135c40d8be5b2e342ab3c252',1,'tree_predict(text model, text source, text output, text pred_type):&#160;decision_tree.sql_in'],['../decision__tree_8sql__in.html#ad8afbe21c3b73daff7322c3fe906a804',1,'tree_predict(text model, text source, text output):&#160;decision_tree.sql_in'],['../decision__tree_8sql__in.html#abb6f3ecdd2fdcb7661ee10a65419066e',1,'tree_predict(text message):&#160;decision_tree.sql_in'],['../decision__tree_8sql__in.html#a744d4c5564a3ba18c9774fa040f32d18',1,'tree_predict():&#160;decision_tree.sql_in']]],
+  ['tree_5fsurr_5fdisplay',['tree_surr_display',['../decision__tree_8sql__in.html#a6ba706727adf88f8c07cfe09f71732bb',1,'tree_surr_display(text model_table):&#160;decision_tree.sql_in'],['../decision__tree_8sql__in.html#a97c730e746e1a8ea658efe433c9d1be5',1,'tree_surr_display():&#160;decision_tree.sql_in']]],
+  ['tree_5ftrain',['tree_train',['../decision__tree_8sql__in.html#a66dd4c15469c65676190208ee6853b83',1,'tree_train(text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text split_criterion, text grouping_cols, text weights, integer max_depth, integer min_split, integer min_bucket, integer n_bins, text pruning_params, text null_handling_params, boolean verbose_mode):&#160;decision_tree.sql_in'],['../decision__tree_8sql__in.html#a73a43da31b61ee81d5208860af2d3ab1',1,'tree_train(text message):&#160;decision_tree.sql_in'],['../decision__tree_8sql__in.html#a530812f8c3662705e24f8bf24d4eb3a5',1,'tree_train():&#160;decision_tree.sql_in'],['../decision__tree_8sql__in.html#a7071599a77d6080b2159e3ca167cff6c',1,'tree_train(text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text split_criterion, text grouping_cols, text weights, integer max_depth, integer min_split, integer min_bucket, integer n_bins, text pruning_params, text null_handling_params):&#160;decision_tree.sql_in'],['../decision__tree_8sql__in.html#ab561b3e2a8a66b6ec763d44ea042aeca',1,'tree_train(text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text split_criterion, text grouping_cols, text weights, integer max_depth, integer min_split, integer min_bucket, integer n_bins, text pruning_params):&#160;decision_tree.sql_in'],['../decision__tree_8sql__in.html#add62455af9b9f9a075df8221269a4872',1,'tree_train(text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text split_criterion, text grouping_cols, text weights, integer max_depth, integer min_split, integer min_bucket, integer n_bins):&#160;decision_tree.sql_in'],['../decision__tree_8sql__in.html#a635b82bc9c1fcd63e5a46546d3e2ba70',1,'tree_train(text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text split_criterion, text grouping_cols, text weights, integer max_depth, integer min_split, integer min_bucket):&#160;decision_tree.sql_in'],['../decision__tree_8sql__in.html#a93591ca5193e5ac9f8c3ac52e1dfb1ba',1,'tree_train(text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text split_criterion, text grouping_cols, text weights, integer max_depth, integer min_split):&#160;decision_tree.sql_in'],['../decision__tree_8sql__in.html#a558361a337c93731b856523e20f20e72',1,'tree_train(text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text split_criterion, text grouping_cols, text weights, integer max_depth):&#160;decision_tree.sql_in'],['../decision__tree_8sql__in.html#a10b882e4d6417023ae6b92f79e88ac29',1,'tree_train(text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text split_criterion, text grouping_cols, text weights):&#160;decision_tree.sql_in'],['../decision__tree_8sql__in.html#ac49c038b5668aeb901d22a5a81c8f338',1,'tree_train(text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text split_criterion, text grouping_cols):&#160;decision_tree.sql_in'],['../decision__tree_8sql__in.html#a9cfac8d89b1a13d22a20eb79d4d7e7ce',1,'tree_train(text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text split_criterion):&#160;decision_tree.sql_in'],['../decision__tree_8sql__in.html#af70d0b6bba29f94ebd49acc48b4f9bb1',1,'tree_train(text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude):&#160;decision_tree.sql_in'],['../decision__tree_8sql__in.html#a639431da2553fb86673e82d62cde4458',1,'tree_train(text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features):&#160;decision_tree.sql_in']]],
+  ['triangular_5fcdf',['triangular_cdf',['../prob_8sql__in.html#abf9c7d870bcfe68cacaa421749bbdf35',1,'prob.sql_in']]],
+  ['triangular_5fpdf',['triangular_pdf',['../prob_8sql__in.html#a0c511b9748b2f7a21fe56aaf5f66d188',1,'prob.sql_in']]],
+  ['triangular_5fquantile',['triangular_quantile',['../prob_8sql__in.html#a4777540ab1b003ff92d484c4bc26af27',1,'prob.sql_in']]]
+];
diff --git a/docs/rc/search/all_13.html b/docs/rc/search/all_13.html
new file mode 100644
index 0000000..b4a8bca
--- /dev/null
+++ b/docs/rc/search/all_13.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_13.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/all_13.js b/docs/rc/search/all_13.js
new file mode 100644
index 0000000..cb381e1
--- /dev/null
+++ b/docs/rc/search/all_13.js
@@ -0,0 +1,13 @@
+var searchData=
+[
+  ['utilities',['Utilities',['../group__grp__other__functions.html',1,'']]],
+  ['unsupervised_20learning',['Unsupervised Learning',['../group__grp__unsupervised.html',1,'']]],
+  ['uniform_5fcdf',['uniform_cdf',['../prob_8sql__in.html#aa3a05f4f2e0ef9eb65e828261ecfbed9',1,'prob.sql_in']]],
+  ['uniform_5fpdf',['uniform_pdf',['../prob_8sql__in.html#ab90fa34d90a9c75747a34c3f210df239',1,'prob.sql_in']]],
+  ['uniform_5fquantile',['uniform_quantile',['../prob_8sql__in.html#a629587a0fdefb588d28b15517ae5cc04',1,'prob.sql_in']]],
+  ['utilities_2esql_5fin',['utilities.sql_in',['../utilities_8sql__in.html',1,'']]],
+  ['utils_5fnormalize_5fdata',['utils_normalize_data',['../utils__regularization_8sql__in.html#a3dc216dff38a6d033020af2f7440e66d',1,'utils_regularization.sql_in']]],
+  ['utils_5fregularization_2esql_5fin',['utils_regularization.sql_in',['../utils__regularization_8sql__in.html',1,'']]],
+  ['utils_5fvar_5fscales',['utils_var_scales',['../utils__regularization_8sql__in.html#aaae98ce639cd126a308ed4604ac364a9',1,'utils_regularization.sql_in']]],
+  ['utils_5fvar_5fscales_5fnon_5fzero_5fstd',['utils_var_scales_non_zero_std',['../utils__regularization_8sql__in.html#ad7a5676b50f9836ecb819992a424d60e',1,'utils_regularization.sql_in']]]
+];
diff --git a/docs/rc/search/all_14.html b/docs/rc/search/all_14.html
new file mode 100644
index 0000000..fb4d0ec
--- /dev/null
+++ b/docs/rc/search/all_14.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_14.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/all_14.js b/docs/rc/search/all_14.js
new file mode 100644
index 0000000..b8903d2
--- /dev/null
+++ b/docs/rc/search/all_14.js
@@ -0,0 +1,16 @@
+var searchData=
+[
+  ['vector_20to_20columns',['Vector to Columns',['../group__grp__vec2cols.html',1,'']]],
+  ['validation_5fpreprocessor_5fdl',['validation_preprocessor_dl',['../input__data__preprocessor_8sql__in.html#a744eb29240e53401353c50635ff60451',1,'validation_preprocessor_dl(varchar source_table, varchar output_table, varchar dependent_varname, varchar independent_varname, varchar training_preprocessor_table, integer buffer_size, text distribution_rules):&#160;input_data_preprocessor.sql_in'],['../input__data__preprocessor_8sql__in.html#a9f219c66cfe4a834148090ee401ff769',1,'validation_preprocessor_dl(varchar source_table, varchar output_table, varchar dependent_varname, varchar independent_varname, varchar training_preprocessor_table, integer buffer_size):&#160;input_data_preprocessor.sql_in'],['../input__data__preprocessor_8sql__in.html#af4105a378bccdf33dafc5bed91c94db4',1,'validation_preprocessor_dl(varchar source_table, varchar output_table, varchar dependent_varname, varchar independent_varname, varchar training_preprocessor_table):&#160;input_data_preprocessor.sql_in'],['../input__data__preprocessor_8sql__in.html#af61c674e283134f2ffe282623befc1b6',1,'validation_preprocessor_dl(varchar message):&#160;input_data_preprocessor.sql_in'],['../input__data__preprocessor_8sql__in.html#ae112de88adf13d59bcf2ed7ef15dd40f',1,'validation_preprocessor_dl():&#160;input_data_preprocessor.sql_in']]],
+  ['vcrf_5flabel',['vcrf_label',['../viterbi_8sql__in.html#a05e8e687442b8f8618738d34010ef68d',1,'viterbi.sql_in']]],
+  ['vcrf_5ftop1_5flabel',['vcrf_top1_label',['../viterbi_8sql__in.html#a77b62d01f74a7bd206f6954c82638ba7',1,'viterbi.sql_in']]],
+  ['vcrf_5ftop1_5ftable',['vcrf_top1_table',['../viterbi_8sql__in.html#a1471ce51491126b282ed8f9a2ac38b25',1,'viterbi.sql_in']]],
+  ['vec2cols',['vec2cols',['../vec2cols_8sql__in.html#a16ccd7c8ea4219f09c21669eec2cfa79',1,'vec2cols(varchar source_table, varchar output_table, varchar vector_col, text[] feature_names, varchar cols_to_output):&#160;vec2cols.sql_in'],['../vec2cols_8sql__in.html#ad5301b7891fce8b67694bff87ddeff8e',1,'vec2cols(varchar source_table, varchar output_table, varchar vector_col, text[] feature_names):&#160;vec2cols.sql_in'],['../vec2cols_8sql__in.html#afc12dfff08f41b69bed5c6e58077740e',1,'vec2cols(varchar source_table, varchar output_table, varchar vector_col):&#160;vec2cols.sql_in'],['../vec2cols_8sql__in.html#adee606a1ca337cb570f3201d73ddadd2',1,'vec2cols(text message):&#160;vec2cols.sql_in'],['../vec2cols_8sql__in.html#a8067109fe47944b49167477577d02be9',1,'vec2cols():&#160;vec2cols.sql_in']]],
+  ['vec2cols_2esql_5fin',['vec2cols.sql_in',['../vec2cols_8sql__in.html',1,'']]],
+  ['vectorized_5fdistribution_5fagg',['vectorized_distribution_agg',['../distribution_8sql__in.html#aa4608a56578c7e93615e6d5b558d0bf9',1,'distribution.sql_in']]],
+  ['vectorized_5fdistribution_5ffinal',['vectorized_distribution_final',['../distribution_8sql__in.html#a6bca924e0d2a49b101253f3ca9dc4a58',1,'distribution.sql_in']]],
+  ['vectorized_5fdistribution_5ftransition',['vectorized_distribution_transition',['../distribution_8sql__in.html#abc7f8816bbdb1467435e5ba17a7d08f1',1,'distribution.sql_in']]],
+  ['version',['version',['../utilities_8sql__in.html#a9ce7ffa76acc8a0638e9bc48be99f36a',1,'utilities.sql_in']]],
+  ['viterbi_2esql_5fin',['viterbi.sql_in',['../viterbi_8sql__in.html',1,'']]],
+  ['volatile',['VOLATILE',['../random__forest_8sql__in.html#a9cf684a2e9bdf9ed0906e11f19b80037',1,'random_forest.sql_in']]]
+];
diff --git a/docs/rc/search/all_15.html b/docs/rc/search/all_15.html
new file mode 100644
index 0000000..8afe9a0
--- /dev/null
+++ b/docs/rc/search/all_15.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_15.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/all_15.js b/docs/rc/search/all_15.js
new file mode 100644
index 0000000..3d7de63
--- /dev/null
+++ b/docs/rc/search/all_15.js
@@ -0,0 +1,18 @@
+var searchData=
+[
+  ['weakly_20connected_20components',['Weakly Connected Components',['../group__grp__wcc.html',1,'']]],
+  ['wcc_2esql_5fin',['wcc.sql_in',['../wcc_8sql__in.html',1,'']]],
+  ['weakly_5fconnected_5fcomponents',['weakly_connected_components',['../wcc_8sql__in.html#ae2d66cd44d34032a9dc2490a16a326cf',1,'weakly_connected_components(text vertex_table, text vertex_id, text edge_table, text edge_args, text out_table, text grouping_cols):&#160;wcc.sql_in'],['../wcc_8sql__in.html#ab7053bc632d2787710670c7bfca78342',1,'weakly_connected_components(text vertex_table, text vertex_id, text edge_table, text edge_args, text out_table):&#160;wcc.sql_in'],['../wcc_8sql__in.html#a608342c0de3500047eefa84f4a9b641f',1,'weakly_connected_components(varchar message):&#160;wcc.sql_in'],['../wcc_8sql__in.html#a7332b4233d558fdbd65f8b1f4c229536',1,'weakly_connected_components():&#160;wcc.sql_in']]],
+  ['weibull_5fcdf',['weibull_cdf',['../prob_8sql__in.html#a50e4a1883588cd7a4c1ff1017399e4af',1,'prob.sql_in']]],
+  ['weibull_5fpdf',['weibull_pdf',['../prob_8sql__in.html#a81a876ae2b8598f060dadb179b9324d2',1,'prob.sql_in']]],
+  ['weibull_5fquantile',['weibull_quantile',['../prob_8sql__in.html#aa544631ddeb7a5c06b995b4383c3b612',1,'prob.sql_in']]],
+  ['weighted_5fsample',['weighted_sample',['../sample_8sql__in.html#ab933c8334edc748aa9ef46b9bb50e60e',1,'weighted_sample(bigint value, float8 weight):&#160;sample.sql_in'],['../sample_8sql__in.html#aa650ad075377cec7c6e1ece37c2b55b0',1,'weighted_sample(float8[] value, float8 weight):&#160;sample.sql_in']]],
+  ['weighted_5fsample_5ffinal_5fint64',['weighted_sample_final_int64',['../sample_8sql__in.html#a5c2226995c3ef02cb2320b9829bad5eb',1,'sample.sql_in']]],
+  ['weighted_5fsample_5ffinal_5fvector',['weighted_sample_final_vector',['../sample_8sql__in.html#a8b2b3bb57b01f47bafe44bea73f39f78',1,'sample.sql_in']]],
+  ['weighted_5fsample_5fmerge_5fint64',['weighted_sample_merge_int64',['../sample_8sql__in.html#aa066d40345787e00819963f095f40998',1,'sample.sql_in']]],
+  ['weighted_5fsample_5fmerge_5fvector',['weighted_sample_merge_vector',['../sample_8sql__in.html#ac5d00ff9e30dcae8a1b6b8450df3e95e',1,'sample.sql_in']]],
+  ['weighted_5fsample_5ftransition_5fint64',['weighted_sample_transition_int64',['../sample_8sql__in.html#af933c6e9d6623c62a671dc74e5bd9d51',1,'sample.sql_in']]],
+  ['weighted_5fsample_5ftransition_5fvector',['weighted_sample_transition_vector',['../sample_8sql__in.html#ae7ad8a80a8c2508cc54cf496934017c2',1,'sample.sql_in']]],
+  ['wsr_5ftest_5ffinal',['wsr_test_final',['../hypothesis__tests_8sql__in.html#a8f0431ace27ac78e9e1df9906f1f1c33',1,'hypothesis_tests.sql_in']]],
+  ['wsr_5ftest_5ftransition',['wsr_test_transition',['../hypothesis__tests_8sql__in.html#a0d85654832dfa961cd13526c052642f3',1,'wsr_test_transition(float8[] state, float8 value, float8 precision):&#160;hypothesis_tests.sql_in'],['../hypothesis__tests_8sql__in.html#a4093de00ab033f4900ce186d481fa012',1,'wsr_test_transition(float8[] state, float8 value):&#160;hypothesis_tests.sql_in']]]
+];
diff --git a/docs/rc/search/all_16.html b/docs/rc/search/all_16.html
new file mode 100644
index 0000000..e511edb
--- /dev/null
+++ b/docs/rc/search/all_16.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_16.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/all_16.js b/docs/rc/search/all_16.js
new file mode 100644
index 0000000..9437325
--- /dev/null
+++ b/docs/rc/search/all_16.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['zph_5fagg',['zph_agg',['../cox__prop__hazards_8sql__in.html#a91e1a4b2a2d13454f9e65dd3d40a329b',1,'cox_prop_hazards.sql_in']]]
+];
diff --git a/docs/rc/search/all_2.html b/docs/rc/search/all_2.html
new file mode 100644
index 0000000..9543c57
--- /dev/null
+++ b/docs/rc/search/all_2.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_2.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/all_2.js b/docs/rc/search/all_2.js
new file mode 100644
index 0000000..22b8716
--- /dev/null
+++ b/docs/rc/search/all_2.js
@@ -0,0 +1,25 @@
+var searchData=
+[
+  ['balance_5fsample',['balance_sample',['../balance__sample_8sql__in.html#a784a10b3aba906635e6e3b1ec8dd7f78',1,'balance_sample(text source_table, text output_table, text class_col, varchar class_sizes, integer output_table_size, text grouping_cols, boolean with_replacement, boolean keep_null):&#160;balance_sample.sql_in'],['../balance__sample_8sql__in.html#a03241df3f6930c0bc0a784edb3d51e09',1,'balance_sample(text source_table, text output_table, text class_col, varchar class_sizes, integer output_table_size, text grouping_cols, boolean with_replacement):&#160;balance_sample.sql_in'],['../balance__sample_8sql__in.html#a257836db4a9f9f8dbc16f96d80b16218',1,'balance_sample(text source_table, text output_table, text class_col, varchar class_sizes, integer output_table_size, text grouping_cols):&#160;balance_sample.sql_in'],['../balance__sample_8sql__in.html#a5a37e006e61355fa804164a42430dc38',1,'balance_sample(text source_table, text output_table, text class_col, varchar class_sizes, integer output_table_size):&#160;balance_sample.sql_in'],['../balance__sample_8sql__in.html#ae968393f98279747bd1ef13f8359856d',1,'balance_sample(text source_table, text output_table, text class_col, varchar class_sizes):&#160;balance_sample.sql_in'],['../balance__sample_8sql__in.html#ac384701cfb2653e0ce4ac2bcf54a7980',1,'balance_sample(text source_table, text output_table, text class_col):&#160;balance_sample.sql_in'],['../balance__sample_8sql__in.html#a850769c45d8925743edcf4125b148524',1,'balance_sample(varchar message):&#160;balance_sample.sql_in'],['../balance__sample_8sql__in.html#a3836a8987b2d9b4b8a21ce09bb7ef441',1,'balance_sample():&#160;balance_sample.sql_in']]],
+  ['balance_5fsample_2esql_5fin',['balance_sample.sql_in',['../balance__sample_8sql__in.html',1,'']]],
+  ['bayes_2esql_5fin',['bayes.sql_in',['../bayes_8sql__in.html',1,'']]],
+  ['bernoulli_5fcdf',['bernoulli_cdf',['../prob_8sql__in.html#aea21a931dc5578a570e3370af3d8d43a',1,'prob.sql_in']]],
+  ['bernoulli_5fpmf',['bernoulli_pmf',['../prob_8sql__in.html#a434b3ad1f3964835834dc2a942b820ef',1,'prob.sql_in']]],
+  ['bernoulli_5fquantile',['bernoulli_quantile',['../prob_8sql__in.html#a7133c2e86fd2f6384416ee0e4fd3a60b',1,'prob.sql_in']]],
+  ['beta_5fcdf',['beta_cdf',['../prob_8sql__in.html#a72e1cca872da35592075dbcfb18aed3f',1,'prob.sql_in']]],
+  ['beta_5fpdf',['beta_pdf',['../prob_8sql__in.html#aa105049e6e3bb9b3891b0ed1b343e28e',1,'prob.sql_in']]],
+  ['beta_5fquantile',['beta_quantile',['../prob_8sql__in.html#a32433aa742c0504d33e98e28a3e2f190',1,'prob.sql_in']]],
+  ['bfs_2esql_5fin',['bfs.sql_in',['../bfs_8sql__in.html',1,'']]],
+  ['big_5for',['big_or',['../sketch_8sql__in.html#a335fba86bbb3fb5a3284808cc64b8f16',1,'sketch.sql_in']]],
+  ['binary_5fclassifier',['binary_classifier',['../pred__metrics_8sql__in.html#aedc849fa15c7c788cf17bb74244082a0',1,'binary_classifier(text table_in, text table_out, text prediction_col, text observed_col, text grouping_cols):&#160;pred_metrics.sql_in'],['../pred__metrics_8sql__in.html#a41dff9da82f7a1a421ed58f183eb6651',1,'binary_classifier(text table_in, text table_out, text prediction_col, text observed_col):&#160;pred_metrics.sql_in'],['../pred__metrics_8sql__in.html#afe32ecfa017b25b544654bf3c5836efc',1,'binary_classifier(text message):&#160;pred_metrics.sql_in'],['../pred__metrics_8sql__in.html#a1687dbb9561ff60738a1549a37c1fe73',1,'binary_classifier():&#160;pred_metrics.sql_in']]],
+  ['binomial_5fcdf',['binomial_cdf',['../prob_8sql__in.html#aa5000bad6e2e4af1c8cbfec7ea884476',1,'prob.sql_in']]],
+  ['binomial_5fpmf',['binomial_pmf',['../prob_8sql__in.html#aa0614475b8685bf8e37533d2ac5bb116',1,'prob.sql_in']]],
+  ['binomial_5fquantile',['binomial_quantile',['../prob_8sql__in.html#a49f421c58d2e1abd63b83d71af9edf21',1,'prob.sql_in']]],
+  ['bool_5fto_5ftext',['bool_to_text',['../utilities_8sql__in.html#abc867482053e6692047d051b679953a5',1,'utilities.sql_in']]],
+  ['bytea8in',['bytea8in',['../utilities_8sql__in.html#a60c4765ce8dc639cbb0ad4c389f5f1ad',1,'utilities.sql_in']]],
+  ['bytea8out',['bytea8out',['../utilities_8sql__in.html#adff923d42d4bdb2b631d6cafd5f37a43',1,'utilities.sql_in']]],
+  ['bytea8recv',['bytea8recv',['../utilities_8sql__in.html#a244a7ff30f2788a6f4816417982eb13b',1,'utilities.sql_in']]],
+  ['bytea8send',['bytea8send',['../utilities_8sql__in.html#aeb90c740e8e6b67aa60a11c430fa9050',1,'utilities.sql_in']]],
+  ['balanced_20sampling',['Balanced Sampling',['../group__grp__balance__sampling.html',1,'']]],
+  ['breadth_2dfirst_20search',['Breadth-First Search',['../group__grp__bfs.html',1,'']]]
+];
diff --git a/docs/rc/search/all_3.html b/docs/rc/search/all_3.html
new file mode 100644
index 0000000..03405c0
--- /dev/null
+++ b/docs/rc/search/all_3.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_3.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/all_3.js b/docs/rc/search/all_3.js
new file mode 100644
index 0000000..2b9bccb
--- /dev/null
+++ b/docs/rc/search/all_3.js
@@ -0,0 +1,107 @@
+var searchData=
+[
+  ['cauchy_5fcdf',['cauchy_cdf',['../prob_8sql__in.html#a2d8874c2a5679403a473bfedb14467a4',1,'prob.sql_in']]],
+  ['cauchy_5fpdf',['cauchy_pdf',['../prob_8sql__in.html#aebfad9365a7fc7a553c3b5c7931f2450',1,'prob.sql_in']]],
+  ['cauchy_5fquantile',['cauchy_quantile',['../prob_8sql__in.html#ae8aa9b741e89c8d9236a682d218006e0',1,'prob.sql_in']]],
+  ['check_5fif_5fcol_5fexists',['check_if_col_exists',['../utilities_8sql__in.html#ac1f509bd94c6309b59eb4d479fb2a470',1,'utilities.sql_in']]],
+  ['check_5fif_5fraises_5ferror',['check_if_raises_error',['../utilities_8sql__in.html#aa90ffaebb43a5cbcb5c48281cbadd3b0',1,'utilities.sql_in']]],
+  ['chi2_5fgof_5ftest',['chi2_gof_test',['../hypothesis__tests_8sql__in.html#a4c912b329fb103a44253932a653d4e40',1,'chi2_gof_test(bigint observed, float8 expected=1, bigint df=0):&#160;hypothesis_tests.sql_in'],['../hypothesis__tests_8sql__in.html#a09a8ed9d073f8c43d9ade3cf2defb2b0',1,'chi2_gof_test(bigint observed, float8 expected):&#160;hypothesis_tests.sql_in'],['../hypothesis__tests_8sql__in.html#a13730efbff97aa5624a350135a9b83ff',1,'chi2_gof_test(bigint observed):&#160;hypothesis_tests.sql_in']]],
+  ['chi2_5fgof_5ftest_5ffinal',['chi2_gof_test_final',['../hypothesis__tests_8sql__in.html#a61c31dfde998db18afd6552239b872c4',1,'hypothesis_tests.sql_in']]],
+  ['chi2_5fgof_5ftest_5fmerge_5fstates',['chi2_gof_test_merge_states',['../hypothesis__tests_8sql__in.html#a2b8265718a16ec65e89d2ab512f6a3e1',1,'hypothesis_tests.sql_in']]],
+  ['chi2_5fgof_5ftest_5ftransition',['chi2_gof_test_transition',['../hypothesis__tests_8sql__in.html#a7c580537666776f1bd4b9d4a0a6b6438',1,'chi2_gof_test_transition(float8[] state, bigint observed, float8 expected, bigint df):&#160;hypothesis_tests.sql_in'],['../hypothesis__tests_8sql__in.html#ab4b83895c48dd1c1ca2e106b15741868',1,'chi2_gof_test_transition(float8[] state, bigint observed, float8 expected):&#160;hypothesis_tests.sql_in'],['../hypothesis__tests_8sql__in.html#a66d03891a6add6d67f944df5344ed40e',1,'chi2_gof_test_transition(float8[] state, bigint observed):&#160;hypothesis_tests.sql_in']]],
+  ['chi_5fsquared_5fcdf',['chi_squared_cdf',['../prob_8sql__in.html#a230513b6b549d5b445cbacbdbab42c15',1,'prob.sql_in']]],
+  ['chi_5fsquared_5fpdf',['chi_squared_pdf',['../prob_8sql__in.html#a90bccc717d7052e83bafd7f160a783b1',1,'prob.sql_in']]],
+  ['chi_5fsquared_5fquantile',['chi_squared_quantile',['../prob_8sql__in.html#ad125307fe65a33b60f6dd524037d4548',1,'prob.sql_in']]],
+  ['cleanup_5fmadlib_5ftemp_5ftables',['cleanup_madlib_temp_tables',['../utilities_8sql__in.html#aab5ea2cd6201e38e24ca62b0fb91fb7a',1,'utilities.sql_in']]],
+  ['cleanup_5fmadlib_5ftemp_5ftables_5fscript',['cleanup_madlib_temp_tables_script',['../utilities_8sql__in.html#a156eb9d1c814592e59600980977a64eb',1,'utilities.sql_in']]],
+  ['cleanup_5fmadlib_5ftemp_5fviews',['cleanup_madlib_temp_views',['../utilities_8sql__in.html#a0a26602860109f870a82badff95c2fc3',1,'utilities.sql_in']]],
+  ['closest_5fcolumn',['closest_column',['../linalg_8sql__in.html#acf6628dfa4d73dfce65a582aa5c5a3db',1,'closest_column(float8[] m, float8[] x, regproc dist=&quot;squared_dist_norm2&quot;):&#160;linalg.sql_in'],['../linalg_8sql__in.html#a31c8d60f9a631c27f5f91964e0108da9',1,'closest_column(float8[] m, float8[] x):&#160;linalg.sql_in']]],
+  ['closest_5fcolumns',['closest_columns',['../linalg_8sql__in.html#ad864339591086b635d12015db993b5bc',1,'closest_columns(float8[] m, float8[] x, integer num, regproc dist):&#160;linalg.sql_in'],['../linalg_8sql__in.html#aa5da5470cc84963a059714faa238a07d',1,'closest_columns(float8[] m, float8[] x, integer num):&#160;linalg.sql_in']]],
+  ['clustered_5fvariance_2esql_5fin',['clustered_variance.sql_in',['../clustered__variance_8sql__in.html',1,'']]],
+  ['clustered_5fvariance_5fcoxph',['clustered_variance_coxph',['../clustered__variance__coxph_8sql__in.html#a91f46572f245f34c9fe92d0ec806a998',1,'clustered_variance_coxph():&#160;clustered_variance_coxph.sql_in'],['../clustered__variance__coxph_8sql__in.html#a9e6c0f27cb3ba9ad583055c96c847795',1,'clustered_variance_coxph(varchar message):&#160;clustered_variance_coxph.sql_in'],['../clustered__variance__coxph_8sql__in.html#acc0a2119671931eea54e021a4db6168c',1,'clustered_variance_coxph(text model_table, text output_table, text clustervar):&#160;clustered_variance_coxph.sql_in']]],
+  ['clustered_5fvariance_5fcoxph_2esql_5fin',['clustered_variance_coxph.sql_in',['../clustered__variance__coxph_8sql__in.html',1,'']]],
+  ['clustered_5fvariance_5flinregr',['clustered_variance_linregr',['../clustered__variance_8sql__in.html#abaa6702a3482f65199ce64b8a14316d7',1,'clustered_variance_linregr(text source_table, text out_table, text depvar, text indvar, text clustervar, text grouping_col):&#160;clustered_variance.sql_in'],['../clustered__variance_8sql__in.html#adb6227023444552a37f3ea52502b1c37',1,'clustered_variance_linregr(text source_table, text out_table, text depvar, text indvar, text clustervar):&#160;clustered_variance.sql_in'],['../clustered__variance_8sql__in.html#a0548d26efc4f0b22c41516dabcd7d32b',1,'clustered_variance_linregr():&#160;clustered_variance.sql_in'],['../clustered__variance_8sql__in.html#ade1843a5cf8c7c72fb1aae07d82d5a4e',1,'clustered_variance_linregr(text msg):&#160;clustered_variance.sql_in']]],
+  ['clustered_5fvariance_5flogregr',['clustered_variance_logregr',['../clustered__variance_8sql__in.html#a0debc923b0494f8259938d9c6f5cdbcd',1,'clustered_variance_logregr(text source_table, text out_table, text depvar, text indvar, text clustervar, text grouping_col, integer max_iter, text optimizer, float8 tolerance, boolean verbose_mode):&#160;clustered_variance.sql_in'],['../clustered__variance_8sql__in.html#a5d526752e92cbe1282bf581c49f9c31c',1,'clustered_variance_logregr(text source_table, text out_table, text depvar, text indvar, text clustervar):&#160;clustered_variance.sql_in'],['../clustered__variance_8sql__in.html#ab060fb03fdcab9e702024eee940ba61c',1,'clustered_variance_logregr(text source_table, text out_table, text depvar, text indvar, text clustervar, text grouping_col):&#160;clustered_variance.sql_in'],['../clustered__variance_8sql__in.html#ab58eebaf13ef21e59e50362fe9ad658f',1,'clustered_variance_logregr(text source_table, text out_table, text depvar, text indvar, text clustervar, text grouping_col, integer max_iter):&#160;clustered_variance.sql_in'],['../clustered__variance_8sql__in.html#a8d8bd2b7d26981e7de10597222d99f7c',1,'clustered_variance_logregr(text source_table, text out_table, text depvar, text indvar, text clustervar, text grouping_col, integer max_iter, text optimizer):&#160;clustered_variance.sql_in'],['../clustered__variance_8sql__in.html#a5c10605246186fc87442274b66948f52',1,'clustered_variance_logregr(text source_table, text out_table, text depvar, text indvar, text clustervar, text grouping_col, integer max_iter, text optimizer, float8 tolerance):&#160;clustered_variance.sql_in'],['../clustered__variance_8sql__in.html#a3d702174c793b0c4afc5453d553f0e29',1,'clustered_variance_logregr():&#160;clustered_variance.sql_in'],['../clustered__variance_8sql__in.html#a4450b02e72471fa85f441b9abdc65ff8',1,'clustered_variance_logregr(text msg):&#160;clustered_variance.sql_in']]],
+  ['clustered_5fvariance_5fmlogregr',['clustered_variance_mlogregr',['../clustered__variance_8sql__in.html#aa72cfa6f9259cceea3e36b6db45a7624',1,'clustered_variance_mlogregr(text source_table, text out_table, text dependent_varname, text independent_varname, text cluster_varname, integer ref_category, text grouping_cols, text optimizer_params, boolean verbose_mode):&#160;clustered_variance.sql_in'],['../clustered__variance_8sql__in.html#ac614f56394b00ad9286c7c83a060b079',1,'clustered_variance_mlogregr(text source_table, text out_table, text dependent_varname, text independent_varname, text cluster_varname, integer ref_category, text grouping_cols, text optimizer_params):&#160;clustered_variance.sql_in'],['../clustered__variance_8sql__in.html#a201adea876fbcf7f0d18685d0ae44ffb',1,'clustered_variance_mlogregr(text source_table, text out_table, text dependent_varname, text independent_varname, text cluster_varname, integer ref_category, text grouping_cols):&#160;clustered_variance.sql_in'],['../clustered__variance_8sql__in.html#a7b2f2f1cc814cecb5b62bf28615fa8fe',1,'clustered_variance_mlogregr(text source_table, text out_table, text dependent_varname, text independent_varname, text cluster_varname, integer ref_category):&#160;clustered_variance.sql_in'],['../clustered__variance_8sql__in.html#a6438de2e98e86468ab741ee3c3b337da',1,'clustered_variance_mlogregr(text source_table, text out_table, text dependent_varname, text independent_varname, text cluster_varname):&#160;clustered_variance.sql_in'],['../clustered__variance_8sql__in.html#a7b55f727b8beea7cf06c1561bbffb6ca',1,'clustered_variance_mlogregr():&#160;clustered_variance.sql_in'],['../clustered__variance_8sql__in.html#a133a97d8eee41ed57ed0b16a592774e4',1,'clustered_variance_mlogregr(text msg):&#160;clustered_variance.sql_in'],['../clustered__variance_8sql__in.html#ab6a6297525bcd589311d7e085b830123',1,'clustered_variance_mlogregr(text source_table, text out_table, text dependent_varname, text independent_varname, text cluster_varname, integer ref_category, text grouping_cols, integer max_iter, varchar optimizer, float8 tolerance, boolean verbose_mode):&#160;clustered_variance.sql_in'],['../clustered__variance_8sql__in.html#aa864a6c22942e33348725c6cf5a79a14',1,'clustered_variance_mlogregr(text source_table, text out_table, text dependent_varname, text independent_varname, text cluster_varname, integer ref_category, text grouping_cols, integer max_iter, varchar optimizer, float8 tolerance):&#160;clustered_variance.sql_in'],['../clustered__variance_8sql__in.html#adec204a306e05ef8506b3b03e8e37ba3',1,'clustered_variance_mlogregr(text source_table, text out_table, text dependent_varname, text independent_varname, text cluster_varname, integer ref_category, text grouping_cols, integer max_iter, varchar optimizer):&#160;clustered_variance.sql_in'],['../clustered__variance_8sql__in.html#a7d90589980d2779a149a81513bab79e9',1,'clustered_variance_mlogregr(text source_table, text out_table, text dependent_varname, text independent_varname, text cluster_varname, integer ref_category, text grouping_cols, integer max_iter):&#160;clustered_variance.sql_in']]],
+  ['cmsketch',['cmsketch',['../sketch_8sql__in.html#ae6671bfb7474db7d8b5c9dada29f36ab',1,'sketch.sql_in']]],
+  ['cmsketch_5fcentile',['cmsketch_centile',['../sketch_8sql__in.html#a2f2ab2fe3244515f5f73d49690e73b39',1,'sketch.sql_in']]],
+  ['cmsketch_5fcount',['cmsketch_count',['../sketch_8sql__in.html#a3498d2c778d1289154f61d34e84c609e',1,'sketch.sql_in']]],
+  ['cmsketch_5fdepth_5fhistogram',['cmsketch_depth_histogram',['../sketch_8sql__in.html#a9e6d30f20b724b96249cc4a0f67a279e',1,'sketch.sql_in']]],
+  ['cmsketch_5fmedian',['cmsketch_median',['../sketch_8sql__in.html#a0ef6428fa7ba4b7f7b1f633e6f8003ea',1,'sketch.sql_in']]],
+  ['cmsketch_5frangecount',['cmsketch_rangecount',['../sketch_8sql__in.html#aeff9e36cfb3338c4e405d4ac77d3968c',1,'sketch.sql_in']]],
+  ['cmsketch_5fwidth_5fhistogram',['cmsketch_width_histogram',['../sketch_8sql__in.html#a8482f62849adf40a2c7df78c23ea33a4',1,'sketch.sql_in']]],
+  ['cols2vec',['cols2vec',['../cols2vec_8sql__in.html#ae8b2fa9bc82ffb1ed0ca970803dca07a',1,'cols2vec(varchar source_table, varchar output_table, varchar list_of_features, varchar list_of_features_to_exclude, varchar cols_to_output):&#160;cols2vec.sql_in'],['../cols2vec_8sql__in.html#aa8faa742795f4084309c9a87bc2e8c83',1,'cols2vec(varchar source_table, varchar output_table, varchar list_of_features, varchar list_of_features_to_exclude):&#160;cols2vec.sql_in'],['../cols2vec_8sql__in.html#a5b9abee9bb093b05b1e4d4c67ad81126',1,'cols2vec(varchar source_table, varchar output_table, varchar list_of_features):&#160;cols2vec.sql_in'],['../cols2vec_8sql__in.html#a68b12d4f57f8ba33643b698c7ccb98c5',1,'cols2vec(text message):&#160;cols2vec.sql_in'],['../cols2vec_8sql__in.html#a116d49e418babfcc6a93e75f79154d66',1,'cols2vec():&#160;cols2vec.sql_in']]],
+  ['cols2vec_2esql_5fin',['cols2vec.sql_in',['../cols2vec_8sql__in.html',1,'']]],
+  ['compute_5fcoxph_5fresult',['compute_coxph_result',['../cox__prop__hazards_8sql__in.html#a74fe60f99c3808e38421c71286850ea8',1,'cox_prop_hazards.sql_in']]],
+  ['compute_5flincrf',['compute_lincrf',['../crf_8sql__in.html#a20c096420d878cdd66dac6a232483737',1,'crf.sql_in']]],
+  ['confusion_5fmatrix',['confusion_matrix',['../pred__metrics_8sql__in.html#a3a6234adcb53ff4f77620774f0c7c054',1,'confusion_matrix(text table_in, text table_out, text prediction_col, text observed_col):&#160;pred_metrics.sql_in'],['../pred__metrics_8sql__in.html#ad66709b77e74920ee9711cda1617a273',1,'confusion_matrix(text message):&#160;pred_metrics.sql_in'],['../pred__metrics_8sql__in.html#aa70c6d5ca1ac9d4e6504f15f6b19a9e4',1,'confusion_matrix():&#160;pred_metrics.sql_in']]],
+  ['conjugate_5fgradient',['conjugate_gradient',['../conjugate__gradient_8sql__in.html#ab94e8a12cc9c2d0dac35168721ec8585',1,'conjugate_gradient(text matrix, text val_id, text row_id, float[] b, float precision_limit, int verbosity):&#160;conjugate_gradient.sql_in'],['../conjugate__gradient_8sql__in.html#abe53a640e2287e06587eb1541fb6b4a3',1,'conjugate_gradient(text matrix, text val_id, text row_id, float[] b, float precision_limit):&#160;conjugate_gradient.sql_in']]],
+  ['conjugate_5fgradient_2esql_5fin',['conjugate_gradient.sql_in',['../conjugate__gradient_8sql__in.html',1,'']]],
+  ['convert_5farray_5fto_5fbytea',['convert_array_to_bytea',['../input__data__preprocessor_8sql__in.html#adddc008fc86a92a0ffa8ce2875fff6e0',1,'convert_array_to_bytea(real[] var):&#160;input_data_preprocessor.sql_in'],['../input__data__preprocessor_8sql__in.html#a81d7da93a6e2ed7cd1c8407b259f7258',1,'convert_array_to_bytea(smallint[] var):&#160;input_data_preprocessor.sql_in']]],
+  ['convert_5fbytea_5fto_5freal_5farray',['convert_bytea_to_real_array',['../input__data__preprocessor_8sql__in.html#a3ce0821912d0e1256816881607d3bfc9',1,'input_data_preprocessor.sql_in']]],
+  ['convert_5fbytea_5fto_5fsmallint_5farray',['convert_bytea_to_smallint_array',['../input__data__preprocessor_8sql__in.html#a38e811354ec1793a7126dfe38e4cd086',1,'input_data_preprocessor.sql_in']]],
+  ['correlation',['correlation',['../correlation_8sql__in.html#a91bb3c218f470e1184a1c16b66307393',1,'correlation(varchar source_table, varchar output_table, varchar target_cols, boolean verbose, varchar grouping_cols, integer n_groups_per_run):&#160;correlation.sql_in'],['../correlation_8sql__in.html#a23198d24ba486323eea49bb2ef97ddb8',1,'correlation(varchar source_table, varchar output_table, varchar target_cols, boolean verbose, varchar grouping_cols):&#160;correlation.sql_in'],['../correlation_8sql__in.html#ada17a10ea8a6c4580e7413c86ae5345e',1,'correlation(varchar source_table, varchar output_table, varchar target_cols, boolean verbose):&#160;correlation.sql_in'],['../correlation_8sql__in.html#a30437d71937df60681be42769d5d3a29',1,'correlation(varchar source_table, varchar output_table, varchar target_cols):&#160;correlation.sql_in'],['../correlation_8sql__in.html#a79c79a64e2145e640e410d8ebae078f7',1,'correlation(varchar source_table, varchar output_table):&#160;correlation.sql_in'],['../correlation_8sql__in.html#a703be245d20fa6ac1cc1ae433f08c4eb',1,'correlation(text input_message):&#160;correlation.sql_in'],['../correlation_8sql__in.html#ad81ac0ea4b9675fe257b2f5c2cee385e',1,'correlation():&#160;correlation.sql_in']]],
+  ['correlation_2esql_5fin',['correlation.sql_in',['../correlation_8sql__in.html',1,'']]],
+  ['correlation_5fagg',['correlation_agg',['../correlation_8sql__in.html#a1c3081444f6bafc88a9b377f2af32968',1,'correlation.sql_in']]],
+  ['correlation_5ffinal',['correlation_final',['../correlation_8sql__in.html#a85a1a9b0ae5e608fd235f08ae01ff966',1,'correlation.sql_in']]],
+  ['correlation_5fmerge',['correlation_merge',['../correlation_8sql__in.html#ac53cf4dd28185715a1798176bce44b1b',1,'correlation.sql_in']]],
+  ['correlation_5ftransition',['correlation_transition',['../correlation_8sql__in.html#ae6223d0ba3e2b8a2d298ee78a293be6a',1,'correlation.sql_in']]],
+  ['cosine_5fsimilarity',['cosine_similarity',['../linalg_8sql__in.html#a1782f2ba00d9f9fab20894a576079f87',1,'linalg.sql_in']]],
+  ['covariance',['covariance',['../correlation_8sql__in.html#afee4f63248d2030dbc7ee37697e3c7e1',1,'covariance(varchar source_table, varchar output_table, varchar target_cols, boolean verbose, varchar grouping_cols, integer n_groups_per_run):&#160;correlation.sql_in'],['../correlation_8sql__in.html#ab2b75724c8361482265991e13f0f34e9',1,'covariance(varchar source_table, varchar output_table, varchar target_cols, boolean verbose, varchar grouping_cols):&#160;correlation.sql_in'],['../correlation_8sql__in.html#aa962df7076b6a57914e766c8ab4fea78',1,'covariance(varchar source_table, varchar output_table, varchar target_cols, boolean verbose):&#160;correlation.sql_in'],['../correlation_8sql__in.html#a63aaa72fa4a4003a4b92b0b46eb69e00',1,'covariance(varchar source_table, varchar output_table, varchar target_cols):&#160;correlation.sql_in'],['../correlation_8sql__in.html#ada9ca243ead62cda1ec4faf8940e9b52',1,'covariance(varchar source_table, varchar output_table):&#160;correlation.sql_in'],['../correlation_8sql__in.html#a986c54ff5cc92d3d530b494a8ee6f112',1,'covariance(text input_message):&#160;correlation.sql_in'],['../correlation_8sql__in.html#a3ef3717dbd8916187ea111b933a52470',1,'covariance():&#160;correlation.sql_in']]],
+  ['covariance_5fagg',['covariance_agg',['../correlation_8sql__in.html#a5c4f4adaf75fe3406bf1d0a20f8512ac',1,'correlation.sql_in']]],
+  ['cox_5fprop_5fhazards',['cox_prop_hazards',['../cox__prop__hazards_8sql__in.html#ad778b289eb19ae0bb2b7e02a89bab3bc',1,'cox_prop_hazards(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, varchar status):&#160;cox_prop_hazards.sql_in'],['../cox__prop__hazards_8sql__in.html#a5e52f9a98bce4ec74230eb95c95e68c4',1,'cox_prop_hazards(varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable):&#160;cox_prop_hazards.sql_in'],['../cox__prop__hazards_8sql__in.html#a03909f1c14894303fca80ea8503ae7f0',1,'cox_prop_hazards(varchar usage_string):&#160;cox_prop_hazards.sql_in'],['../cox__prop__hazards_8sql__in.html#af92ac384ab346034dc42a4049613a47a',1,'cox_prop_hazards():&#160;cox_prop_hazards.sql_in']]],
+  ['cox_5fprop_5fhazards_2esql_5fin',['cox_prop_hazards.sql_in',['../cox__prop__hazards_8sql__in.html',1,'']]],
+  ['cox_5fprop_5fhazards_5fregr',['cox_prop_hazards_regr',['../cox__prop__hazards_8sql__in.html#a3310cf98478b7c1e400e8fb1b3965d30',1,'cox_prop_hazards_regr(varchar source, varchar indepColumn, varchar depColumn, varchar status, integer maxNumIterations=20, varchar optimizer=&quot;newton&quot;, float8 precision=0.0001):&#160;cox_prop_hazards.sql_in'],['../cox__prop__hazards_8sql__in.html#a79ca0bbf1a3a5c1f83ede9596d4b43cc',1,'cox_prop_hazards_regr(varchar source, varchar indepColumn, varchar depColumn, varchar status):&#160;cox_prop_hazards.sql_in'],['../cox__prop__hazards_8sql__in.html#a217c18984301c16b39a6deffa8c677df',1,'cox_prop_hazards_regr(varchar source, varchar indepColumn, varchar depColumn, varchar status, integer maxNumIterations):&#160;cox_prop_hazards.sql_in'],['../cox__prop__hazards_8sql__in.html#a6508b2b2b8e0b6a0d0027c3d8b487df8',1,'cox_prop_hazards_regr(varchar source, varchar indepColumn, varchar depColumn, varchar status, integer maxNumIterations, varchar optimizer):&#160;cox_prop_hazards.sql_in']]],
+  ['cox_5fzph',['cox_zph',['../cox__prop__hazards_8sql__in.html#a682d95d5475ce33e47937067cadc2766',1,'cox_zph(varchar coxph_model_table, varchar output_table):&#160;cox_prop_hazards.sql_in'],['../cox__prop__hazards_8sql__in.html#aad77f665f0030202444e99f5a0b895d3',1,'cox_zph():&#160;cox_prop_hazards.sql_in'],['../cox__prop__hazards_8sql__in.html#af3aee9274235a9a44511e8cc57f15bcb',1,'cox_zph(varchar message):&#160;cox_prop_hazards.sql_in']]],
+  ['coxph_5fa_5fb',['coxph_a_b',['../clustered__variance__coxph_8sql__in.html#a5f5ca89e3265e170c325125e61ef191d',1,'clustered_variance_coxph.sql_in']]],
+  ['coxph_5fa_5fb_5ffinal',['coxph_a_b_final',['../clustered__variance__coxph_8sql__in.html#a2373d116ad1e2b2090f8c23a0c15edb5',1,'clustered_variance_coxph.sql_in']]],
+  ['coxph_5fa_5fb_5fmerge',['coxph_a_b_merge',['../clustered__variance__coxph_8sql__in.html#a62bff141ced5972df28ceecdfe522888',1,'clustered_variance_coxph.sql_in']]],
+  ['coxph_5fa_5fb_5ftransition',['coxph_a_b_transition',['../clustered__variance__coxph_8sql__in.html#a7081022015c00a14ecca27e017a4458b',1,'clustered_variance_coxph.sql_in']]],
+  ['coxph_5fcompute_5fclustered_5fstats',['coxph_compute_clustered_stats',['../clustered__variance__coxph_8sql__in.html#a713f413fc571244b7cec6c0084a61eb9',1,'clustered_variance_coxph.sql_in']]],
+  ['coxph_5fcompute_5fw',['coxph_compute_w',['../clustered__variance__coxph_8sql__in.html#a523e61b6d56c8ff59fa8ae3121073a49',1,'clustered_variance_coxph.sql_in']]],
+  ['coxph_5fh_5fs',['coxph_h_s',['../robust__variance__coxph_8sql__in.html#a2743e0cecadd7f3fa2a16f9d7d40564b',1,'robust_variance_coxph.sql_in']]],
+  ['coxph_5fh_5fs_5ffinal',['coxph_h_s_final',['../robust__variance__coxph_8sql__in.html#aeb95cacc36c5d6c8cc25c8d37418c71b',1,'robust_variance_coxph.sql_in']]],
+  ['coxph_5fh_5fs_5fmerge',['coxph_h_s_merge',['../robust__variance__coxph_8sql__in.html#ab122003102dd22274a76aa1a830c69dd',1,'robust_variance_coxph.sql_in']]],
+  ['coxph_5fh_5fs_5ftransition',['coxph_h_s_transition',['../robust__variance__coxph_8sql__in.html#a03a39bc1fee64cd9b8b6a373758819da',1,'robust_variance_coxph.sql_in']]],
+  ['coxph_5fimproved_5fstep_5ffinal',['coxph_improved_step_final',['../cox__prop__hazards_8sql__in.html#ac5ae827993064fd6e0ccf13a96262cdc',1,'cox_prop_hazards.sql_in']]],
+  ['coxph_5fimproved_5fstep_5ftransition',['coxph_improved_step_transition',['../cox__prop__hazards_8sql__in.html#a6a9ae1ea761b31e1522c47a9794cc233',1,'cox_prop_hazards.sql_in']]],
+  ['coxph_5fimproved_5fstrata_5fstep_5ffinal',['coxph_improved_strata_step_final',['../cox__prop__hazards_8sql__in.html#a41a415076894d3844475208b2163a267',1,'cox_prop_hazards.sql_in']]],
+  ['coxph_5fimproved_5fstrata_5fstep_5fouter',['coxph_improved_strata_step_outer',['../cox__prop__hazards_8sql__in.html#abb21bacbff7362724d2698568d857555',1,'cox_prop_hazards.sql_in']]],
+  ['coxph_5fpredict',['coxph_predict',['../cox__prop__hazards_8sql__in.html#a0ad613a529ee147565a605d6f443a4bd',1,'coxph_predict(text model_table, text source_table, text id_col_name, text output_table, text pred_type, text reference):&#160;cox_prop_hazards.sql_in'],['../cox__prop__hazards_8sql__in.html#a815961d52fb8ce998071eb92056ee1dd',1,'coxph_predict(text model_table, text source_table, text id_col_name, text output_table, text pred_type):&#160;cox_prop_hazards.sql_in'],['../cox__prop__hazards_8sql__in.html#acd445fe632e93b2c8260b0455478e2e5',1,'coxph_predict(text model_table, text source_table, text id_col_name, text output_table):&#160;cox_prop_hazards.sql_in'],['../cox__prop__hazards_8sql__in.html#a9edc6c578176561159b2ecde7415a751',1,'coxph_predict(varchar message):&#160;cox_prop_hazards.sql_in'],['../cox__prop__hazards_8sql__in.html#a3f1a4a5844c5b2629bcba051e75eee70',1,'coxph_predict():&#160;cox_prop_hazards.sql_in']]],
+  ['coxph_5fstep_5finner_5ffinal',['coxph_step_inner_final',['../cox__prop__hazards_8sql__in.html#a3c96655e41fd17c86dfc9ad37b0959d0',1,'cox_prop_hazards.sql_in']]],
+  ['coxph_5fstep_5fouter_5ftransition',['coxph_step_outer_transition',['../cox__prop__hazards_8sql__in.html#abaf93fc77a284f0b765a64ef827c1bed',1,'cox_prop_hazards.sql_in']]],
+  ['coxph_5ftrain',['coxph_train',['../cox__prop__hazards_8sql__in.html#a737450bbfe0f10204b0074a9d45b0cef',1,'coxph_train(varchar source_table, varchar output_table, varchar dependent_varname, varchar independent_varname, varchar right_censoring_status, varchar strata, varchar optimizer_params):&#160;cox_prop_hazards.sql_in'],['../cox__prop__hazards_8sql__in.html#ae7edb9499e07fdf835c3bbc297a99c01',1,'coxph_train():&#160;cox_prop_hazards.sql_in'],['../cox__prop__hazards_8sql__in.html#a6f527631dc32178716221cc9dfa1fde4',1,'coxph_train(varchar message):&#160;cox_prop_hazards.sql_in'],['../cox__prop__hazards_8sql__in.html#a3fd1cd09fd5de41d6dc8aca0a18eec8b',1,'coxph_train(varchar source_table, varchar output_table, varchar dependent_variable, varchar independent_variable, varchar right_censoring_status, varchar strata):&#160;cox_prop_hazards.sql_in'],['../cox__prop__hazards_8sql__in.html#afd5fb08d419aab4a8b8eb103afa30f29',1,'coxph_train(varchar source_table, varchar output_table, varchar dependent_variable, varchar independent_variable, varchar right_censoring_status):&#160;cox_prop_hazards.sql_in'],['../cox__prop__hazards_8sql__in.html#a76aeb28f6e0fc47fd59c0d6c6c7be063',1,'coxph_train(varchar source_table, varchar output_table, varchar dependent_variable, varchar independent_variable):&#160;cox_prop_hazards.sql_in']]],
+  ['create_5findicator_5fvariables',['create_indicator_variables',['../create__indicators_8sql__in.html#a0add50a6ab76682bde7825fc54f4d64b',1,'create_indicator_variables(text source_table, text out_table, text categorical_cols, boolean keep_null, text distributed_by):&#160;create_indicators.sql_in'],['../create__indicators_8sql__in.html#a05dbb30d8dd8589e75a96b3232cafe65',1,'create_indicator_variables(text source_table, text out_table, text categorical_cols, boolean keep_null):&#160;create_indicators.sql_in'],['../create__indicators_8sql__in.html#a617b67999ab8c9c07fb0d24101a1115d',1,'create_indicator_variables(text source_table, text out_table, text categorical_cols):&#160;create_indicators.sql_in'],['../create__indicators_8sql__in.html#a839b64f47a11a35c5df24ee93e36ba26',1,'create_indicator_variables(varchar message):&#160;create_indicators.sql_in'],['../create__indicators_8sql__in.html#a5d0ef27bc38be2b4b5f063cf7b560d1f',1,'create_indicator_variables():&#160;create_indicators.sql_in']]],
+  ['create_5findicators_2esql_5fin',['create_indicators.sql_in',['../create__indicators_8sql__in.html',1,'']]],
+  ['create_5fnb_5fclassify_5fview',['create_nb_classify_view',['../bayes_8sql__in.html#a798402280fc6db710957ae3ab58767e0',1,'create_nb_classify_view(varchar featureProbsSource, varchar classPriorsSource, varchar classifySource, varchar classifyKeyColumn, varchar classifyAttrColumn, integer numAttrs, varchar destName):&#160;bayes.sql_in'],['../bayes_8sql__in.html#a4e8e24120269be2b58f959ab5473b2cb',1,'create_nb_classify_view(varchar featureProbsSource, varchar classPriorsSource, varchar classifySource, varchar classifyKeyColumn, varchar classifyAttrColumn, integer numAttrs, varchar numericFeatureStatsSource, varchar destName):&#160;bayes.sql_in'],['../bayes_8sql__in.html#a6472f620099368cb8c334e0badb12133',1,'create_nb_classify_view(varchar trainingSource, varchar trainingClassColumn, varchar trainingAttrColumn, varchar classifySource, varchar classifyKeyColumn, varchar classifyAttrColumn, integer numAttrs, varchar destName):&#160;bayes.sql_in'],['../bayes_8sql__in.html#a76a03f1d7ff2b1891cb310668077b386',1,'create_nb_classify_view(varchar trainingSource, varchar trainingClassColumn, varchar trainingAttrColumn, varchar numericAttrsColumnIndices, varchar classifySource, varchar classifyKeyColumn, varchar classifyAttrColumn, integer numAttrs, varchar destName):&#160;bayes.sql_in']]],
+  ['create_5fnb_5fprepared_5fdata_5ftables',['create_nb_prepared_data_tables',['../bayes_8sql__in.html#aeb4eae7843dd789cc38d5fc57f4ccfb2',1,'create_nb_prepared_data_tables(varchar trainingSource, varchar trainingClassColumn, varchar trainingAttrColumn, integer numAttrs, varchar featureProbsDestName, varchar classPriorsDestName):&#160;bayes.sql_in'],['../bayes_8sql__in.html#a3ed5ddbc4cab1013db8604be58a6da3d',1,'create_nb_prepared_data_tables(varchar trainingSource, varchar trainingClassColumn, varchar trainingAttrColumn, varchar numericAttrsColumnIndices, integer numAttrs, varchar featureProbsDestName, varchar numericFeatureStatsDestName, varchar classPriorsDestName):&#160;bayes.sql_in']]],
+  ['create_5fnb_5fprobs_5fview',['create_nb_probs_view',['../bayes_8sql__in.html#a163afffd0c845d325f060f74bcf02243',1,'create_nb_probs_view(varchar featureProbsSource, varchar classPriorsSource, varchar classifySource, varchar classifyKeyColumn, varchar classifyAttrColumn, integer numAttrs, varchar destName):&#160;bayes.sql_in'],['../bayes_8sql__in.html#a2e02b0ebb0b4c2ca77b1748662bae78f',1,'create_nb_probs_view(varchar featureProbsSource, varchar classPriorsSource, varchar classifySource, varchar classifyKeyColumn, varchar classifyAttrColumn, integer numAttrs, varchar numericFeatureStatsSource, varchar destName):&#160;bayes.sql_in'],['../bayes_8sql__in.html#aba5d695641530e55b25c8007b77142b9',1,'create_nb_probs_view(varchar trainingSource, varchar trainingClassColumn, varchar trainingAttrColumn, varchar classifySource, varchar classifyKeyColumn, varchar classifyAttrColumn, integer numAttrs, varchar destName):&#160;bayes.sql_in'],['../bayes_8sql__in.html#a6d1186aa04f4d4e3ac44035467818d3c',1,'create_nb_probs_view(varchar trainingSource, varchar trainingClassColumn, varchar trainingAttrColumn, varchar numericAttrsColumnIndices, varchar classifySource, varchar classifyKeyColumn, varchar classifyAttrColumn, integer numAttrs, varchar destName):&#160;bayes.sql_in']]],
+  ['create_5fschema_5fpg_5ftemp',['create_schema_pg_temp',['../utilities_8sql__in.html#a56501b6f9fabe65d7a6a6beb70a0e000',1,'utilities.sql_in']]],
+  ['crf_2esql_5fin',['crf.sql_in',['../crf_8sql__in.html',1,'']]],
+  ['crf_5fdata_5floader_2esql_5fin',['crf_data_loader.sql_in',['../crf__data__loader_8sql__in.html',1,'']]],
+  ['crf_5ffeature_5fgen_2esql_5fin',['crf_feature_gen.sql_in',['../crf__feature__gen_8sql__in.html',1,'']]],
+  ['crf_5ftest_5fdata',['crf_test_data',['../crf__data__loader_8sql__in.html#abf2a39a0b84a5e7ae215db28b3a87f81',1,'crf_data_loader.sql_in']]],
+  ['crf_5ftest_5ffgen',['crf_test_fgen',['../crf__feature__gen_8sql__in.html#ad9af2c3d1a4f1c937795634ca297dede',1,'crf_feature_gen.sql_in']]],
+  ['crf_5ftrain_5fdata',['crf_train_data',['../crf__data__loader_8sql__in.html#aaa609ec1d1d4cff0f335fa358091d5c3',1,'crf_data_loader.sql_in']]],
+  ['crf_5ftrain_5ffgen',['crf_train_fgen',['../crf__feature__gen_8sql__in.html#a3548bd640c2af456f3755cb24b913ebd',1,'crf_feature_gen.sql_in']]],
+  ['cross_5fvalidation_2esql_5fin',['cross_validation.sql_in',['../cross__validation_8sql__in.html',1,'']]],
+  ['cross_5fvalidation_5fgeneral',['cross_validation_general',['../cross__validation_8sql__in.html#a2a7791b05f51e8748ab7b6ccf328a7e2',1,'cross_validation_general(varchar modelling_func, varchar[] modelling_params, varchar[] modelling_params_type, varchar param_explored, varchar[] explore_values, varchar predict_func, varchar[] predict_params, varchar[] predict_params_type, varchar metric_func, varchar[] metric_params, varchar[] metric_params_type, varchar data_tbl, varchar data_id, boolean id_is_random, varchar validation_result, varchar[] data_cols, integer n_folds):&#160;cross_validation.sql_in'],['../cross__validation_8sql__in.html#a5efbb27898e99f7685816d9d5dfd082c',1,'cross_validation_general(varchar modelling_func, varchar[] modelling_params, varchar[] modelling_params_type, varchar param_explored, varchar[] explore_values, varchar predict_func, varchar[] predict_params, varchar[] predict_params_type, varchar metric_func, varchar[] metric_params, varchar[] metric_params_type, varchar data_tbl, varchar data_id, boolean id_is_random, varchar validation_result, varchar[] data_cols):&#160;cross_validation.sql_in']]],
+  ['crossprod',['crossprod',['../pivotalr__arrayops_8sql__in.html#a588d5855d1673f7bcbc2a1c983081f76',1,'pivotalr_arrayops.sql_in']]],
+  ['crossprod_5fsym',['crossprod_sym',['../pivotalr__arrayops_8sql__in.html#aa1e36bf44b3206314c186bba80179c9c',1,'pivotalr_arrayops.sql_in']]],
+  ['cv_5flinregr_5fpredict',['cv_linregr_predict',['../cross__validation_8sql__in.html#aa572f1f57c0dd106b30948928161d8cc',1,'cross_validation.sql_in']]],
+  ['cv_5flinregr_5ftrain',['cv_linregr_train',['../cross__validation_8sql__in.html#aa151eb3fa9acc7f4cc33236e22ad4362',1,'cross_validation.sql_in']]],
+  ['cv_5flogregr_5faccuracy',['cv_logregr_accuracy',['../cross__validation_8sql__in.html#ac1b5c57473ff672af45191c8d53f46ed',1,'cross_validation.sql_in']]],
+  ['cv_5flogregr_5fpredict',['cv_logregr_predict',['../cross__validation_8sql__in.html#ac7dbc115f0c4624ccbf62b2d5494388d',1,'cross_validation.sql_in']]],
+  ['conjugate_20gradient',['Conjugate Gradient',['../group__grp__cg.html',1,'']]],
+  ['clustered_20variance',['Clustered Variance',['../group__grp__clustered__errors.html',1,'']]],
+  ['clustering',['Clustering',['../group__grp__clustering.html',1,'']]],
+  ['columns_20to_20vector',['Columns to Vector',['../group__grp__cols2vec.html',1,'']]],
+  ['covariance_20and_20correlation',['Covariance and Correlation',['../group__grp__correlation.html',1,'']]],
+  ['countmin_20_28cormode_2dmuthukrishnan_29',['CountMin (Cormode-Muthukrishnan)',['../group__grp__countmin.html',1,'']]],
+  ['cox_2dproportional_20hazards_20regression',['Cox-Proportional Hazards Regression',['../group__grp__cox__prop__hazards.html',1,'']]],
+  ['conditional_20random_20field',['Conditional Random Field',['../group__grp__crf.html',1,'']]],
+  ['closeness',['Closeness',['../group__grp__graph__closeness.html',1,'']]],
+  ['create_20indicator_20variables',['Create Indicator Variables',['../group__grp__indicator.html',1,'']]],
+  ['cardinality_20estimators',['Cardinality Estimators',['../group__grp__sketches.html',1,'']]],
+  ['cross_20validation',['Cross Validation',['../group__grp__validation.html',1,'']]]
+];
diff --git a/docs/rc/search/all_4.html b/docs/rc/search/all_4.html
new file mode 100644
index 0000000..8e1f4b9
--- /dev/null
+++ b/docs/rc/search/all_4.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_4.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/all_4.js b/docs/rc/search/all_4.js
new file mode 100644
index 0000000..840d5ff
--- /dev/null
+++ b/docs/rc/search/all_4.js
@@ -0,0 +1,35 @@
+var searchData=
+[
+  ['decision_5ftree_2esql_5fin',['decision_tree.sql_in',['../decision__tree_8sql__in.html',1,'']]],
+  ['deconstruct_5f2d_5farray',['deconstruct_2d_array',['../linalg_8sql__in.html#a21d0a134f1674f71b3e872aacc5f3789',1,'linalg.sql_in']]],
+  ['delete_5fkeras_5fmodel',['delete_keras_model',['../keras__model__arch__table_8sql__in.html#a53fd46319b173ad59a1f21732c23c1f0',1,'delete_keras_model(varchar keras_model_arch_table, integer model_id):&#160;keras_model_arch_table.sql_in'],['../keras__model__arch__table_8sql__in.html#af8840de8b579cc9e0ce826b977cf8d80',1,'delete_keras_model(varchar message):&#160;keras_model_arch_table.sql_in'],['../keras__model__arch__table_8sql__in.html#ab1d0a9b4830f62938129a95f4c7c5d0d',1,'delete_keras_model():&#160;keras_model_arch_table.sql_in']]],
+  ['dense_5fdirect_5flinear_5fsystem',['dense_direct_linear_system',['../dense__linear__systems_8sql__in.html#a379f260d8dfbf5c2be05c60776974188',1,'dense_linear_systems.sql_in']]],
+  ['dense_5fdirect_5flinear_5fsystem_5ffinal',['dense_direct_linear_system_final',['../dense__linear__systems_8sql__in.html#a63a3ed2c811216d3d88c120005a13875',1,'dense_linear_systems.sql_in']]],
+  ['dense_5fdirect_5flinear_5fsystem_5fmerge_5fstates',['dense_direct_linear_system_merge_states',['../dense__linear__systems_8sql__in.html#a607403f90e1921435183d031825e5e54',1,'dense_linear_systems.sql_in']]],
+  ['dense_5fdirect_5flinear_5fsystem_5ftransition',['dense_direct_linear_system_transition',['../dense__linear__systems_8sql__in.html#acbfc47693d0b50ccfc6b7f7c38209b18',1,'dense_linear_systems.sql_in']]],
+  ['dense_5flinear_5fsystems_2esql_5fin',['dense_linear_systems.sql_in',['../dense__linear__systems_8sql__in.html',1,'']]],
+  ['dense_5fresidual_5fnorm',['dense_residual_norm',['../dense__linear__systems_8sql__in.html#a52f2bcdd0d038f19e64a44d4bb07fefb',1,'dense_linear_systems.sql_in']]],
+  ['dense_5fresidual_5fnorm_5ffinal',['dense_residual_norm_final',['../dense__linear__systems_8sql__in.html#a01935dd8c4aef8c92e77b7f0f905fa4b',1,'dense_linear_systems.sql_in']]],
+  ['dense_5fresidual_5fnorm_5fmerge_5fstates',['dense_residual_norm_merge_states',['../dense__linear__systems_8sql__in.html#a73ebde08b8395fd7bddbe1dc37b9539f',1,'dense_linear_systems.sql_in']]],
+  ['dense_5fresidual_5fnorm_5ftransition',['dense_residual_norm_transition',['../dense__linear__systems_8sql__in.html#ad34728809ab3121705342cf91b34c6dd',1,'dense_linear_systems.sql_in']]],
+  ['discrete_5fdistribution_5fagg',['discrete_distribution_agg',['../distribution_8sql__in.html#af9418a44cb502919d54c59e909e19606',1,'distribution.sql_in']]],
+  ['discrete_5fdistribution_5ffinal',['discrete_distribution_final',['../distribution_8sql__in.html#a99a03822b9063a37df8641cfcf2e450b',1,'distribution.sql_in']]],
+  ['discrete_5fdistribution_5ftransition',['discrete_distribution_transition',['../distribution_8sql__in.html#aa7e45a9ebd2b5ad656e61aa9276116d3',1,'distribution.sql_in']]],
+  ['dist_5fangle',['dist_angle',['../linalg_8sql__in.html#a8c7b9281a72ff22caf06161701b27e84',1,'linalg.sql_in']]],
+  ['dist_5finf_5fnorm',['dist_inf_norm',['../linalg_8sql__in.html#a31fa9f2f5b45507c09f136464fdad1db',1,'linalg.sql_in']]],
+  ['dist_5fjaccard',['dist_jaccard',['../linalg_8sql__in.html#ac1397ac9f4a35b3b67c3be05b5e1a828',1,'linalg.sql_in']]],
+  ['dist_5fnorm1',['dist_norm1',['../linalg_8sql__in.html#aad193850e79c4b9d811ca9bc53e13476',1,'linalg.sql_in']]],
+  ['dist_5fnorm2',['dist_norm2',['../linalg_8sql__in.html#aa58e51526edea6ea98db30b6f250adb4',1,'linalg.sql_in']]],
+  ['dist_5fpnorm',['dist_pnorm',['../linalg_8sql__in.html#ad9cc156ae57bf7c0a2fe90798259105a',1,'linalg.sql_in']]],
+  ['dist_5ftanimoto',['dist_tanimoto',['../linalg_8sql__in.html#afa13b4c6122b99422d666dedea136c18',1,'linalg.sql_in']]],
+  ['distribution_2esql_5fin',['distribution.sql_in',['../distribution_8sql__in.html',1,'']]],
+  ['dropcols',['dropcols',['../utilities_8sql__in.html#a244f77f87f2612800b1683033a21dcca',1,'utilities.sql_in']]],
+  ['data_20types_20and_20transformations',['Data Types and Transformations',['../group__grp__datatrans.html',1,'']]],
+  ['decision_20tree',['Decision Tree',['../group__grp__decision__tree.html',1,'']]],
+  ['dense_20linear_20systems',['Dense Linear Systems',['../group__grp__dense__linear__solver.html',1,'']]],
+  ['deprecated_20modules',['Deprecated Modules',['../group__grp__deprecated.html',1,'']]],
+  ['descriptive_20statistics',['Descriptive Statistics',['../group__grp__desc__stats.html',1,'']]],
+  ['deep_20learning',['Deep Learning',['../group__grp__dl.html',1,'']]],
+  ['dimensionality_20reduction',['Dimensionality Reduction',['../group__grp__pca.html',1,'']]],
+  ['database_20functions',['Database Functions',['../group__grp__utilities.html',1,'']]]
+];
diff --git a/docs/rc/search/all_5.html b/docs/rc/search/all_5.html
new file mode 100644
index 0000000..89a879e
--- /dev/null
+++ b/docs/rc/search/all_5.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_5.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/all_5.js b/docs/rc/search/all_5.js
new file mode 100644
index 0000000..b3be263
--- /dev/null
+++ b/docs/rc/search/all_5.js
@@ -0,0 +1,21 @@
+var searchData=
+[
+  ['elastic_5fnet_2esql_5fin',['elastic_net.sql_in',['../elastic__net_8sql__in.html',1,'']]],
+  ['elastic_5fnet_5fbinomial_5fpredict',['elastic_net_binomial_predict',['../elastic__net_8sql__in.html#aa78cde79f1f2caa7c5b38f933001d793',1,'elastic_net.sql_in']]],
+  ['elastic_5fnet_5fbinomial_5fprob',['elastic_net_binomial_prob',['../elastic__net_8sql__in.html#a308718fd5234bc1007b971a639aadf71',1,'elastic_net.sql_in']]],
+  ['elastic_5fnet_5fgaussian_5fpredict',['elastic_net_gaussian_predict',['../elastic__net_8sql__in.html#a96db4ff4ba3ea363fafbf6c036c19fae',1,'elastic_net.sql_in']]],
+  ['elastic_5fnet_5fpredict',['elastic_net_predict',['../elastic__net_8sql__in.html#a3578608204ac9b2d3442ff42977f632b',1,'elastic_net_predict(text tbl_model, text tbl_new_source, text col_id, text tbl_predict):&#160;elastic_net.sql_in'],['../elastic__net_8sql__in.html#aaddbfdfea4207d38ab7e2cd3db876bdc',1,'elastic_net_predict(text regress_family, float8[] coefficients, float8 intercept, float8[] ind_var):&#160;elastic_net.sql_in']]],
+  ['elastic_5fnet_5ftrain',['elastic_net_train',['../elastic__net_8sql__in.html#a735038a5090c112505c740a90a203e83',1,'elastic_net_train(text tbl_source, text tbl_result, text col_dep_var, text col_ind_var, text regress_family, float8 alpha, float8 lambda_value, boolean standardize, text grouping_col, text optimizer, text optimizer_params, text excluded, integer max_iter, float8 tolerance):&#160;elastic_net.sql_in'],['../elastic__net_8sql__in.html#a148de1ad5e1e60b9df3d3af590c06579',1,'elastic_net_train(text tbl_source, text tbl_result, text col_ind_var, text col_dep_var, text regress_family, float8 alpha, float8 lambda_value, boolean standardization, text grouping_columns, text optimizer, text optimizer_params, text excluded, integer max_iter):&#160;elastic_net.sql_in'],['../elastic__net_8sql__in.html#a63c8ed415005cc446a59bdc47a09791d',1,'elastic_net_train(text tbl_source, text tbl_result, text col_ind_var, text col_dep_var, text regress_family, float8 alpha, float8 lambda_value, boolean standardization, text grouping_columns, text optimizer, text optimizer_params, text excluded):&#160;elastic_net.sql_in'],['../elastic__net_8sql__in.html#ac26504e7ac55190207758356d821a01a',1,'elastic_net_train(text tbl_source, text tbl_result, text col_ind_var, text col_dep_var, text regress_family, float8 alpha, float8 lambda_value, boolean standardization, text grouping_columns, text optimizer, text optimizer_params):&#160;elastic_net.sql_in'],['../elastic__net_8sql__in.html#a7e698f9a0c7a1aa43f4bf9e169dc8b35',1,'elastic_net_train(text tbl_source, text tbl_result, text col_ind_var, text col_dep_var, text regress_family, float8 alpha, float8 lambda_value, boolean standardization, text grouping_columns, text optimizer):&#160;elastic_net.sql_in'],['../elastic__net_8sql__in.html#ab54d8862d3ad299aceca4ac2c914437e',1,'elastic_net_train(text tbl_source, text tbl_result, text col_ind_var, text col_dep_var, text regress_family, float8 alpha, float8 lambda_value, boolean standardization, text grouping_columns):&#160;elastic_net.sql_in'],['../elastic__net_8sql__in.html#a0351b7ed17eccb6db2c0bd61b421458b',1,'elastic_net_train(text tbl_source, text tbl_result, text col_ind_var, text col_dep_var, text regress_family, float8 alpha, float8 lambda_value, boolean standardization):&#160;elastic_net.sql_in'],['../elastic__net_8sql__in.html#a1a57491bc6b156d575bb93edb986aaa5',1,'elastic_net_train(text tbl_source, text tbl_result, text col_ind_var, text col_dep_var, text regress_family, float8 alpha, float8 lambda_value):&#160;elastic_net.sql_in'],['../elastic__net_8sql__in.html#add7e2592fb0bd9f2eb1d8b176c80b5d0',1,'elastic_net_train():&#160;elastic_net.sql_in'],['../elastic__net_8sql__in.html#a6f6ee3def49b5e9a1d3375fe41427dc0',1,'elastic_net_train(text family_or_optimizer):&#160;elastic_net.sql_in']]],
+  ['encode_5fcategorical_2esql_5fin',['encode_categorical.sql_in',['../encode__categorical_8sql__in.html',1,'']]],
+  ['encode_5fcategorical_5fvariables',['encode_categorical_variables',['../encode__categorical_8sql__in.html#ab508855c762d04c77e993e30d655995e',1,'encode_categorical_variables(varchar source_table, varchar output_table, varchar categorical_cols, varchar categorical_cols_to_exclude, varchar row_id, varchar top, varchar value_to_drop, boolean encode_null, varchar output_type, boolean output_dictionary, varchar distributed_by):&#160;encode_categorical.sql_in'],['../encode__categorical_8sql__in.html#a6685fbb11c4f68a25c232a6035c752c4',1,'encode_categorical_variables(varchar source_table, varchar output_table, varchar categorical_cols, varchar categorical_cols_to_exclude, varchar row_id, varchar top, varchar value_to_drop, boolean encode_null, varchar output_type, boolean output_dictionary):&#160;encode_categorical.sql_in'],['../encode__categorical_8sql__in.html#a5ea1ae2dc53c77b047cd1dc186739bc7',1,'encode_categorical_variables(varchar source_table, varchar output_table, varchar categorical_cols, varchar categorical_cols_to_exclude, varchar row_id, varchar top, varchar value_to_drop, boolean encode_null, varchar output_type):&#160;encode_categorical.sql_in'],['../encode__categorical_8sql__in.html#a63e256d5d0aefbcf29d74669276bdf20',1,'encode_categorical_variables(varchar source_table, varchar output_table, varchar categorical_cols, varchar categorical_cols_to_exclude, varchar row_id, varchar top, varchar value_to_drop, boolean encode_null):&#160;encode_categorical.sql_in'],['../encode__categorical_8sql__in.html#ab26bb9de11a426fd1cff17dce24ba98d',1,'encode_categorical_variables(varchar source_table, varchar output_table, varchar categorical_cols, varchar categorical_cols_to_exclude, varchar row_id, varchar top, varchar value_to_drop):&#160;encode_categorical.sql_in'],['../encode__categorical_8sql__in.html#a4a5f5774f0b6aad31427a47064565c82',1,'encode_categorical_variables(varchar source_table, varchar output_table, varchar categorical_cols, varchar categorical_cols_to_exclude, varchar row_id, varchar top):&#160;encode_categorical.sql_in'],['../encode__categorical_8sql__in.html#a31753df1ea819930436ab2d10b996599',1,'encode_categorical_variables(varchar source_table, varchar output_table, varchar categorical_cols, varchar categorical_cols_to_exclude, varchar row_id):&#160;encode_categorical.sql_in'],['../encode__categorical_8sql__in.html#a1f60121c4552a526513561281bf371f3',1,'encode_categorical_variables(varchar source_table, varchar output_table, varchar categorical_cols, varchar categorical_cols_to_exclude):&#160;encode_categorical.sql_in'],['../encode__categorical_8sql__in.html#a6a92afff73eb09fa0b7db489bd009235',1,'encode_categorical_variables(varchar source_table, varchar output_table, varchar categorical_cols):&#160;encode_categorical.sql_in'],['../encode__categorical_8sql__in.html#ab5c44316240bb072316870e43ff2d715',1,'encode_categorical_variables(varchar message):&#160;encode_categorical.sql_in'],['../encode__categorical_8sql__in.html#a8fea222d67f69c73255dbdee2746bed5',1,'encode_categorical_variables():&#160;encode_categorical.sql_in']]],
+  ['end',['END',['../random__forest_8sql__in.html#a1de54bd922161dd5c6a353647f448fd6',1,'random_forest.sql_in']]],
+  ['exponential_5fcdf',['exponential_cdf',['../prob_8sql__in.html#a6d1bf6816f56b8e5ba6bf6ca94752f46',1,'prob.sql_in']]],
+  ['exponential_5fpdf',['exponential_pdf',['../prob_8sql__in.html#a18a5458c4bc85f0c4ea321317f90bdbb',1,'prob.sql_in']]],
+  ['exponential_5fquantile',['exponential_quantile',['../prob_8sql__in.html#ae3687b8e69a402154b829a6531b1b279',1,'prob.sql_in']]],
+  ['extreme_5fvalue_5fcdf',['extreme_value_cdf',['../prob_8sql__in.html#acffffe04c15eccd2e88cdac250bccc68',1,'prob.sql_in']]],
+  ['extreme_5fvalue_5fpdf',['extreme_value_pdf',['../prob_8sql__in.html#a03a3494462f4cb8c9fb6212e72b0b2e9',1,'prob.sql_in']]],
+  ['extreme_5fvalue_5fquantile',['extreme_value_quantile',['../prob_8sql__in.html#aeb5a7d295b83a891774a4fb0ef27c458',1,'prob.sql_in']]],
+  ['early_20stage_20development',['Early Stage Development',['../group__grp__early__stage.html',1,'']]],
+  ['elastic_20net_20regularization',['Elastic Net Regularization',['../group__grp__elasticnet.html',1,'']]],
+  ['encoding_20categorical_20variables',['Encoding Categorical Variables',['../group__grp__encode__categorical.html',1,'']]]
+];
diff --git a/docs/rc/search/all_6.html b/docs/rc/search/all_6.html
new file mode 100644
index 0000000..6afac06
--- /dev/null
+++ b/docs/rc/search/all_6.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_6.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/all_6.js b/docs/rc/search/all_6.js
new file mode 100644
index 0000000..e783c9c
--- /dev/null
+++ b/docs/rc/search/all_6.js
@@ -0,0 +1,33 @@
+var searchData=
+[
+  ['f_5ftest',['f_test',['../hypothesis__tests_8sql__in.html#a5a946aa469ff6ddf8d276db16fa26ad4',1,'hypothesis_tests.sql_in']]],
+  ['f_5ftest_5ffinal',['f_test_final',['../hypothesis__tests_8sql__in.html#abc6006e8da028dd93ac48b8fd9ae8786',1,'hypothesis_tests.sql_in']]],
+  ['fisher_5ff_5fcdf',['fisher_f_cdf',['../prob_8sql__in.html#a6c5b3e35531e44098f9d0cbef14cb8a6',1,'prob.sql_in']]],
+  ['fisher_5ff_5fpdf',['fisher_f_pdf',['../prob_8sql__in.html#a1c7937426379a8913519a6abc5a38ac2',1,'prob.sql_in']]],
+  ['fisher_5ff_5fquantile',['fisher_f_quantile',['../prob_8sql__in.html#ab6ed888a5338a0bee9c55edf4d33847f',1,'prob.sql_in']]],
+  ['fit_5ffinal',['fit_final',['../madlib__keras_8sql__in.html#afed0955ca706593416484f91c9248c3c',1,'madlib_keras.sql_in']]],
+  ['fit_5fmerge',['fit_merge',['../madlib__keras_8sql__in.html#acb0ec519bd8ee5ed964d092ca1654e6a',1,'madlib_keras.sql_in']]],
+  ['fit_5fstep',['fit_step',['../madlib__keras_8sql__in.html#ae1f24820d99f9536085b2c20bc0bfd58',1,'madlib_keras.sql_in']]],
+  ['fit_5fstep_5fmultiple_5fmodel',['fit_step_multiple_model',['../madlib__keras__fit__multiple__model_8sql__in.html#a99721919cc2d29c4caf92a73c2c00790',1,'madlib_keras_fit_multiple_model.sql_in']]],
+  ['fit_5ftransition',['fit_transition',['../madlib__keras_8sql__in.html#a850f8c8fcfe7b4999aebee849252f703',1,'madlib_keras.sql_in']]],
+  ['fit_5ftransition_5fmultiple_5fmodel',['fit_transition_multiple_model',['../madlib__keras__fit__multiple__model_8sql__in.html#ac2b3f256c5cefe8e2760d93a586fcd95',1,'madlib_keras_fit_multiple_model.sql_in']]],
+  ['float8arr_5fcast_5ffloat4',['float8arr_cast_float4',['../svec_8sql__in.html#a2a6e17fd9dafc349c7cfa070486e6ad1',1,'svec.sql_in']]],
+  ['float8arr_5fcast_5ffloat8',['float8arr_cast_float8',['../svec_8sql__in.html#af8db439cf1a73749052f06fc30c7d282',1,'svec.sql_in']]],
+  ['float8arr_5fcast_5fint2',['float8arr_cast_int2',['../svec_8sql__in.html#a5e38a27f556a6ac88549efec37da786f',1,'svec.sql_in']]],
+  ['float8arr_5fcast_5fint4',['float8arr_cast_int4',['../svec_8sql__in.html#a9c05d02233680a2e96dc6058155e4483',1,'svec.sql_in']]],
+  ['float8arr_5fcast_5fint8',['float8arr_cast_int8',['../svec_8sql__in.html#a4862b4e281323db16e9be4dfd681db2e',1,'svec.sql_in']]],
+  ['float8arr_5fcast_5fnumeric',['float8arr_cast_numeric',['../svec_8sql__in.html#a0bc8ef7e7b8e37b784c81a940bd817f0',1,'svec.sql_in']]],
+  ['float8arr_5fdiv_5ffloat8arr',['float8arr_div_float8arr',['../svec_8sql__in.html#a20d4a7b907e967351f6439640482e0f9',1,'svec.sql_in']]],
+  ['float8arr_5fdiv_5fsvec',['float8arr_div_svec',['../svec_8sql__in.html#a5c4ac1cc9a2ee3057958070b8e7bffcc',1,'svec.sql_in']]],
+  ['float8arr_5feq',['float8arr_eq',['../svec_8sql__in.html#a0684988340d533c00523951f9a95107e',1,'svec.sql_in']]],
+  ['float8arr_5fminus_5ffloat8arr',['float8arr_minus_float8arr',['../svec_8sql__in.html#a4c82ac5de8e026c85e83aae4e0f06220',1,'svec.sql_in']]],
+  ['float8arr_5fminus_5fsvec',['float8arr_minus_svec',['../svec_8sql__in.html#a457f2f9210baba1c13820801c42cd06a',1,'svec.sql_in']]],
+  ['float8arr_5fmult_5ffloat8arr',['float8arr_mult_float8arr',['../svec_8sql__in.html#abb0b3f155c45bb370ef7adac49096835',1,'svec.sql_in']]],
+  ['float8arr_5fmult_5fsvec',['float8arr_mult_svec',['../svec_8sql__in.html#a0e7dd7a82b41f4b8344efa21208e1637',1,'svec.sql_in']]],
+  ['float8arr_5fplus_5ffloat8arr',['float8arr_plus_float8arr',['../svec_8sql__in.html#a6bb068ab6ba775619fe787ed845f5a0d',1,'svec.sql_in']]],
+  ['float8arr_5fplus_5fsvec',['float8arr_plus_svec',['../svec_8sql__in.html#a98aa60ec0c58c828b0a72c75d604322e',1,'svec.sql_in']]],
+  ['fmsketch_5fdcount',['fmsketch_dcount',['../sketch_8sql__in.html#ae27d5aaa5e4b426bcfe55e05a89c8e0b',1,'sketch.sql_in']]],
+  ['forest_5fpredict',['forest_predict',['../random__forest_8sql__in.html#a21d04e51fb54f374bbdc9810f3386b11',1,'forest_predict(text model, text source, text output, text pred_type):&#160;random_forest.sql_in'],['../random__forest_8sql__in.html#aef268338ffa67f54ca1371326bb25fa0',1,'forest_predict(text model, text source, text output):&#160;random_forest.sql_in'],['../random__forest_8sql__in.html#a072cf9e76a6c9351a6089a3989f7e859',1,'forest_predict(text message):&#160;random_forest.sql_in'],['../random__forest_8sql__in.html#a2f1d729cd2f2f3b8102a97f9063dae40',1,'forest_predict():&#160;random_forest.sql_in']]],
+  ['forest_5ftrain',['forest_train',['../random__forest_8sql__in.html#a449144c760063041399eaed682d17af4',1,'forest_train(text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text grouping_cols, integer num_trees, integer num_random_features, boolean importance, integer num_permutations, integer max_tree_depth, integer min_split, integer min_bucket, integer num_splits, text null_handling_params, boolean verbose, float8 sample_ratio):&#160;random_forest.sql_in'],['../random__forest_8sql__in.html#a5d5622998b4e3ab4ee0b22de9c436960',1,'forest_train(text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text grouping_cols, integer num_trees, integer num_random_features, boolean importance, integer num_permutations, integer max_tree_depth, integer min_split, integer min_bucket, integer num_splits, text null_handling_params, boolean verbose):&#160;random_forest.sql_in'],['../random__forest_8sql__in.html#ae0786fea458787a914e9711ee167750d',1,'forest_train(text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text grouping_cols, integer num_trees, integer num_random_features, boolean importance, integer num_permutations, integer max_tree_depth, integer min_split, integer min_bucket, integer num_splits, text null_handling_params):&#160;random_forest.sql_in'],['../random__forest_8sql__in.html#af2e84b0cdcd87adbabbc5fa8caba9467',1,'forest_train(text message):&#160;random_forest.sql_in'],['../random__forest_8sql__in.html#aae56e36fc47ff539b9155180c8c0abb3',1,'forest_train():&#160;random_forest.sql_in'],['../random__forest_8sql__in.html#a77c66aa21874aa49cb6a236b8c91cef4',1,'forest_train(text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text grouping_cols, integer num_trees, integer num_random_features, boolean importance, integer num_permutations, integer max_tree_depth, integer min_split, integer min_bucket, integer num_splits):&#160;random_forest.sql_in'],['../random__forest_8sql__in.html#a58a8ac26acb60396b15dabaaa3c4b742',1,'forest_train(text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text grouping_cols, integer num_trees, integer num_random_features, boolean importance, integer num_permutations, integer max_tree_depth, integer min_split, integer min_bucket):&#160;random_forest.sql_in'],['../random__forest_8sql__in.html#af7314fae3406399700ba75a6f385fda7',1,'forest_train(text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text grouping_cols, integer num_trees, integer num_random_features, boolean importance, integer num_permutations, integer max_tree_depth, integer min_split):&#160;random_forest.sql_in'],['../random__forest_8sql__in.html#aa2b0e1092f8a0e789a1c8c50a88e966b',1,'forest_train(text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text grouping_cols, integer num_trees, integer num_random_features, boolean importance, integer num_permutations, integer max_tree_depth):&#160;random_forest.sql_in'],['../random__forest_8sql__in.html#abdab5d1051736a984eb483a0a84d10a4',1,'forest_train(text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text grouping_cols, integer num_trees, integer num_random_features, boolean importance, integer num_permutations):&#160;random_forest.sql_in'],['../random__forest_8sql__in.html#a741417bcd9541f4d12f45ee70082f4cb',1,'forest_train(text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text grouping_cols, integer num_trees, integer num_random_features, boolean importance):&#160;random_forest.sql_in'],['../random__forest_8sql__in.html#ae577213f72707260dee6f143c319090b',1,'forest_train(text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text grouping_cols, integer num_trees, integer num_random_features):&#160;random_forest.sql_in'],['../random__forest_8sql__in.html#a926e116171a0f794e1eff344de1f4935',1,'forest_train(text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text grouping_cols, integer num_trees):&#160;random_forest.sql_in'],['../random__forest_8sql__in.html#a6f1a5cae6cbb9cbc756e11bf34da5572',1,'forest_train(text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text grouping_cols):&#160;random_forest.sql_in'],['../random__forest_8sql__in.html#a04cbc760f3790bcf69fe48e008cfba3d',1,'forest_train(text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude):&#160;random_forest.sql_in']]],
+  ['fm_20_28flajolet_2dmartin_29',['FM (Flajolet-Martin)',['../group__grp__fmsketch.html',1,'']]]
+];
diff --git a/docs/rc/search/all_7.html b/docs/rc/search/all_7.html
new file mode 100644
index 0000000..de19107
--- /dev/null
+++ b/docs/rc/search/all_7.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_7.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/all_7.js b/docs/rc/search/all_7.js
new file mode 100644
index 0000000..886a006
--- /dev/null
+++ b/docs/rc/search/all_7.js
@@ -0,0 +1,43 @@
+var searchData=
+[
+  ['gamma_5fcdf',['gamma_cdf',['../prob_8sql__in.html#ab6760b0486bad2f1ab0635eb59404e7c',1,'prob.sql_in']]],
+  ['gamma_5fpdf',['gamma_pdf',['../prob_8sql__in.html#a6c37e3bda2596accbb46525321a328c4',1,'prob.sql_in']]],
+  ['gamma_5fquantile',['gamma_quantile',['../prob_8sql__in.html#ac48bbd491bd34831415705c3a0b7bf29',1,'prob.sql_in']]],
+  ['gamma_5frandom',['gamma_random',['../sample_8sql__in.html#afc523f72e64820329acb8874c2a759d3',1,'sample.sql_in']]],
+  ['gen_5fdoc_5fsvecs',['gen_doc_svecs',['../svec__util_8sql__in.html#a6136c83e9c419d783d1ec6db061f8d6e',1,'gen_doc_svecs(text output_tbl, text dictionary_tbl, text dict_id_col, text dict_term_col, text documents_tbl, text doc_id_col, text doc_term_col, text doc_term_info_col):&#160;svec_util.sql_in'],['../svec__util_8sql__in.html#a0c8cd9f0be54a6e739f9ec0bdcbe2d8d',1,'gen_doc_svecs():&#160;svec_util.sql_in']]],
+  ['gen_5frules_5ffrom_5fcfp',['gen_rules_from_cfp',['../assoc__rules_8sql__in.html#a6af43dbd2fe9400f96c1ebf486e8ea40',1,'assoc_rules.sql_in']]],
+  ['geometric_5fcdf',['geometric_cdf',['../prob_8sql__in.html#a00879bdf7d48ceddedb3b4cc33511497',1,'prob.sql_in']]],
+  ['geometric_5fpmf',['geometric_pmf',['../prob_8sql__in.html#a5e08db93bd448a1e2164e106ce5781a4',1,'prob.sql_in']]],
+  ['geometric_5fquantile',['geometric_quantile',['../prob_8sql__in.html#a62674ca958aec0533cdf0a74a1dadea9',1,'prob.sql_in']]],
+  ['get_5fcol',['get_col',['../linalg_8sql__in.html#a20f34c9e661191e5225cca7bc23252c5',1,'linalg.sql_in']]],
+  ['get_5frow',['get_row',['../linalg_8sql__in.html#af6b905fcac7746ef0ed0c36df4a1e070',1,'linalg.sql_in']]],
+  ['get_5ftree',['get_tree',['../random__forest_8sql__in.html#a513524a87a38b2d6a50ac74c5d073a14',1,'get_tree(text model_table, integer gid, integer sample_id, boolean dot_format, boolean verbose):&#160;random_forest.sql_in'],['../random__forest_8sql__in.html#af22b14c3da4f64b544b6c333a8e97070',1,'get_tree(text model_table, integer gid, integer sample_id, boolean dot_format):&#160;random_forest.sql_in'],['../random__forest_8sql__in.html#af2abc993cde32a08278a411c28439bb6',1,'get_tree(text model_table, integer gid, integer sample_id):&#160;random_forest.sql_in'],['../random__forest_8sql__in.html#a6796f6dc96ce0f8b75c75061c348a6bb',1,'get_tree():&#160;random_forest.sql_in']]],
+  ['get_5ftree_5fsurr',['get_tree_surr',['../random__forest_8sql__in.html#a3ba1911b340a431982189e3e1f8c0111',1,'get_tree_surr(text model_table, integer gid, integer sample_id):&#160;random_forest.sql_in'],['../random__forest_8sql__in.html#ab761f190afe9420e791ce6d1a3c3c719',1,'get_tree_surr():&#160;random_forest.sql_in']]],
+  ['get_5fvar_5fimportance',['get_var_importance',['../random__forest_8sql__in.html#aea5ca2b827a4ee552a8c0f4d4d947725',1,'get_var_importance(model_table TEXT, output_table TEXT) RETURNS VOID AS $$ PythonFunction(recursive_partitioning:&#160;random_forest.sql_in'],['../random__forest_8sql__in.html#a02aabd66a900f6cd233274c7d16268ac',1,'get_var_importance(message TEXT) RETURNS TEXT AS $$ PythonFunction(recursive_partitioning:&#160;random_forest.sql_in'],['../random__forest_8sql__in.html#a8a375b28fa555fb9a24dd8177902a7d5',1,'get_var_importance() RETURNS TEXT AS $$ BEGIN RETURN madlib.get_var_importance(&apos;&apos;):&#160;random_forest.sql_in']]],
+  ['glm',['glm',['../glm_8sql__in.html#a3f8eb219013e05675626acb8cf4612cc',1,'glm(varchar source_table, varchar model_table, varchar dependent_varname, varchar independent_varname, varchar family_params, varchar grouping_col, varchar optim_params, boolean verbose):&#160;glm.sql_in'],['../glm_8sql__in.html#a79c8b3660f49977fd3537de1db2e60ba',1,'glm(varchar source_table, varchar model_table, varchar dependent_varname, varchar independent_varname, varchar family_params, varchar grouping_col, varchar optim_params):&#160;glm.sql_in'],['../glm_8sql__in.html#a98f75815c048dd6ec06842f00ef08f2a',1,'glm(varchar source_table, varchar model_table, varchar dependent_varname, varchar independent_varname, varchar family_params, varchar grouping_col):&#160;glm.sql_in'],['../glm_8sql__in.html#a4938524efbef7684ce8a8e2646f126ef',1,'glm(varchar source_table, varchar model_table, varchar dependent_varname, varchar independent_varname, varchar family_params):&#160;glm.sql_in'],['../glm_8sql__in.html#a5887e1ae0feabbbfc93e67ab4447f4bd',1,'glm(text message):&#160;glm.sql_in'],['../glm_8sql__in.html#ac70223628f2b8fc5e86e295f9d6512ae',1,'glm():&#160;glm.sql_in']]],
+  ['glm_2esql_5fin',['glm.sql_in',['../glm_8sql__in.html',1,'']]],
+  ['glm_5fpredict',['glm_predict',['../glm_8sql__in.html#a93d7d8b202654b86917bf9e997d0ad6f',1,'glm_predict(float8[] coef, float8[] col_ind_var, text link):&#160;glm.sql_in'],['../glm_8sql__in.html#add7c22acc8eaaa3eace7089eadc5f367',1,'glm_predict(text message):&#160;glm.sql_in'],['../glm_8sql__in.html#aa42b3ee4e9c39132154dfa81f96ed4ff',1,'glm_predict():&#160;glm.sql_in']]],
+  ['glm_5fpredict_5fbinomial',['glm_predict_binomial',['../glm_8sql__in.html#ac645a2cc2aa22eac90dee923593eb72d',1,'glm_predict_binomial(float8[] coef, float8[] col_ind_var, text link):&#160;glm.sql_in'],['../glm_8sql__in.html#a9a468186034a936c3997cad22b03cafe',1,'glm_predict_binomial(text message):&#160;glm.sql_in']]],
+  ['glm_5fpredict_5fpoisson',['glm_predict_poisson',['../glm_8sql__in.html#a941d49196e573048852def804c5ce4c4',1,'glm_predict_poisson(float8[] coef, float8[] col_ind_var, text link):&#160;glm.sql_in'],['../glm_8sql__in.html#aeb1962c5b1bdd12ae3111bc93fa2967e',1,'glm_predict_poisson(text message):&#160;glm.sql_in']]],
+  ['gpu_5fconfiguration',['gpu_configuration',['../madlib__keras__gpu__info_8sql__in.html#a6137bdc8ae8450e34402b2284e433163',1,'gpu_configuration(text output_table, text source):&#160;madlib_keras_gpu_info.sql_in'],['../madlib__keras__gpu__info_8sql__in.html#a496956346dde3d405321002d57029032',1,'gpu_configuration(text output_table):&#160;madlib_keras_gpu_info.sql_in'],['../madlib__keras__gpu__info_8sql__in.html#a8d7384850308ee00dcd099d78a6b0ce0',1,'gpu_configuration():&#160;madlib_keras_gpu_info.sql_in']]],
+  ['gpu_5finfo_5fnvidia',['gpu_info_nvidia',['../madlib__keras__gpu__info_8sql__in.html#a0e7a037e393213b2cad2c0ea8f620454',1,'madlib_keras_gpu_info.sql_in']]],
+  ['gpu_5finfo_5ftensorflow',['gpu_info_tensorflow',['../madlib__keras__gpu__info_8sql__in.html#a7b7f9bc2d5da543f271d55372d4f6aa8',1,'madlib_keras_gpu_info.sql_in']]],
+  ['graph_5fapsp',['graph_apsp',['../apsp_8sql__in.html#ad68f09e5e53e08e36e1a35078ff557db',1,'graph_apsp(text vertex_table, text vertex_id, text edge_table, text edge_args, text out_table, text grouping_cols):&#160;apsp.sql_in'],['../apsp_8sql__in.html#ae96a0c74959a789f8a1497167b75431e',1,'graph_apsp(text vertex_table, text vertex_id, text edge_table, text edge_args, text out_table):&#160;apsp.sql_in'],['../apsp_8sql__in.html#a1fa9c66ee7eed15a997fb590bee6e8bf',1,'graph_apsp(varchar message):&#160;apsp.sql_in'],['../apsp_8sql__in.html#af271eb7d4c7f8d8d4c3a20873af99c6f',1,'graph_apsp():&#160;apsp.sql_in']]],
+  ['graph_5fapsp_5fget_5fpath',['graph_apsp_get_path',['../apsp_8sql__in.html#aac90be82123f8e2029d4579a6f4f52f1',1,'apsp.sql_in']]],
+  ['graph_5favg_5fpath_5flength',['graph_avg_path_length',['../measures_8sql__in.html#ab7dace0acc3660325313d677e354881a',1,'graph_avg_path_length(text apsp_table, text out_table):&#160;measures.sql_in'],['../measures_8sql__in.html#aec97c2b8bc79f58ef29a217f5bce355c',1,'graph_avg_path_length(varchar message):&#160;measures.sql_in'],['../measures_8sql__in.html#aa25fae8b5b6c0626f081e7e2ec8eb805',1,'graph_avg_path_length():&#160;measures.sql_in']]],
+  ['graph_5fbfs',['graph_bfs',['../bfs_8sql__in.html#adf1cdb7c2211062fba08c3d3a67ff5fb',1,'graph_bfs(text vertex_table, text vertex_id, text edge_table, text edge_args, int source_vertex, text out_table, int max_distance, boolean directed, text grouping_cols):&#160;bfs.sql_in'],['../bfs_8sql__in.html#a8e4e39648537cbf3cb97b4b5e2096130',1,'graph_bfs(text vertex_table, text vertex_id, text edge_table, text edge_args, int source_vertex, text out_table, int max_distance, boolean directed):&#160;bfs.sql_in'],['../bfs_8sql__in.html#a8da98efc5bdf8bb0884b5e9f7fe0e6c2',1,'graph_bfs(text vertex_table, text vertex_id, text edge_table, text edge_args, int source_vertex, text out_table, int max_distance):&#160;bfs.sql_in'],['../bfs_8sql__in.html#a4646561abd4554b14e677549ec39b1df',1,'graph_bfs(text vertex_table, text vertex_id, text edge_table, text edge_args, int source_vertex, text out_table):&#160;bfs.sql_in'],['../bfs_8sql__in.html#a8f48e07f319931c8614067271910950e',1,'graph_bfs(varchar message):&#160;bfs.sql_in'],['../bfs_8sql__in.html#aa2f42b689595986506a18a2478924d51',1,'graph_bfs():&#160;bfs.sql_in']]],
+  ['graph_5fcloseness',['graph_closeness',['../measures_8sql__in.html#a92ea2637ec03b501b42c70a0b4e7830d',1,'graph_closeness(text apsp_table, text out_table, text vertex_filter_expr):&#160;measures.sql_in'],['../measures_8sql__in.html#af9804adc2dff812797d14ed247645cc4',1,'graph_closeness(text apsp_table, text out_table):&#160;measures.sql_in'],['../measures_8sql__in.html#af4a8178a71cdf3118b6b2959362e2b78',1,'graph_closeness(varchar message):&#160;measures.sql_in'],['../measures_8sql__in.html#a38e7bc842a07bd950ed6c1e7f9d9db6b',1,'graph_closeness():&#160;measures.sql_in']]],
+  ['graph_5fdiameter',['graph_diameter',['../measures_8sql__in.html#a1c43ead98a50b6fc88326c3ad8a55233',1,'graph_diameter(text apsp_table, text out_table):&#160;measures.sql_in'],['../measures_8sql__in.html#a5e53de2a59a2af332a6c87535b1a109b',1,'graph_diameter(varchar message):&#160;measures.sql_in'],['../measures_8sql__in.html#a771f73ee5656089ade4f90a1a87c4c21',1,'graph_diameter():&#160;measures.sql_in']]],
+  ['graph_5fsssp',['graph_sssp',['../sssp_8sql__in.html#a3d544f93104e341b03f5c70c89211bcb',1,'graph_sssp(text vertex_table, text vertex_id, text edge_table, text edge_args, bigint source_vertex, text out_table, text grouping_cols):&#160;sssp.sql_in'],['../sssp_8sql__in.html#a6dc0542cf7ddf9664144f4b0614fa270',1,'graph_sssp(text vertex_table, text vertex_id, text edge_table, text edge_args, bigint source_vertex, text out_table):&#160;sssp.sql_in'],['../sssp_8sql__in.html#ab66bf023a28ef36282034c3c4486efb7',1,'graph_sssp(varchar message):&#160;sssp.sql_in'],['../sssp_8sql__in.html#a8f7317dc5d811e45be43452cbc347d49',1,'graph_sssp():&#160;sssp.sql_in']]],
+  ['graph_5fsssp_5fget_5fpath',['graph_sssp_get_path',['../sssp_8sql__in.html#a3c959487e058244e1cc799653510d154',1,'sssp.sql_in']]],
+  ['graph_5fvertex_5fdegrees',['graph_vertex_degrees',['../measures_8sql__in.html#afca698e3642d08cc7d44f179a568e0f1',1,'graph_vertex_degrees(text vertex_table, text vertex_id, text edge_table, text edge_args, text out_table, text grouping_cols):&#160;measures.sql_in'],['../measures_8sql__in.html#afbfd5dac93dbf429ed609f843e4b9dff',1,'graph_vertex_degrees(text vertex_table, text vertex_id, text edge_table, text edge_args, text out_table):&#160;measures.sql_in'],['../measures_8sql__in.html#a1bd8dac9ed72c3f41d96f1d1da1b9346',1,'graph_vertex_degrees(varchar message):&#160;measures.sql_in'],['../measures_8sql__in.html#a7a504e6eeebc7bdbe82d4dd7e0b82d0a',1,'graph_vertex_degrees():&#160;measures.sql_in']]],
+  ['graph_5fwcc_5fhistogram',['graph_wcc_histogram',['../wcc_8sql__in.html#adbe3bf8145a298a8ab1ee460e19efa67',1,'wcc.sql_in']]],
+  ['graph_5fwcc_5flargest_5fcpt',['graph_wcc_largest_cpt',['../wcc_8sql__in.html#a8d2a296a69d390d6a342ee4654c29295',1,'wcc.sql_in']]],
+  ['graph_5fwcc_5fnum_5fcpts',['graph_wcc_num_cpts',['../wcc_8sql__in.html#a1d15b21a3c05f5d14bf436e8b2e03729',1,'wcc.sql_in']]],
+  ['graph_5fwcc_5freachable_5fvertices',['graph_wcc_reachable_vertices',['../wcc_8sql__in.html#aa7e564797133e5c08a9b95f41ef3cae6',1,'wcc.sql_in']]],
+  ['graph_5fwcc_5fvertex_5fcheck',['graph_wcc_vertex_check',['../wcc_8sql__in.html#aabd0447cf6910a077cf90a1a4cce52c8',1,'wcc.sql_in']]],
+  ['generalized_20linear_20models',['Generalized Linear Models',['../group__grp__glm.html',1,'']]],
+  ['gpu_20configuration',['GPU Configuration',['../group__grp__gpu__configuration.html',1,'']]],
+  ['graph',['Graph',['../group__grp__graph.html',1,'']]],
+  ['graph_20diameter',['Graph Diameter',['../group__grp__graph__diameter.html',1,'']]]
+];
diff --git a/docs/rc/search/all_8.html b/docs/rc/search/all_8.html
new file mode 100644
index 0000000..11e27cd
--- /dev/null
+++ b/docs/rc/search/all_8.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_8.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/all_8.js b/docs/rc/search/all_8.js
new file mode 100644
index 0000000..9b0608d
--- /dev/null
+++ b/docs/rc/search/all_8.js
@@ -0,0 +1,15 @@
+var searchData=
+[
+  ['hits',['HITS',['../group__grp__hits.html',1,'']]],
+  ['hypothesis_20tests',['Hypothesis Tests',['../group__grp__stats__tests.html',1,'']]],
+  ['hetero_5flinregr_5ffinal',['hetero_linregr_final',['../linear_8sql__in.html#a4b2e38f45a8e519af5947fcc2eb02829',1,'linear.sql_in']]],
+  ['hetero_5flinregr_5fmerge_5fstates',['hetero_linregr_merge_states',['../linear_8sql__in.html#ad10649c8460c337a285cf20f2b87d0c5',1,'linear.sql_in']]],
+  ['hetero_5flinregr_5ftransition',['hetero_linregr_transition',['../linear_8sql__in.html#a4a583204053716bbece6321f5d9332b1',1,'linear.sql_in']]],
+  ['heteroskedasticity_5ftest_5flinregr',['heteroskedasticity_test_linregr',['../linear_8sql__in.html#a6d36a88e06a31753f4045a6c4539ca10',1,'linear.sql_in']]],
+  ['hits',['hits',['../hits_8sql__in.html#a8b627c2d93594ba5c4963a91bd89c702',1,'hits(text vertex_table, text vertex_id, text edge_table, text edge_args, text out_table, integer max_iter, float8 threshold, varchar grouping_cols):&#160;hits.sql_in'],['../hits_8sql__in.html#ae4965e9ad3dde6bf32393371f98ede7b',1,'hits(text vertex_table, text vertex_id, text edge_table, text edge_args, text out_table, integer max_iter, float8 threshold):&#160;hits.sql_in'],['../hits_8sql__in.html#acef1d74fb74333a9868bb8edee001d75',1,'hits(text vertex_table, text vertex_id, text edge_table, text edge_args, text out_table, integer max_iter):&#160;hits.sql_in'],['../hits_8sql__in.html#a67b3744cbd2995e6c5021420a0299562',1,'hits(text vertex_table, text vertex_id, text edge_table, text edge_args, text out_table):&#160;hits.sql_in'],['../hits_8sql__in.html#a7068f61698c2e76763cd06758ac0fbac',1,'hits(varchar message):&#160;hits.sql_in'],['../hits_8sql__in.html#a6c13c19b2e0db69af3d14e381b948e65',1,'hits():&#160;hits.sql_in']]],
+  ['hits_2esql_5fin',['hits.sql_in',['../hits_8sql__in.html',1,'']]],
+  ['hypergeometric_5fcdf',['hypergeometric_cdf',['../prob_8sql__in.html#a5c48e7fa2fc7bcbc69c7f4da663d457f',1,'prob.sql_in']]],
+  ['hypergeometric_5fpmf',['hypergeometric_pmf',['../prob_8sql__in.html#afbd2f8d9fb30fb179f59cc14f1fd8d6d',1,'prob.sql_in']]],
+  ['hypergeometric_5fquantile',['hypergeometric_quantile',['../prob_8sql__in.html#a813cc27fe097e797ed0fb6022c7bb79a',1,'prob.sql_in']]],
+  ['hypothesis_5ftests_2esql_5fin',['hypothesis_tests.sql_in',['../hypothesis__tests_8sql__in.html',1,'']]]
+];
diff --git a/docs/rc/search/all_9.html b/docs/rc/search/all_9.html
new file mode 100644
index 0000000..f8abbbe
--- /dev/null
+++ b/docs/rc/search/all_9.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_9.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/all_9.js b/docs/rc/search/all_9.js
new file mode 100644
index 0000000..29a38a2
--- /dev/null
+++ b/docs/rc/search/all_9.js
@@ -0,0 +1,35 @@
+var searchData=
+[
+  ['in_2dout_20degree',['In-Out Degree',['../group__grp__graph__vertex__degrees.html',1,'']]],
+  ['inferential_20statistics',['Inferential Statistics',['../group__grp__inf__stats.html',1,'']]],
+  ['immutable',['IMMUTABLE',['../random__forest_8sql__in.html#a8ee741e3812ad259d3ca4c9fa489dc7e',1,'random_forest.sql_in']]],
+  ['index_5f2d_5farray',['index_2d_array',['../linalg_8sql__in.html#abe23dd6c6963093863c2a107425f6384',1,'linalg.sql_in']]],
+  ['index_5fweighted_5fsample',['index_weighted_sample',['../sample_8sql__in.html#af0bfa324d198f8059566757f38fe5c93',1,'sample.sql_in']]],
+  ['input_5fdata_5fpreprocessor_2esql_5fin',['input_data_preprocessor.sql_in',['../input__data__preprocessor_8sql__in.html',1,'']]],
+  ['internal_5fcompute_5fkmeans',['internal_compute_kmeans',['../kmeans_8sql__in.html#a4a1b8fc3dd6da4d4491927888d70e7b9',1,'kmeans.sql_in']]],
+  ['internal_5fcompute_5flmf_5figd',['internal_compute_lmf_igd',['../lmf_8sql__in.html#aae221f5f5b2f670a93c00202b251857d',1,'lmf.sql_in']]],
+  ['internal_5fexecute_5fusing_5fkmeans_5fargs',['internal_execute_using_kmeans_args',['../kmeans_8sql__in.html#abcbeb5878d5a31f600764fbb1fbe5578',1,'kmeans.sql_in']]],
+  ['internal_5fexecute_5fusing_5flmf_5figd_5fargs',['internal_execute_using_lmf_igd_args',['../lmf_8sql__in.html#aea3df2d68e7a289da928b8a584ac719e',1,'lmf.sql_in']]],
+  ['internal_5fkeras_5feval_5ffinal',['internal_keras_eval_final',['../madlib__keras_8sql__in.html#a43bdec57230522681fb6d39cc826f7ba',1,'madlib_keras.sql_in']]],
+  ['internal_5fkeras_5feval_5fmerge',['internal_keras_eval_merge',['../madlib__keras_8sql__in.html#aba484f65a2ecdf6005e441cc27e8da09',1,'madlib_keras.sql_in']]],
+  ['internal_5fkeras_5feval_5ftransition',['internal_keras_eval_transition',['../madlib__keras_8sql__in.html#a05ede18786181c1673176940e79e4dce',1,'madlib_keras.sql_in']]],
+  ['internal_5fkeras_5fevaluate',['internal_keras_evaluate',['../madlib__keras_8sql__in.html#ad2d44bbeae0b0a466853228a740c2599',1,'madlib_keras.sql_in']]],
+  ['internal_5fkeras_5fpredict',['internal_keras_predict',['../madlib__keras_8sql__in.html#a96f46662a481884788f6b33f522136ba',1,'madlib_keras.sql_in']]],
+  ['internal_5flincrf_5flbfgs_5fconverge',['internal_lincrf_lbfgs_converge',['../crf_8sql__in.html#a47ef6b30d54ac4ef89cb664a681d1067',1,'crf.sql_in']]],
+  ['internal_5flincrf_5flbfgs_5fresult',['internal_lincrf_lbfgs_result',['../crf_8sql__in.html#aff63c9a56bebf501a2f40971271605c2',1,'crf.sql_in']]],
+  ['internal_5flinear_5fsvm_5figd_5fdistance',['internal_linear_svm_igd_distance',['../svm_8sql__in.html#a81b1bdf8278bf77439ac9e101ae2ae7a',1,'svm.sql_in']]],
+  ['internal_5flinear_5fsvm_5figd_5fresult',['internal_linear_svm_igd_result',['../svm_8sql__in.html#a21dc69a5bcf6e08f6c0d6cb9c4461091',1,'svm.sql_in']]],
+  ['internal_5flmf_5figd_5fdistance',['internal_lmf_igd_distance',['../lmf_8sql__in.html#a05860ded070a214128e0b4e64c9c989e',1,'lmf.sql_in']]],
+  ['internal_5flmf_5figd_5fresult',['internal_lmf_igd_result',['../lmf_8sql__in.html#a8dede6aa8d024f0bb9acca9a83dfd579',1,'lmf.sql_in']]],
+  ['internal_5fmlp_5figd_5fdistance',['internal_mlp_igd_distance',['../mlp_8sql__in.html#ae14405393c46de803ff1c0e11e85fdfb',1,'mlp.sql_in']]],
+  ['internal_5fmlp_5figd_5fresult',['internal_mlp_igd_result',['../mlp_8sql__in.html#a06a6308d58b039b6ae316fdfb9478a46',1,'mlp.sql_in']]],
+  ['internal_5fmlp_5fminibatch_5fresult',['internal_mlp_minibatch_result',['../mlp_8sql__in.html#a603a8dd9a3129e7c959453d6a01cee5b',1,'mlp.sql_in']]],
+  ['internal_5fpredict_5fmlp',['internal_predict_mlp',['../mlp_8sql__in.html#aa90ab3d6f541a7d5eb8cb7c8a0083c3a',1,'mlp.sql_in']]],
+  ['inverse_5fgamma_5fcdf',['inverse_gamma_cdf',['../prob_8sql__in.html#a85e9c16aa2c6973ddeb7883a5f153d93',1,'prob.sql_in']]],
+  ['inverse_5fgamma_5fpdf',['inverse_gamma_pdf',['../prob_8sql__in.html#a126211c2172a43a654288fa72a2349f9',1,'prob.sql_in']]],
+  ['inverse_5fgamma_5fquantile',['inverse_gamma_quantile',['../prob_8sql__in.html#a5876aae01f14729866d4fd52918a65ba',1,'prob.sql_in']]],
+  ['is_5fpg_5fmajor_5fversion_5fless_5fthan',['is_pg_major_version_less_than',['../utilities_8sql__in.html#af4627d77d237aeadaa4b43ff168ae322',1,'utilities.sql_in']]],
+  ['is_5ftable_5funlogged',['is_table_unlogged',['../utilities_8sql__in.html#aaaf5ac0d3f6416b4bb093fd17c5c2a14',1,'utilities.sql_in']]],
+  ['is_5fver_5fgreater_5fthan_5fgp_5f640_5for_5fpg_5f11',['is_ver_greater_than_gp_640_or_pg_11',['../utilities_8sql__in.html#a4df02278e7bba3e42a6eab87597e4ea8',1,'utilities.sql_in']]],
+  ['isnan',['isnan',['../utilities_8sql__in.html#a48bed63cab78a5446fa4c122eaae3a40',1,'utilities.sql_in']]]
+];
diff --git a/docs/rc/search/all_a.html b/docs/rc/search/all_a.html
new file mode 100644
index 0000000..9601fce
--- /dev/null
+++ b/docs/rc/search/all_a.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_a.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/all_a.js b/docs/rc/search/all_a.js
new file mode 100644
index 0000000..40e2d51
--- /dev/null
+++ b/docs/rc/search/all_a.js
@@ -0,0 +1,13 @@
+var searchData=
+[
+  ['keras',['Keras',['../group__grp__keras.html',1,'']]],
+  ['k_2dmeans_20clustering',['k-Means Clustering',['../group__grp__kmeans.html',1,'']]],
+  ['k_2dnearest_20neighbors',['k-Nearest Neighbors',['../group__grp__knn.html',1,'']]],
+  ['keras_5fmodel_5farch_5ftable_2esql_5fin',['keras_model_arch_table.sql_in',['../keras__model__arch__table_8sql__in.html',1,'']]],
+  ['kmeans_2esql_5fin',['kmeans.sql_in',['../kmeans_8sql__in.html',1,'']]],
+  ['knn',['knn',['../knn_8sql__in.html#a687c300ef3aa00fe938a9b13fd143792',1,'knn(varchar point_source, varchar point_column_name, varchar point_id, varchar label_column_name, varchar test_source, varchar test_column_name, varchar test_id, varchar output_table, integer k, boolean output_neighbors, text fn_dist, boolean weighted_avg, varchar algorithm, varchar algorithm_params):&#160;knn.sql_in'],['../knn_8sql__in.html#ac42acf0f15846a4f899b6a187c58e331',1,'knn(varchar point_source, varchar point_column_name, varchar point_id, varchar label_column_name, varchar test_source, varchar test_column_name, varchar test_id, varchar output_table, integer k, boolean output_neighbors, text fn_dist, boolean weighted_avg, varchar algorithm):&#160;knn.sql_in'],['../knn_8sql__in.html#a620b4ece3bc259eb442783f2de32aef0',1,'knn(varchar point_source, varchar point_column_name, varchar point_id, varchar label_column_name, varchar test_source, varchar test_column_name, varchar test_id, varchar output_table, integer k, boolean output_neighbors, text fn_dist, boolean weighted_avg):&#160;knn.sql_in'],['../knn_8sql__in.html#a8a9a0295a71263ffb66e0775e8e95d18',1,'knn(varchar point_source, varchar point_column_name, varchar point_id, varchar label_column_name, varchar test_source, varchar test_column_name, varchar test_id, varchar output_table, integer k, boolean output_neighbors, text fn_dist):&#160;knn.sql_in'],['../knn_8sql__in.html#adc1c9019d0460726b18fd165ac990a7a',1,'knn(varchar point_source, varchar point_column_name, varchar point_id, varchar label_column_name, varchar test_source, varchar test_column_name, varchar test_id, varchar output_table, integer k, boolean output_neighbors):&#160;knn.sql_in'],['../knn_8sql__in.html#a51549fc4079c186114a7698ecc765358',1,'knn(varchar point_source, varchar point_column_name, varchar point_id, varchar label_column_name, varchar test_source, varchar test_column_name, varchar test_id, varchar output_table, integer k):&#160;knn.sql_in'],['../knn_8sql__in.html#a42cc837c6bb36c1a6131f27cd11ebe98',1,'knn(varchar point_source, varchar point_column_name, varchar point_id, varchar label_column_name, varchar test_source, varchar test_column_name, varchar test_id, varchar output_table):&#160;knn.sql_in'],['../knn_8sql__in.html#aa50ce144a6da9dcf99730be0b91e02e3',1,'knn(varchar message):&#160;knn.sql_in'],['../knn_8sql__in.html#a9b92399768011dbbffe7d08d2f96ff1d',1,'knn():&#160;knn.sql_in']]],
+  ['knn_2esql_5fin',['knn.sql_in',['../knn_8sql__in.html',1,'']]],
+  ['kolmogorov_5fcdf',['kolmogorov_cdf',['../prob_8sql__in.html#aeef43f74f583bdff17bd074d9c0d9607',1,'prob.sql_in']]],
+  ['ks_5ftest_5ffinal',['ks_test_final',['../hypothesis__tests_8sql__in.html#abd3f6d1d6dc4203cab3bcc980ec8ed8d',1,'hypothesis_tests.sql_in']]],
+  ['ks_5ftest_5ftransition',['ks_test_transition',['../hypothesis__tests_8sql__in.html#a58ffb5b2b8392e005f4f3e21560df93f',1,'hypothesis_tests.sql_in']]]
+];
diff --git a/docs/rc/search/all_b.html b/docs/rc/search/all_b.html
new file mode 100644
index 0000000..0814e4e
--- /dev/null
+++ b/docs/rc/search/all_b.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_b.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/all_b.js b/docs/rc/search/all_b.js
new file mode 100644
index 0000000..b2496bb
--- /dev/null
+++ b/docs/rc/search/all_b.js
@@ -0,0 +1,62 @@
+var searchData=
+[
+  ['load_20models',['Load Models',['../group__grp__keras__model__arch.html',1,'']]],
+  ['latent_20dirichlet_20allocation',['Latent Dirichlet Allocation',['../group__grp__lda.html',1,'']]],
+  ['linear_20solvers',['Linear Solvers',['../group__grp__linear__solver.html',1,'']]],
+  ['linear_20regression',['Linear Regression',['../group__grp__linreg.html',1,'']]],
+  ['low_2drank_20matrix_20factorization',['Low-Rank Matrix Factorization',['../group__grp__lmf.html',1,'']]],
+  ['logistic_20regression',['Logistic Regression',['../group__grp__logreg.html',1,'']]],
+  ['l1norm',['l1norm',['../svec__util_8sql__in.html#a9e9b64c93b29c19adfb670f0171f14bf',1,'svec_util.sql_in']]],
+  ['l2norm',['l2norm',['../svec__util_8sql__in.html#a1b6bb42a5176b020aed12734df23aca9',1,'svec_util.sql_in']]],
+  ['laplace_5fcdf',['laplace_cdf',['../prob_8sql__in.html#a64e197de8da3761acdeec9db7e211703',1,'prob.sql_in']]],
+  ['laplace_5fpdf',['laplace_pdf',['../prob_8sql__in.html#a750278ad29d514793f76e159b773f410',1,'prob.sql_in']]],
+  ['laplace_5fquantile',['laplace_quantile',['../prob_8sql__in.html#a77f94fc43d4777fc4f68d18e29454a81',1,'prob.sql_in']]],
+  ['lda_2esql_5fin',['lda.sql_in',['../lda_8sql__in.html',1,'']]],
+  ['lda_5fget_5fperplexity',['lda_get_perplexity',['../lda_8sql__in.html#a25c3ef12d9808d8a38c5fd2630f3b5a9',1,'lda.sql_in']]],
+  ['lda_5fget_5ftopic_5fdesc',['lda_get_topic_desc',['../lda_8sql__in.html#a4ac16d87d50821aadcab0d75d65b3f1b',1,'lda.sql_in']]],
+  ['lda_5fget_5ftopic_5fword_5fcount',['lda_get_topic_word_count',['../lda_8sql__in.html#ace20b6314e5b4e98929a98a6f05d925d',1,'lda.sql_in']]],
+  ['lda_5fget_5fword_5ftopic_5fcount',['lda_get_word_topic_count',['../lda_8sql__in.html#a455699e72328d6b105c61a3c9e7ae5dc',1,'lda.sql_in']]],
+  ['lda_5fget_5fword_5ftopic_5fmapping',['lda_get_word_topic_mapping',['../lda_8sql__in.html#afa13f3db33ee5ef4fef17f5daafa866e',1,'lda.sql_in']]],
+  ['lda_5fparse_5fmodel',['lda_parse_model',['../lda_8sql__in.html#a3ea35eb8ae6670a07948a56b85c1710c',1,'lda.sql_in']]],
+  ['lda_5fpredict',['lda_predict',['../lda_8sql__in.html#af1fde06c39dd12bb9e5544997f815323',1,'lda_predict(text data_table, text model_table, text output_table):&#160;lda.sql_in'],['../lda_8sql__in.html#aaa89e30c8fd0ba41b6feee01ee195330',1,'lda_predict(text data_table, text model_table, text output_table, int4 iter_num):&#160;lda.sql_in']]],
+  ['lda_5ftrain',['lda_train',['../lda_8sql__in.html#aeb7593251a4dedb695494f65dc2d1f80',1,'lda_train(text data_table, text model_table, text output_data_table, int4 voc_size, int4 topic_num, int4 iter_num, float8 alpha, float8 beta):&#160;lda.sql_in'],['../lda_8sql__in.html#ac154c2e71664bdc81f7d6c9d0d491ca1',1,'lda_train(text data_table, text model_table, text output_data_table, int4 voc_size, int4 topic_num, int4 iter_num, float8 alpha, float8 beta, int4 evaluate_every, float8 perplexity_tol):&#160;lda.sql_in'],['../lda_8sql__in.html#a006d5a0963cc300a81b9fd1d0fdd98da',1,'lda_train(text data_table, text model_table, text output_data_table, int4 voc_size, int4 topic_num, int4 iter_num, float8 alpha, float8 beta, int4 evaluate_every):&#160;lda.sql_in']]],
+  ['linalg_2esql_5fin',['linalg.sql_in',['../linalg_8sql__in.html',1,'']]],
+  ['lincrf_5flbfgs_5fstep',['lincrf_lbfgs_step',['../crf_8sql__in.html#a590cd748d8e18055d851e7d4f4a3ca00',1,'crf.sql_in']]],
+  ['lincrf_5flbfgs_5fstep_5ffinal',['lincrf_lbfgs_step_final',['../crf_8sql__in.html#a5bf4b2738003096f4eeeccd0eb5e98f0',1,'crf.sql_in']]],
+  ['lincrf_5flbfgs_5fstep_5fmerge_5fstates',['lincrf_lbfgs_step_merge_states',['../crf_8sql__in.html#a45f3eaf0c80cdfa99872cd071020d5c7',1,'crf.sql_in']]],
+  ['lincrf_5flbfgs_5fstep_5ftransition',['lincrf_lbfgs_step_transition',['../crf_8sql__in.html#a2e7104fea95ca76587e7fae9bcb0d7ed',1,'crf.sql_in']]],
+  ['lincrf_5ftrain',['lincrf_train',['../crf_8sql__in.html#a336ac57ae3d07e331646d397c7651d3d',1,'lincrf_train(text train_feature_tbl, text train_featureset_tbl, text label_tbl, text crf_stats_tbl, text crf_weights_tbl, integer max_iterations):&#160;crf.sql_in'],['../crf_8sql__in.html#a6b7059a5e22e40eae252c718217bf574',1,'lincrf_train(text train_feature_tbl, text train_featureset_tbl, text label_tbl, text crf_stats_tbl, text crf_weights_tbl):&#160;crf.sql_in']]],
+  ['linear_2esql_5fin',['linear.sql_in',['../linear_8sql__in.html',1,'']]],
+  ['linear_5fsolver_5fdense',['linear_solver_dense',['../dense__linear__systems_8sql__in.html#a885d6a36c07dc2c048948cb5287a3b92',1,'linear_solver_dense(varchar input_string):&#160;dense_linear_systems.sql_in'],['../dense__linear__systems_8sql__in.html#a2272a21f30096a79cd543fe66a0aee19',1,'linear_solver_dense():&#160;dense_linear_systems.sql_in'],['../dense__linear__systems_8sql__in.html#ab7de234e67060a4fc48978e430642baa',1,'linear_solver_dense(varchar source_table, varchar out_table, varchar row_id, varchar left_hand_side, varchar right_hand_side, varchar grouping_cols, varchar optimizer, varchar optimizer_options):&#160;dense_linear_systems.sql_in'],['../dense__linear__systems_8sql__in.html#a003b5a21cffde500fa808f1c6e9c14ae',1,'linear_solver_dense(varchar source_table, varchar out_table, varchar row_id, varchar left_hand_side, varchar right_hand_side):&#160;dense_linear_systems.sql_in']]],
+  ['linear_5fsolver_5fsparse',['linear_solver_sparse',['../sparse__linear__systems_8sql__in.html#a3b3b7eea8b91c0a16ede3e7a9c6b17ef',1,'linear_solver_sparse(varchar input_string):&#160;sparse_linear_systems.sql_in'],['../sparse__linear__systems_8sql__in.html#afe32393baf3e20ce6906c9307aab6bea',1,'linear_solver_sparse():&#160;sparse_linear_systems.sql_in'],['../sparse__linear__systems_8sql__in.html#a03a7296e0a44c42584d2faea62e4fdc1',1,'linear_solver_sparse(varchar lhs_table, varchar rhs_table, varchar out_table, varchar lhs_row_id, varchar lhs_col_id, varchar lhs_value, varchar rhs_row_id, varchar rhs_value, integer num_vars, varchar grouping_cols, varchar optimizer, varchar optimizer_options):&#160;sparse_linear_systems.sql_in'],['../sparse__linear__systems_8sql__in.html#a3f6259c7cf82dc93b31694e1a12231e8',1,'linear_solver_sparse(varchar lhs_table, varchar rhs_table, varchar out_table, varchar lhs_row_id, varchar lhs_col_id, varchar lhs_value, varchar rhs_row_id, varchar rhs_value, integer num_vars):&#160;sparse_linear_systems.sql_in'],['../sparse__linear__systems_8sql__in.html#a01d5270cb0badbbd7a581588bfeff98f',1,'linear_solver_sparse(varchar lhs_table, varchar rhs_table, varchar out_table, varchar lhs_row_id, varchar lhs_col_id, varchar lhs_value, varchar rhs_row_id, varchar rhs_value, integer num_vars, varchar grouping_cols):&#160;sparse_linear_systems.sql_in'],['../sparse__linear__systems_8sql__in.html#acc9e20ee876b43f82e5f98dc2b4c88ea',1,'linear_solver_sparse(varchar lhs_table, varchar rhs_table, varchar out_table, varchar lhs_row_id, varchar lhs_col_id, varchar lhs_value, varchar rhs_row_id, varchar rhs_value, integer num_vars, varchar grouping_cols, varchar optimizer):&#160;sparse_linear_systems.sql_in']]],
+  ['linear_5fsvm_5figd_5ffinal',['linear_svm_igd_final',['../svm_8sql__in.html#a614936d27848149eead4581db57a9236',1,'svm.sql_in']]],
+  ['linear_5fsvm_5figd_5fmerge',['linear_svm_igd_merge',['../svm_8sql__in.html#a241eea31c78737ecbb5da6639debec3b',1,'svm.sql_in']]],
+  ['linear_5fsvm_5figd_5fstep',['linear_svm_igd_step',['../svm_8sql__in.html#a3f2ae27d1c7b0ed79e4acbb55c1a859d',1,'svm.sql_in']]],
+  ['linear_5fsvm_5figd_5ftransition',['linear_svm_igd_transition',['../svm_8sql__in.html#a5e01d222a48efa864e94023cdad2cd0d',1,'svm.sql_in']]],
+  ['linregr',['linregr',['../linear_8sql__in.html#a5fcd1daa9796dccf5430929c37ea0ee9',1,'linear.sql_in']]],
+  ['linregr_5ffinal',['linregr_final',['../linear_8sql__in.html#a28b69254ba5cd513b35ba6b17efd2c35',1,'linear.sql_in']]],
+  ['linregr_5fmerge_5fstates',['linregr_merge_states',['../linear_8sql__in.html#a042536820ffbad498a4e1c410f949e35',1,'linear.sql_in']]],
+  ['linregr_5fpredict',['linregr_predict',['../linear_8sql__in.html#a8da0030683d5931b93e5f2bee3fd0544',1,'linregr_predict(float8[] coef, float8[] col_ind_var):&#160;linear.sql_in'],['../linear_8sql__in.html#a98442804f12e5489dedf0ada2d8c273e',1,'linregr_predict(text message):&#160;linear.sql_in'],['../linear_8sql__in.html#a1cf80cdbcabf4ba83b128c08bc804ca5',1,'linregr_predict():&#160;linear.sql_in']]],
+  ['linregr_5ftrain',['linregr_train',['../linear_8sql__in.html#ad0175a9ecc455d9679f7d251af264848',1,'linregr_train(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, varchar grouping_cols, boolean heteroskedasticity_option):&#160;linear.sql_in'],['../linear_8sql__in.html#ac807cf4749db37b6fc7be24c2db10d96',1,'linregr_train(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, varchar grouping_cols):&#160;linear.sql_in'],['../linear_8sql__in.html#a71fb4a634f3145d0369879c931e0f16e',1,'linregr_train(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname):&#160;linear.sql_in'],['../linear_8sql__in.html#a1469685d518752784080c0b2811c9a81',1,'linregr_train():&#160;linear.sql_in'],['../linear_8sql__in.html#a5f8e25203a2b3a9d0fd332a539972292',1,'linregr_train(varchar message):&#160;linear.sql_in']]],
+  ['linregr_5ftransition',['linregr_transition',['../linear_8sql__in.html#aa2b87a3e60272176bfa2fb859f99461a',1,'linear.sql_in']]],
+  ['lmf_2esql_5fin',['lmf.sql_in',['../lmf_8sql__in.html',1,'']]],
+  ['lmf_5figd_5ffinal',['lmf_igd_final',['../lmf_8sql__in.html#a298f46c944cd6813b0360514bf8c9ed1',1,'lmf.sql_in']]],
+  ['lmf_5figd_5fmerge',['lmf_igd_merge',['../lmf_8sql__in.html#ae3bb16a76a927e1e59420d4a8e13012f',1,'lmf.sql_in']]],
+  ['lmf_5figd_5frun',['lmf_igd_run',['../lmf_8sql__in.html#ac1acb1f0e1f7008118f21c83546a4602',1,'lmf_igd_run(varchar rel_output, regclass rel_source, varchar col_row, varchar col_column, varchar col_value, integer row_dim=&quot;SELECT max(col_row) FROM rel_source&quot;, integer column_dim=&quot;SELECT max(col_col) FROM rel_source&quot;, integer max_rank=20, float8 stepsize=0.01, float8 scale_factor=0.1, integer num_iterations=10, float8 tolerance=0.0001):&#160;lmf.sql_in'],['../lmf_8sql__in.html#a917cb41e439c6786f91a27463dca0732',1,'lmf_igd_run(varchar rel_output, regclass rel_source, varchar col_row, varchar col_column, varchar col_value, integer row_dim, integer column_dim, integer max_rank, float8 stepsize, float8 scale_factor):&#160;lmf.sql_in'],['../lmf_8sql__in.html#a9b18ea9dd016d109a5c001762394e788',1,'lmf_igd_run(varchar rel_output, regclass rel_source, varchar col_row, varchar col_column, varchar col_value, integer row_dim, integer column_dim, integer max_rank, float8 stepsize):&#160;lmf.sql_in'],['../lmf_8sql__in.html#a0c5c2d04936ac341e8c054237266938b',1,'lmf_igd_run(varchar rel_output, regclass rel_source, varchar col_row, varchar col_column, varchar col_value, integer row_dim, integer column_dim, integer max_rank):&#160;lmf.sql_in'],['../lmf_8sql__in.html#acaeef70cbcad01aadbad6fbce81d42fb',1,'lmf_igd_run(varchar rel_output, regclass rel_source, varchar col_row, varchar col_column, text col_value):&#160;lmf.sql_in']]],
+  ['lmf_5figd_5fstep',['lmf_igd_step',['../lmf_8sql__in.html#a54d2ca2048d9a0c29d5593530b932a23',1,'lmf.sql_in']]],
+  ['lmf_5figd_5ftransition',['lmf_igd_transition',['../lmf_8sql__in.html#a187574cfe85888b29d6b1658554e7507',1,'lmf.sql_in']]],
+  ['load_5fkeras_5fmodel',['load_keras_model',['../keras__model__arch__table_8sql__in.html#abe844bd378708abc2077326972057504',1,'load_keras_model(varchar keras_model_arch_table, json model_arch, bytea model_weights, text name, text description):&#160;keras_model_arch_table.sql_in'],['../keras__model__arch__table_8sql__in.html#a3c05aee1361fb9f590f1590e86ecdb66',1,'load_keras_model(varchar keras_model_arch_table, json model_arch):&#160;keras_model_arch_table.sql_in'],['../keras__model__arch__table_8sql__in.html#a0498e740cd1cd2712b20e878c6f9d0f3',1,'load_keras_model(varchar keras_model_arch_table, json model_arch, bytea model_weights):&#160;keras_model_arch_table.sql_in'],['../keras__model__arch__table_8sql__in.html#ac919b3c142e996acd71848338194aa02',1,'load_keras_model(varchar keras_model_arch_table, json model_arch, bytea model_weights, text name):&#160;keras_model_arch_table.sql_in'],['../keras__model__arch__table_8sql__in.html#a51327e5814450c3c5991a2b885cf1ab2',1,'load_keras_model(varchar message):&#160;keras_model_arch_table.sql_in'],['../keras__model__arch__table_8sql__in.html#a024b71018a508cb2773a52240c7af121',1,'load_keras_model():&#160;keras_model_arch_table.sql_in']]],
+  ['load_5fmodel_5fselection_5ftable',['load_model_selection_table',['../madlib__keras__model__selection_8sql__in.html#a34e35b3e0adcac558b422d9483421065',1,'madlib_keras_model_selection.sql_in']]],
+  ['logistic',['logistic',['../logistic_8sql__in.html#a4ded9be5c8b111dbb3109efaad83d69e',1,'logistic.sql_in']]],
+  ['logistic_2esql_5fin',['logistic.sql_in',['../logistic_8sql__in.html',1,'']]],
+  ['logistic_5fcdf',['logistic_cdf',['../prob_8sql__in.html#a140f674876813d5e786a4d8ba8d75c87',1,'prob.sql_in']]],
+  ['logistic_5fpdf',['logistic_pdf',['../prob_8sql__in.html#afa38eb6c61d3c9825d5c172e6c17dbf7',1,'prob.sql_in']]],
+  ['logistic_5fquantile',['logistic_quantile',['../prob_8sql__in.html#a5a77a0bc5884af2a914a955174892ae2',1,'prob.sql_in']]],
+  ['lognormal_5fcdf',['lognormal_cdf',['../prob_8sql__in.html#a4c05b347f8feb64e1236d21b850af61e',1,'prob.sql_in']]],
+  ['lognormal_5fpdf',['lognormal_pdf',['../prob_8sql__in.html#a7370b797bf450f9aa54d4fea4d64d611',1,'prob.sql_in']]],
+  ['lognormal_5fquantile',['lognormal_quantile',['../prob_8sql__in.html#aab3a6de990ae5a81834274a1cf9cad8f',1,'prob.sql_in']]],
+  ['logregr_5faccuracy',['logregr_accuracy',['../cross__validation_8sql__in.html#a2d1571ffa794176a5dfed9d35e70fed7',1,'cross_validation.sql_in']]],
+  ['logregr_5fpredict',['logregr_predict',['../logistic_8sql__in.html#abb60fcbfa7f13c4b62950b3ae5ee46b2',1,'logregr_predict(float8[] coef, float8[] col_ind_var):&#160;logistic.sql_in'],['../logistic_8sql__in.html#acc8af7a39e7b0d604c2760d9d6bd0b5e',1,'logregr_predict(text message):&#160;logistic.sql_in'],['../logistic_8sql__in.html#af3eae2b8acd75d4c6c4db8c79489c58f',1,'logregr_predict():&#160;logistic.sql_in']]],
+  ['logregr_5fpredict_5fprob',['logregr_predict_prob',['../logistic_8sql__in.html#acb8bcffac549a0968f6ee7c2d7f34d5e',1,'logregr_predict_prob(float8[] coef, float8[] col_ind_var):&#160;logistic.sql_in'],['../logistic_8sql__in.html#a4db4a78e264cc4868c931f5b5cf8b414',1,'logregr_predict_prob(text message):&#160;logistic.sql_in'],['../logistic_8sql__in.html#a75dba5248d75cd6c5d2fb69f944ce479',1,'logregr_predict_prob():&#160;logistic.sql_in']]],
+  ['logregr_5ftrain',['logregr_train',['../logistic_8sql__in.html#a74210a7ef513dfcbdfdd9f3b37bfe428',1,'logregr_train(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, varchar grouping_cols, integer max_iter, varchar optimizer, float8 tolerance, boolean verbose):&#160;logistic.sql_in'],['../logistic_8sql__in.html#a58dfa3dc74518179c584ae535e331a7d',1,'logregr_train(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname):&#160;logistic.sql_in'],['../logistic_8sql__in.html#a327660873183347c9e00bdbd01983a63',1,'logregr_train(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, varchar grouping_cols):&#160;logistic.sql_in'],['../logistic_8sql__in.html#a3c217840f2fbe1dcd53ba15c4111b86a',1,'logregr_train(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, varchar grouping_cols, integer max_iter):&#160;logistic.sql_in'],['../logistic_8sql__in.html#aa321fe6cffa263b1eb612b15e8fb9a6d',1,'logregr_train(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, varchar grouping_cols, integer max_iter, varchar optimizer):&#160;logistic.sql_in'],['../logistic_8sql__in.html#a6b5ffd41b8b00e4c4417653250a265fb',1,'logregr_train(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, varchar grouping_cols, integer max_iter, varchar optimizer, float8 tolerance):&#160;logistic.sql_in'],['../logistic_8sql__in.html#a3fbbdd2e6633816136d2958db9b4b6a3',1,'logregr_train(text message):&#160;logistic.sql_in'],['../logistic_8sql__in.html#ada5fbc0833e802e7e6c1b489330ca15f',1,'logregr_train():&#160;logistic.sql_in']]]
+];
diff --git a/docs/rc/search/all_c.html b/docs/rc/search/all_c.html
new file mode 100644
index 0000000..da08c38
--- /dev/null
+++ b/docs/rc/search/all_c.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_c.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/all_c.js b/docs/rc/search/all_c.js
new file mode 100644
index 0000000..883b3bc
--- /dev/null
+++ b/docs/rc/search/all_c.js
@@ -0,0 +1,116 @@
+var searchData=
+[
+  ['measures',['Measures',['../group__grp__graph__measures.html',1,'']]],
+  ['marginal_20effects',['Marginal Effects',['../group__grp__marginal.html',1,'']]],
+  ['matrix_20operations',['Matrix Operations',['../group__grp__matrix.html',1,'']]],
+  ['matrix_20factorization',['Matrix Factorization',['../group__grp__matrix__factorization.html',1,'']]],
+  ['model_20selection',['Model Selection',['../group__grp__mdl.html',1,'']]],
+  ['mfv_20_28most_20frequent_20values_29',['MFV (Most Frequent Values)',['../group__grp__mfvsketch.html',1,'']]],
+  ['mini_2dbatch_20preprocessor',['Mini-Batch Preprocessor',['../group__grp__minibatch__preprocessing.html',1,'']]],
+  ['multinomial_20logistic_20regression',['Multinomial Logistic Regression',['../group__grp__mlogreg.html',1,'']]],
+  ['model_20selection_20for_20dl',['Model Selection for DL',['../group__grp__model__selection.html',1,'']]],
+  ['multinomial_20regression',['Multinomial Regression',['../group__grp__multinom.html',1,'']]],
+  ['madlib_5fkeras_2esql_5fin',['madlib_keras.sql_in',['../madlib__keras_8sql__in.html',1,'']]],
+  ['madlib_5fkeras_5fevaluate',['madlib_keras_evaluate',['../madlib__keras_8sql__in.html#adfd96adf2b42c0fda3d7fcbde3c980de',1,'madlib_keras_evaluate(varchar model_table, varchar test_table, varchar output_table, boolean use_gpus, integer mst_key):&#160;madlib_keras.sql_in'],['../madlib__keras_8sql__in.html#acc8a3dd6d66f2ee42051bff16fdbb6f2',1,'madlib_keras_evaluate(varchar model_table, varchar test_table, varchar output_table, boolean use_gpus):&#160;madlib_keras.sql_in'],['../madlib__keras_8sql__in.html#a379574acd7e9ac62900ae24322934554',1,'madlib_keras_evaluate(varchar model_table, varchar test_table, varchar output_table):&#160;madlib_keras.sql_in'],['../madlib__keras_8sql__in.html#a43d52c0c82dd7a5f484077e1f8226bad',1,'madlib_keras_evaluate(varchar message):&#160;madlib_keras.sql_in'],['../madlib__keras_8sql__in.html#a60d92087e0229cc5ac4ce38dd3f0c754',1,'madlib_keras_evaluate():&#160;madlib_keras.sql_in']]],
+  ['madlib_5fkeras_5ffit',['madlib_keras_fit',['../madlib__keras_8sql__in.html#a2277a353d16623515fe4488b43fadaaa',1,'madlib_keras_fit(varchar source_table, varchar model, varchar model_arch_table, integer model_id, varchar compile_params, varchar fit_params, integer num_iterations, boolean use_gpus, varchar validation_table, integer metrics_compute_frequency, boolean warm_start, varchar name, varchar description):&#160;madlib_keras.sql_in'],['../madlib__keras_8sql__in.html#a7348b5bba0f2873350ed3d59a740ed12',1,'madlib_keras_fit(varchar source_table, varchar model, varchar model_arch_table, integer model_id, varchar compile_params, varchar fit_params, integer num_iterations, boolean use_gpus, varchar validation_table, integer metrics_compute_frequency, boolean warm_start, varchar name):&#160;madlib_keras.sql_in'],['../madlib__keras_8sql__in.html#a1ef596b705f1531d3863fbe3d7cbd9ab',1,'madlib_keras_fit(varchar source_table, varchar model, varchar model_arch_table, integer model_id, varchar compile_params, varchar fit_params, integer num_iterations, boolean use_gpus, varchar validation_table, integer metrics_compute_frequency, boolean warm_start):&#160;madlib_keras.sql_in'],['../madlib__keras_8sql__in.html#a8c2226dd73ed52ae99b20b1599458c52',1,'madlib_keras_fit(varchar source_table, varchar model, varchar model_arch_table, integer model_id, varchar compile_params, varchar fit_params, integer num_iterations, boolean use_gpus, varchar validation_table, integer metrics_compute_frequency):&#160;madlib_keras.sql_in'],['../madlib__keras_8sql__in.html#a4b7dae7a619db29d119cd416352d5242',1,'madlib_keras_fit(varchar source_table, varchar model, varchar model_arch_table, integer model_id, varchar compile_params, varchar fit_params, integer num_iterations, boolean use_gpus, varchar validation_table):&#160;madlib_keras.sql_in'],['../madlib__keras_8sql__in.html#a02b249fc761d06858544368f73ad4552',1,'madlib_keras_fit(varchar source_table, varchar model, varchar model_arch_table, integer model_id, varchar compile_params, varchar fit_params, integer num_iterations, boolean use_gpus):&#160;madlib_keras.sql_in'],['../madlib__keras_8sql__in.html#ade193e83d63f5f55a2aa3c01ca203dea',1,'madlib_keras_fit(varchar source_table, varchar model, varchar model_arch_table, integer model_id, varchar compile_params, varchar fit_params, integer num_iterations):&#160;madlib_keras.sql_in'],['../madlib__keras_8sql__in.html#a255b2d1c5c446ee47162b8ba5cb3f834',1,'madlib_keras_fit(varchar message):&#160;madlib_keras.sql_in'],['../madlib__keras_8sql__in.html#a28e4824dd3daf1a0e6187517dd97b73f',1,'madlib_keras_fit():&#160;madlib_keras.sql_in']]],
+  ['madlib_5fkeras_5ffit_5fmultiple_5fmodel',['madlib_keras_fit_multiple_model',['../madlib__keras__fit__multiple__model_8sql__in.html#ab62d8e8a4e8d221b7baa4da6a214c286',1,'madlib_keras_fit_multiple_model(varchar source_table, varchar model_output_table, varchar model_selection_table, integer num_iterations, boolean use_gpus, varchar validation_table, integer metrics_compute_frequency, boolean warm_start, varchar name, varchar description):&#160;madlib_keras_fit_multiple_model.sql_in'],['../madlib__keras__fit__multiple__model_8sql__in.html#a3c71501e03430c229df4c47e2ad5c318',1,'madlib_keras_fit_multiple_model(varchar source_table, varchar model_output_table, varchar model_selection_table, integer num_iterations, boolean use_gpus, varchar validation_table, integer metrics_compute_frequency, boolean warm_start, varchar name):&#160;madlib_keras_fit_multiple_model.sql_in'],['../madlib__keras__fit__multiple__model_8sql__in.html#a5d9f7b628c0caead39bc511ed04e470b',1,'madlib_keras_fit_multiple_model(varchar source_table, varchar model_output_table, varchar model_selection_table, integer num_iterations, boolean use_gpus, varchar validation_table, integer metrics_compute_frequency, boolean warm_start):&#160;madlib_keras_fit_multiple_model.sql_in'],['../madlib__keras__fit__multiple__model_8sql__in.html#a9d9b5dfa99c0d20cfbd1f04c0ecb05b9',1,'madlib_keras_fit_multiple_model(varchar source_table, varchar model_output_table, varchar model_selection_table, integer num_iterations, boolean use_gpus, varchar validation_table, integer metrics_compute_frequency):&#160;madlib_keras_fit_multiple_model.sql_in'],['../madlib__keras__fit__multiple__model_8sql__in.html#a422a56ee0e279690699651f01124b131',1,'madlib_keras_fit_multiple_model(varchar source_table, varchar model_output_table, varchar model_selection_table, integer num_iterations, boolean use_gpus, varchar validation_table):&#160;madlib_keras_fit_multiple_model.sql_in'],['../madlib__keras__fit__multiple__model_8sql__in.html#adde872404cf7683bd78d64399f65013b',1,'madlib_keras_fit_multiple_model(varchar source_table, varchar model_output_table, varchar model_selection_table, integer num_iterations, boolean use_gpus):&#160;madlib_keras_fit_multiple_model.sql_in']]],
+  ['madlib_5fkeras_5ffit_5fmultiple_5fmodel_2esql_5fin',['madlib_keras_fit_multiple_model.sql_in',['../madlib__keras__fit__multiple__model_8sql__in.html',1,'']]],
+  ['madlib_5fkeras_5fgpu_5finfo_2esql_5fin',['madlib_keras_gpu_info.sql_in',['../madlib__keras__gpu__info_8sql__in.html',1,'']]],
+  ['madlib_5fkeras_5fmodel_5fselection_2esql_5fin',['madlib_keras_model_selection.sql_in',['../madlib__keras__model__selection_8sql__in.html',1,'']]],
+  ['madlib_5fkeras_5fpredict',['madlib_keras_predict',['../madlib__keras_8sql__in.html#adcc77d0ebdd3164d57745713ae47419c',1,'madlib_keras_predict(varchar model_table, varchar test_table, varchar id_col, varchar independent_varname, varchar output_table, varchar pred_type, boolean use_gpus, integer mst_key):&#160;madlib_keras.sql_in'],['../madlib__keras_8sql__in.html#a98620f248df8129f83bbcc1df0f47780',1,'madlib_keras_predict(varchar model_table, varchar test_table, varchar id_col, varchar independent_varname, varchar output_table, varchar pred_type, boolean use_gpus):&#160;madlib_keras.sql_in'],['../madlib__keras_8sql__in.html#ac45dd3c88be4d8e6b7fdfd6548918a7c',1,'madlib_keras_predict(varchar model_table, varchar test_table, varchar id_col, varchar independent_varname, varchar output_table, varchar pred_type):&#160;madlib_keras.sql_in'],['../madlib__keras_8sql__in.html#a93155e5285e2f1b2b095b90d370fea42',1,'madlib_keras_predict(varchar model_table, varchar test_table, varchar id_col, varchar independent_varname, varchar output_table):&#160;madlib_keras.sql_in'],['../madlib__keras_8sql__in.html#a37ff677efafc788a222aceca98fefa10',1,'madlib_keras_predict(varchar message):&#160;madlib_keras.sql_in'],['../madlib__keras_8sql__in.html#a855673cb0170e2d71fd95c627bdd35ba',1,'madlib_keras_predict():&#160;madlib_keras.sql_in']]],
+  ['madlib_5fkeras_5fpredict_5fbyom',['madlib_keras_predict_byom',['../madlib__keras_8sql__in.html#a20dfc5a72a13e7647b69c7b21fe37f8d',1,'madlib_keras_predict_byom(varchar model_arch_table, integer model_id, varchar test_table, varchar id_col, varchar independent_varname, varchar output_table, varchar pred_type, boolean use_gpus, text[] class_values, float8 normalizing_const):&#160;madlib_keras.sql_in'],['../madlib__keras_8sql__in.html#a0d01c29f03a76f9bb71c7dc9f3a15cf1',1,'madlib_keras_predict_byom(varchar model_arch_table, integer model_id, varchar test_table, varchar id_col, varchar independent_varname, varchar output_table, varchar pred_type, boolean use_gpus, text[] class_values):&#160;madlib_keras.sql_in'],['../madlib__keras_8sql__in.html#a7066fd8ef56abcb8bb058e4aaa9f5722',1,'madlib_keras_predict_byom(varchar model_arch_table, integer model_id, varchar test_table, varchar id_col, varchar independent_varname, varchar output_table, varchar pred_type, boolean use_gpus):&#160;madlib_keras.sql_in'],['../madlib__keras_8sql__in.html#a1785160cada96aa687dde8cce118ebb3',1,'madlib_keras_predict_byom(varchar model_arch_table, integer model_id, varchar test_table, varchar id_col, varchar independent_varname, varchar output_table, varchar pred_type):&#160;madlib_keras.sql_in'],['../madlib__keras_8sql__in.html#acc0251a671b2b9b2e597428ebc41253f',1,'madlib_keras_predict_byom(varchar model_arch_table, integer model_id, varchar test_table, varchar id_col, varchar independent_varname, varchar output_table):&#160;madlib_keras.sql_in']]],
+  ['mainpage_2edox',['mainpage.dox',['../mainpage_8dox.html',1,'']]],
+  ['marginal_2esql_5fin',['marginal.sql_in',['../marginal_8sql__in.html',1,'']]],
+  ['marginal_5flogregr',['marginal_logregr',['../marginal_8sql__in.html#a3286b644d2d51a8f2874896dc1b5d925',1,'marginal.sql_in']]],
+  ['marginal_5flogregr_5fstep_5ffinal',['marginal_logregr_step_final',['../marginal_8sql__in.html#ac4e06a28a76651de70768457575bb9e0',1,'marginal.sql_in']]],
+  ['marginal_5flogregr_5fstep_5fmerge_5fstates',['marginal_logregr_step_merge_states',['../marginal_8sql__in.html#ae44a992f8bd650b5c1f0c2ffae7bb542',1,'marginal.sql_in']]],
+  ['marginal_5flogregr_5fstep_5ftransition',['marginal_logregr_step_transition',['../marginal_8sql__in.html#a2115a795562bc2928c3858fc55104c4b',1,'marginal.sql_in']]],
+  ['marginal_5fmlogregr',['marginal_mlogregr',['../marginal_8sql__in.html#aaf0b3cc34b99d4b47334bdde2d139b81',1,'marginal.sql_in']]],
+  ['margins',['margins',['../marginal_8sql__in.html#a36fcae5245ca31517723fce38b183c90',1,'margins(varchar model_table, varchar out_table, varchar x_design, varchar source_table, varchar marginal_vars):&#160;marginal.sql_in'],['../marginal_8sql__in.html#a632bc9f9bf73c40fe6bf3b1778eee91a',1,'margins(varchar model_table, varchar out_table, varchar x_design, varchar source_table):&#160;marginal.sql_in'],['../marginal_8sql__in.html#a6d002a5934d6bc614925ffcf67f24a99',1,'margins(varchar model_table, varchar out_table, varchar x_design):&#160;marginal.sql_in'],['../marginal_8sql__in.html#abd29ce2c3931dfbe5fc7e882114b8c68',1,'margins(varchar model_table, varchar out_table):&#160;marginal.sql_in'],['../marginal_8sql__in.html#a14c96eee91746c4693d1775ff3ee8158',1,'margins(varchar message):&#160;marginal.sql_in'],['../marginal_8sql__in.html#a9c7042e5a4dca342e745c89f72f4a650',1,'margins():&#160;marginal.sql_in']]],
+  ['margins_5flogregr',['margins_logregr',['../marginal_8sql__in.html#a9517d679ee4209126895445cbed51fe3',1,'margins_logregr(varchar message):&#160;marginal.sql_in'],['../marginal_8sql__in.html#a63aba4148ce9bfcafea81d08e3797a1f',1,'margins_logregr():&#160;marginal.sql_in'],['../marginal_8sql__in.html#a99dd17e30e4fcc2f39da4e671406bcea',1,'margins_logregr(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, varchar grouping_cols, integer[] marginal_vars, integer max_iter, varchar optimizer, float8 tolerance, boolean verbose_mode):&#160;marginal.sql_in'],['../marginal_8sql__in.html#a4e0b284b130524ff36b44281fa9e3fb9',1,'margins_logregr(varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable):&#160;marginal.sql_in'],['../marginal_8sql__in.html#af520629d3624d30cdcdbce247d89ac7d',1,'margins_logregr(varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable, varchar grouping_cols):&#160;marginal.sql_in'],['../marginal_8sql__in.html#ae84af4141c1730d7299210ad5005ffe6',1,'margins_logregr(varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable, varchar grouping_cols, integer[] marginal_vars):&#160;marginal.sql_in'],['../marginal_8sql__in.html#a7ad0356ba6d3edec11d4ee6904ff8588',1,'margins_logregr(varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable, varchar grouping_cols, integer[] marginal_vars, integer max_iter):&#160;marginal.sql_in'],['../marginal_8sql__in.html#a9a9ff25e0ce2220f14e6514a84e71d8a',1,'margins_logregr(varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable, varchar grouping_cols, integer[] marginal_vars, integer max_iter, varchar optimizer):&#160;marginal.sql_in'],['../marginal_8sql__in.html#a2018fd008c71953a32057d34de54acfc',1,'margins_logregr(varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable, varchar grouping_cols, integer[] marginal_vars, integer max_iter, varchar optimizer, float8 tolerance):&#160;marginal.sql_in']]],
+  ['margins_5fmlogregr',['margins_mlogregr',['../marginal_8sql__in.html#ae39ad0e1beca060fd153dba35901a4e7',1,'margins_mlogregr(varchar message):&#160;marginal.sql_in'],['../marginal_8sql__in.html#a1e152bdb5c5ac347b5621350a396a33f',1,'margins_mlogregr():&#160;marginal.sql_in'],['../marginal_8sql__in.html#aedeea68ce9db3c1ad1ce90219bb02fa0',1,'margins_mlogregr(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, integer ref_category, varchar grouping_cols, integer[] marginal_vars, varchar optimizer_params, boolean verbose_mode):&#160;marginal.sql_in'],['../marginal_8sql__in.html#a2837cc6b3ea201682db76102cace3d0e',1,'margins_mlogregr(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, integer ref_category, varchar grouping_cols, integer[] marginal_vars, varchar optimizer_params):&#160;marginal.sql_in'],['../marginal_8sql__in.html#a79e7c2ad06348e95afea81d4b6c6c9f7',1,'margins_mlogregr(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, integer ref_category, varchar grouping_cols, integer[] marginal_vars, integer max_iter, varchar optimizer, float8 tolerance, boolean verbose_mode):&#160;marginal.sql_in'],['../marginal_8sql__in.html#a0827f2605803847a34e26f31b24529ca',1,'margins_mlogregr(varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable, integer ref_category, varchar grouping_cols, integer[] marginal_vars, integer max_iter):&#160;marginal.sql_in'],['../marginal_8sql__in.html#a80368510f0bcf8633b017b82c9744ce7',1,'margins_mlogregr(varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable, integer ref_category, varchar grouping_cols, integer[] marginal_vars, integer max_iter, varchar optimizer):&#160;marginal.sql_in'],['../marginal_8sql__in.html#afaa380d3b7ce111d6a81b5b0fa7483f3',1,'margins_mlogregr(varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable, integer ref_category, varchar grouping_cols, integer[] marginal_vars, integer max_iter, varchar optimizer, float8 tolerance):&#160;marginal.sql_in'],['../marginal_8sql__in.html#a90bd35d3bb7a3f94feeeb08f9ead8a55',1,'margins_mlogregr(varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable):&#160;marginal.sql_in'],['../marginal_8sql__in.html#af0ef176b7f0d0c518d3a16182ac6117d',1,'margins_mlogregr(varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable, integer ref_category):&#160;marginal.sql_in'],['../marginal_8sql__in.html#a7e66918e0fcd02f8492347604474a29a',1,'margins_mlogregr(varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable, integer ref_category, varchar grouping_cols):&#160;marginal.sql_in'],['../marginal_8sql__in.html#a8311df1f591cff8d30ca8df816c0cfca',1,'margins_mlogregr(varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable, integer ref_category, varchar grouping_cols, integer[] marginal_vars):&#160;marginal.sql_in']]],
+  ['matrix_5fadd',['matrix_add',['../matrix__ops_8sql__in.html#a1cbb83dad451e7c36033c0f3df0a22e0',1,'matrix_add(text matrix_a, text a_args, text matrix_b, text b_args, text matrix_out, text out_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a41caa30da3fe15625e33782884ca6060',1,'matrix_add(text matrix_a, text a_args, text matrix_b, text b_args, text matrix_out):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#af305d7f198954d3dabf1b47578ad8d81',1,'matrix_add(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a68b950ef082b7f0545ba1a926c9afe35',1,'matrix_add():&#160;matrix_ops.sql_in']]],
+  ['matrix_5fagg',['matrix_agg',['../linalg_8sql__in.html#a9c439706f35d6cac89f151d553a5f111',1,'linalg.sql_in']]],
+  ['matrix_5fagg_5ffinal',['matrix_agg_final',['../linalg_8sql__in.html#adb012de82ecdc71ac54f3498e88e59d0',1,'linalg.sql_in']]],
+  ['matrix_5fagg_5ftransition',['matrix_agg_transition',['../linalg_8sql__in.html#ac2d98e204b4fccab518aa20edef4ec41',1,'linalg.sql_in']]],
+  ['matrix_5fblock_5fmult',['matrix_block_mult',['../matrix__ops_8sql__in.html#a0cb243e18397fb101f1cf48d9872f805',1,'matrix_ops.sql_in']]],
+  ['matrix_5fblock_5fsquare',['matrix_block_square',['../matrix__ops_8sql__in.html#af84a929ab1558a06a5f8e9e500bf9051',1,'matrix_ops.sql_in']]],
+  ['matrix_5fblock_5ftrans',['matrix_block_trans',['../matrix__ops_8sql__in.html#a5f096c3062218d0a6848ab1a22f3d5bb',1,'matrix_ops.sql_in']]],
+  ['matrix_5fblockize',['matrix_blockize',['../matrix__ops_8sql__in.html#aa63cfd84aa33c87ad16f52dc7f642848',1,'matrix_blockize(text matrix_in, text in_args, integer rsize, integer csize, text matrix_out, text out_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a8f5cd60132d738f440dffef007476b91',1,'matrix_blockize(text matrix_in, text in_args, integer rsize, integer csize, text matrix_out):&#160;matrix_ops.sql_in']]],
+  ['matrix_5fcholesky',['matrix_cholesky',['../matrix__ops_8sql__in.html#a4e4aeeb2f56f59f89fffe3049089ed23',1,'matrix_cholesky(text matrix_in, text in_args, text matrix_out_prefix, text out_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a13be8579794a2460c8727b116c73163c',1,'matrix_cholesky(text matrix_in, text in_args, text matrix_out_prefix):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#ac9cfb05c9ab8e4daf35ba65b06f85d8d',1,'matrix_cholesky(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a2d1154d0e461d7e45b936b15d192ecb0',1,'matrix_cholesky():&#160;matrix_ops.sql_in']]],
+  ['matrix_5fcolumn',['matrix_column',['../linalg_8sql__in.html#aed3a33f3d3d43a056c5ec591661d34d8',1,'linalg.sql_in']]],
+  ['matrix_5fdensify',['matrix_densify',['../matrix__ops_8sql__in.html#a7df10b8c7cf6a26cc297a6c39482d084',1,'matrix_densify(text matrix_in, text in_args, text matrix_out, text out_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a6d47b253d9f4a966c06bc011b52762ef',1,'matrix_densify(text matrix_in, text in_args, text matrix_out):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a2440a8a698a41e31afd7517edba19a17',1,'matrix_densify(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#adda0815232229bce7f88cfca9c99c2fb',1,'matrix_densify():&#160;matrix_ops.sql_in']]],
+  ['matrix_5fdiag',['matrix_diag',['../matrix__ops_8sql__in.html#a642932bc5d60ee0ee29068e2c0438d19',1,'matrix_diag(float8[] diag_elements, text matrix_out, text out_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#ae3b60dc30259b5526c7be0d1a6a95c20',1,'matrix_diag(float8[] diag_elements, text matrix_out):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#af05e66bbc871c4c24f569bf1b16f684b',1,'matrix_diag(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a888d9ab690fed966da3722886e1c0ff7',1,'matrix_diag():&#160;matrix_ops.sql_in']]],
+  ['matrix_5feigen',['matrix_eigen',['../matrix__ops_8sql__in.html#a1905e1b687e45dacbef1e82097b538de',1,'matrix_eigen(text matrix_in, text in_args, text matrix_out, text out_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#ae2ad35c91364d5ce4a94f7fd2aa6ce4b',1,'matrix_eigen(text matrix_in, text in_args, text matrix_out):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#ac1d4021eccdee42c7a3d8fa953900f1e',1,'matrix_eigen(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#ae25eb4b085772e283250ae1f3ace2cc6',1,'matrix_eigen():&#160;matrix_ops.sql_in']]],
+  ['matrix_5felem_5fmult',['matrix_elem_mult',['../matrix__ops_8sql__in.html#aa93181583456a1f23c3665c051742173',1,'matrix_elem_mult(text matrix_a, text a_args, text matrix_b, text b_args, text matrix_out, text out_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a282716431d27998bebf44d496ccd82df',1,'matrix_elem_mult(text matrix_a, text a_args, text matrix_b, text b_args, text matrix_out):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#ad0ff6a550b1941ce0cc3057343ce6eef',1,'matrix_elem_mult(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a78e64fe103c3f22288445ae6dfe0c3a2',1,'matrix_elem_mult():&#160;matrix_ops.sql_in']]],
+  ['matrix_5fextract_5fcol',['matrix_extract_col',['../matrix__ops_8sql__in.html#a1f3b0f7a3bbbab7b22f8ae545cf46255',1,'matrix_extract_col(text matrix_in, text in_args, integer index):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a1c5371cb5bc60dc48ba4a6cee805c30d',1,'matrix_extract_col(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a98a695c4cf03ae60c654013ec08fdfe8',1,'matrix_extract_col():&#160;matrix_ops.sql_in']]],
+  ['matrix_5fextract_5fdiag',['matrix_extract_diag',['../matrix__ops_8sql__in.html#a7f85d65a21f193f5e77409a3dcd34b06',1,'matrix_extract_diag(text matrix_in, text in_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a8415b48d92a0523ebc4a3df4144fdd48',1,'matrix_extract_diag(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#adce984af4adbd3ed1864c9427002ce93',1,'matrix_extract_diag():&#160;matrix_ops.sql_in']]],
+  ['matrix_5fextract_5frow',['matrix_extract_row',['../matrix__ops_8sql__in.html#a61fef136d511ac92153223f590ee596f',1,'matrix_extract_row(text matrix_in, text in_args, integer index):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a0b8c0815933d4d39a6ea7bc7fe951552',1,'matrix_extract_row(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a65963c0f5721af6f785f65083152c64c',1,'matrix_extract_row():&#160;matrix_ops.sql_in']]],
+  ['matrix_5fidentity',['matrix_identity',['../matrix__ops_8sql__in.html#af4ce5b8872d28bd1d0e2e72af41db173',1,'matrix_identity(integer row_dim, text matrix_out, text out_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a9284b89b9c13e43c2492aa6c9a9a17c0',1,'matrix_identity(integer row_dim, text matrix_out):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#ac5e003d0385e3be5858529e592fa8aef',1,'matrix_identity(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#ab82476872e84430e9abc7a5485b4de9a',1,'matrix_identity():&#160;matrix_ops.sql_in']]],
+  ['matrix_5finfo',['matrix_info',['../matrix__ops_8sql__in.html#a0535b01f414f5d61153abca8b3cd94fa',1,'matrix_info(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a94c1c4f3fb88bb80344d53ee2cc3c981',1,'matrix_info():&#160;matrix_ops.sql_in']]],
+  ['matrix_5finverse',['matrix_inverse',['../matrix__ops_8sql__in.html#a0176dd860f866c5e0899b32f471bc953',1,'matrix_inverse(text matrix_in, text in_args, text matrix_out, text out_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#afee5dbac4040688e33f4bedb87af2d9e',1,'matrix_inverse(text matrix_in, text in_args, text matrix_out):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#aa344aec551796b20f22a276f5d8492f0',1,'matrix_inverse(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a2725d030fc03dcfa3a9271940d800e7a',1,'matrix_inverse():&#160;matrix_ops.sql_in']]],
+  ['matrix_5flu',['matrix_lu',['../matrix__ops_8sql__in.html#a21a96e5933fd1094befc20051b0fb7b7',1,'matrix_lu(text matrix_in, text in_args, text matrix_out_prefix, text out_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#ac0cfa9628072628259b2a50fef12ef9c',1,'matrix_lu(text matrix_in, text in_args, text matrix_out_prefix):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#acdb62ad5d8fcfaf80bcb553df4c57bcf',1,'matrix_lu(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#aa1609dc673ccae19bae8493030490f76',1,'matrix_lu():&#160;matrix_ops.sql_in']]],
+  ['matrix_5fmax',['matrix_max',['../matrix__ops_8sql__in.html#a6aefe99d73608495150c1ac46cc9bcd6',1,'matrix_max(text matrix_in, text in_args, integer dim, text matrix_out, boolean fetch_index):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a738a759b0397a3a652ba76c5e2aea9a9',1,'matrix_max(text matrix_in, text in_args, integer dim, text matrix_out):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#ad5101b99f8112074e95c76f008081741',1,'matrix_max(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a3f47e137a229cc32670461dee5fa3c7a',1,'matrix_max():&#160;matrix_ops.sql_in']]],
+  ['matrix_5fmean',['matrix_mean',['../matrix__ops_8sql__in.html#aff618caaa8e3edc1b3f2465d04598a9d',1,'matrix_mean(text matrix_in, text in_args, integer dim):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a21d94d92c4545bccb58234e8ee0bed2a',1,'matrix_mean(text matrix_in, text in_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#ae703f1bf36c4ff0771253db03d2cd7d2',1,'matrix_mean(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#aef727e104b1c64c790bf0913caf78152',1,'matrix_mean():&#160;matrix_ops.sql_in']]],
+  ['matrix_5fmem_5fmult',['matrix_mem_mult',['../matrix__ops_8sql__in.html#ad16c824212e369760b9fb8ea658eac8c',1,'matrix_mem_mult(float[] matrix_a, float[] matrix_b, boolean trans_b):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a91383f59dcb8b7ca2fba89ea350d113b',1,'matrix_mem_mult(float[] matrix_a, float[] matrix_b):&#160;matrix_ops.sql_in']]],
+  ['matrix_5fmem_5ftrans',['matrix_mem_trans',['../matrix__ops_8sql__in.html#a0731901b985a90c3aa2f686a7ce95978',1,'matrix_ops.sql_in']]],
+  ['matrix_5fmin',['matrix_min',['../matrix__ops_8sql__in.html#aa27d69d09f5eb456eb326d4b5eda1a2a',1,'matrix_min(text matrix_in, text in_args, integer dim, text matrix_out, boolean fetch_index):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a6647bd00e4b853c2d7fbc9175f087ab9',1,'matrix_min(text matrix_in, text in_args, integer dim, text matrix_out):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a7d2aee81366873b11104a5d4fe1e4c36',1,'matrix_min(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#ad777bc84ac4691172a90133825ce5301',1,'matrix_min():&#160;matrix_ops.sql_in']]],
+  ['matrix_5fmult',['matrix_mult',['../matrix__ops_8sql__in.html#a83e1d5e2c8cd598084c6d21fdce83ae7',1,'matrix_mult(text matrix_a, text a_args, text matrix_b, text b_args, text matrix_out, text out_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#aea1f8c6538b189a29c24b56f5af496b8',1,'matrix_mult(text matrix_a, text a_args, text matrix_b, text b_args, text matrix_out):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a43a2702360817f94ecf9b3ba9a984548',1,'matrix_mult(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#ad89a88acce449ee27ba9d3a73950c2d7',1,'matrix_mult():&#160;matrix_ops.sql_in']]],
+  ['matrix_5fndims',['matrix_ndims',['../matrix__ops_8sql__in.html#aad615ae2da39bf15c8032eacb8330a74',1,'matrix_ndims(text matrix_in, text in_args, boolean is_block):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a563239e2948ed428ae62df73912c8cda',1,'matrix_ndims(text matrix_in, text in_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a198a59b704931cbe35edd1ffdccf025b',1,'matrix_ndims(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#ac502592b54ed6d09d8e16eb7993672fb',1,'matrix_ndims():&#160;matrix_ops.sql_in']]],
+  ['matrix_5fnorm',['matrix_norm',['../matrix__ops_8sql__in.html#aa5eb2864180eb276a786d9b2172aef5f',1,'matrix_norm(text matrix_in, text in_args, text norm_type):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a8ebac230a8a23e27125fd6b324484a30',1,'matrix_norm(text matrix_in, text in_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a4d3873b96aa8d7ec3288ba1e6c275f65',1,'matrix_norm(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#aed19bdcfe46eb2645d85a9e71895719b',1,'matrix_norm():&#160;matrix_ops.sql_in']]],
+  ['matrix_5fnuclear_5fnorm',['matrix_nuclear_norm',['../matrix__ops_8sql__in.html#ad87178a3e1721ee05589817cb598d6ec',1,'matrix_nuclear_norm(text matrix_in, text in_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#af37ef69921ecb4d667ebf65a3901ad4c',1,'matrix_nuclear_norm(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#ae90888a1b50fa901966ca2b9975f4ada',1,'matrix_nuclear_norm():&#160;matrix_ops.sql_in']]],
+  ['matrix_5fones',['matrix_ones',['../matrix__ops_8sql__in.html#a1f59138935fe638eca1f15588aa76ac1',1,'matrix_ones(integer row_dim, integer col_dim, text matrix_out, text out_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a14b7d6ad206764d48dfbaa0cc9978e32',1,'matrix_ones(integer row_id, integer col_id, text matrix_out):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#ac9e608ad657246ace0bf0b4235d3a07d',1,'matrix_ones(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a7df4dbdc3b0a7105c644c787daadf666',1,'matrix_ones():&#160;matrix_ops.sql_in']]],
+  ['matrix_5fops_2esql_5fin',['matrix_ops.sql_in',['../matrix__ops_8sql__in.html',1,'']]],
+  ['matrix_5fpinv',['matrix_pinv',['../matrix__ops_8sql__in.html#a929ded138fb0a953c8126ee8e20d793f',1,'matrix_pinv(text matrix_in, text in_args, text matrix_out, text out_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a39c21ffb83c184a21b481ad12056af13',1,'matrix_pinv(text matrix_in, text in_args, text matrix_out):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#adc992cc64ae6c2537b417f5c9693d93c',1,'matrix_pinv(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a85193210d3fd55cba9d983a8cf71a34b',1,'matrix_pinv():&#160;matrix_ops.sql_in']]],
+  ['matrix_5fqr',['matrix_qr',['../matrix__ops_8sql__in.html#ac656a3a1e0008af89af9d4af44467407',1,'matrix_qr(text matrix_in, text in_args, text matrix_out_prefix, text out_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#ad7b68aacf626bed0c5f2a37be63848e4',1,'matrix_qr(text matrix_in, text in_args, text matrix_out_prefix):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a58a87beb5600e5a06f36ae1e083fe4cc',1,'matrix_qr(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#ae66de066dfdafaba16575f58ab58376c',1,'matrix_qr():&#160;matrix_ops.sql_in']]],
+  ['matrix_5frandom',['matrix_random',['../matrix__ops_8sql__in.html#ad5df0edded7b5db4b9bdd29ff3e39ec3',1,'matrix_random(integer row_dim, integer col_dim, text in_args, text distribution, text matrix_out, text out_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#af2dec2ccb01c2ba4b3d1293a032ff08f',1,'matrix_random(integer row_id, integer col_id, text distribution, text matrix_out):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#ae86e6f65ef75ed13a1de8b8e0c537bfc',1,'matrix_random(integer row_id, integer col_id, text matrix_out):&#160;matrix_ops.sql_in']]],
+  ['matrix_5frank',['matrix_rank',['../matrix__ops_8sql__in.html#a3906a54d945b19672641ca08bef11e69',1,'matrix_rank(text matrix_in, text in_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#aef438cede80c62cdd8126a77b7bd86c7',1,'matrix_rank(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a8613f342735ddb02a8b1d3585a569f26',1,'matrix_rank():&#160;matrix_ops.sql_in']]],
+  ['matrix_5fscalar_5fmult',['matrix_scalar_mult',['../matrix__ops_8sql__in.html#aa41d97528365f8e161e5e821165a6e0d',1,'matrix_scalar_mult(text matrix_in, text in_args, float8 scalar, text matrix_out, text out_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a0c8518f032d9f6af692dabde9f4e2051',1,'matrix_scalar_mult(text matrix_in, text in_args, float8 scalar, text matrix_out):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a6993220fd6f4d2c85514a05c966c0334',1,'matrix_scalar_mult(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a48baae4d5938c7afdf160a84d43de399',1,'matrix_scalar_mult():&#160;matrix_ops.sql_in']]],
+  ['matrix_5fscale_5fand_5fadd',['matrix_scale_and_add',['../matrix__ops_8sql__in.html#a68c05ce6379f28d5e30dd0144fe50565',1,'matrix_scale_and_add(text matrix_a, text a_args, text matrix_b, text b_args, float8 scale, text matrix_out, text out_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a31de2056018ac96ba01125c0e131f21e',1,'matrix_scale_and_add(text matrix_a, text a_args, text matrix_b, text b_args, float8 scale, text matrix_out):&#160;matrix_ops.sql_in']]],
+  ['matrix_5fsparsify',['matrix_sparsify',['../matrix__ops_8sql__in.html#a390fb7234f49e17c780e961184873759',1,'matrix_sparsify(text matrix_in, text in_args, text matrix_out, text out_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a07be86160c55d50fe8277e8bdd3bab38',1,'matrix_sparsify(text matrix_in, text in_args, text matrix_out):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a32bf4abd829dfc1b28d684af10d6b2d8',1,'matrix_sparsify(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a0cdd245c633ccb63fc1067ed121a8a4d',1,'matrix_sparsify():&#160;matrix_ops.sql_in']]],
+  ['matrix_5fsquare',['matrix_square',['../matrix__ops_8sql__in.html#ae4082533d1943e20660dee4c951edf22',1,'matrix_square(text matrix_in, text in_args, text matrix_out, text out_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#ac27837c0e5196168e51ddd870c34205e',1,'matrix_square(text matrix_in, text in_args, text matrix_out):&#160;matrix_ops.sql_in']]],
+  ['matrix_5fsub',['matrix_sub',['../matrix__ops_8sql__in.html#aa9b1f1554e98d3ab8f04d203f99fd651',1,'matrix_sub(text matrix_a, text a_args, text matrix_b, text b_args, text matrix_out, text out_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a2a8806e11141e8cc5a3fa0c6b1b9e62a',1,'matrix_sub(text matrix_a, text a_args, text matrix_b, text b_args, text matrix_out):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a66d586c0126a95e43ecad7d3efbcce69',1,'matrix_sub(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a41d7286b1a57206f999e064bf3745407',1,'matrix_sub():&#160;matrix_ops.sql_in']]],
+  ['matrix_5fsum',['matrix_sum',['../matrix__ops_8sql__in.html#af03096b43d66e3a3448885e8d6643244',1,'matrix_sum(text matrix_in, text in_args, integer dim):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a6006396999fd192910197e40a0655179',1,'matrix_sum(text matrix_in, text in_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a2ce9cf659cd15d6c765ff8cd11b26a2f',1,'matrix_sum(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a73a54a0e80047b8b9e5df2c4b635c155',1,'matrix_sum():&#160;matrix_ops.sql_in']]],
+  ['matrix_5ftrans',['matrix_trans',['../matrix__ops_8sql__in.html#aa8089cdaf2b66d668f2f15fe3d457d06',1,'matrix_trans(text matrix_in, text in_args, text matrix_out, text out_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#af29ba2a78c6fc0efe0560882853514e7',1,'matrix_trans(text matrix_in, text in_args, text matrix_out):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a84deae83650034337bbec470786573ba',1,'matrix_trans(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a7b37a26e5a301338305992bae6e35230',1,'matrix_trans():&#160;matrix_ops.sql_in']]],
+  ['matrix_5funblockize',['matrix_unblockize',['../matrix__ops_8sql__in.html#a0a199e7cf9e56acd6a7f3fd78e73fa22',1,'matrix_ops.sql_in']]],
+  ['matrix_5fvec_5fmult',['matrix_vec_mult',['../matrix__ops_8sql__in.html#a5060836ec7418a8ec7141740d709db5a',1,'matrix_vec_mult(text matrix_in, text in_args, float8[] vector):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a43ac21377c0932229f36fd4f11cedb2a',1,'matrix_vec_mult(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a738b55e4fa41b7b8ef650e47ba85fad7',1,'matrix_vec_mult():&#160;matrix_ops.sql_in']]],
+  ['matrix_5fzeros',['matrix_zeros',['../matrix__ops_8sql__in.html#a2f88aa4f4a8e479276c927048e1814f2',1,'matrix_zeros(integer row_dim, integer col_dim, text matrix_out, text out_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a94d6e419cbf5a1809e7c4cd788adf025',1,'matrix_zeros(integer row_dim, integer col_dim, text matrix_out):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a733fd716b4b996f1a6ffca967496d899',1,'matrix_zeros(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#aaed270402933fd463479858f893b4357',1,'matrix_zeros():&#160;matrix_ops.sql_in']]],
+  ['mean',['mean',['../svec__util_8sql__in.html#a546b947319c9f48237120a31929bdfd9',1,'svec_util.sql_in']]],
+  ['mean_5fabs_5ferror',['mean_abs_error',['../pred__metrics_8sql__in.html#a62b746073072a8a7ab2e8b10189b3b8f',1,'mean_abs_error(text table_in, text table_out, text prediction_col, text observed_col, text grouping_cols):&#160;pred_metrics.sql_in'],['../pred__metrics_8sql__in.html#a5640dad3c1daee2ae20234cd6281e1f9',1,'mean_abs_error(text table_in, text table_out, text prediction_col, text observed_col):&#160;pred_metrics.sql_in'],['../pred__metrics_8sql__in.html#ad9bcfc60fa213b640b6892609cda87ef',1,'mean_abs_error(text message):&#160;pred_metrics.sql_in'],['../pred__metrics_8sql__in.html#a7b7cb1726f0c0630f6275f003a8b3c1f',1,'mean_abs_error():&#160;pred_metrics.sql_in']]],
+  ['mean_5fabs_5fperc_5ferror',['mean_abs_perc_error',['../pred__metrics_8sql__in.html#ac065af35e165ee070488e52ae6defeb4',1,'mean_abs_perc_error(text table_in, text table_out, text prediction_col, text observed_col, text grouping_cols):&#160;pred_metrics.sql_in'],['../pred__metrics_8sql__in.html#a27125644edf424100624332dcc119458',1,'mean_abs_perc_error(text table_in, text table_out, text prediction_col, text observed_col):&#160;pred_metrics.sql_in'],['../pred__metrics_8sql__in.html#a6a88be3e0b687fa54390f74897432f35',1,'mean_abs_perc_error(text message):&#160;pred_metrics.sql_in'],['../pred__metrics_8sql__in.html#a358ac764059e162baa03b3786328ef03',1,'mean_abs_perc_error():&#160;pred_metrics.sql_in']]],
+  ['mean_5fperc_5ferror',['mean_perc_error',['../pred__metrics_8sql__in.html#a000a818f3463898be8cb439ab12de657',1,'mean_perc_error(text table_in, text table_out, text prediction_col, text observed_col, text grouping_cols):&#160;pred_metrics.sql_in'],['../pred__metrics_8sql__in.html#adcd1cee1d1abc41c4c8404e3dfe1e128',1,'mean_perc_error(text table_in, text table_out, text prediction_col, text observed_col):&#160;pred_metrics.sql_in'],['../pred__metrics_8sql__in.html#a3011fb3e57a5606959da30aac0abd801',1,'mean_perc_error(text message):&#160;pred_metrics.sql_in'],['../pred__metrics_8sql__in.html#ae5b776a2b671403b62a2b94a8de76574',1,'mean_perc_error():&#160;pred_metrics.sql_in']]],
+  ['mean_5fsquared_5ferror',['mean_squared_error',['../pred__metrics_8sql__in.html#ac171ed21c9230f7ac42fe5d0108362d6',1,'mean_squared_error(text table_in, text table_out, text prediction_col, text observed_col, text grouping_cols):&#160;pred_metrics.sql_in'],['../pred__metrics_8sql__in.html#ada2f6933ef0f9ecc6e40e0cdd48a2ff4',1,'mean_squared_error(text table_in, text table_out, text prediction_col, text observed_col):&#160;pred_metrics.sql_in'],['../pred__metrics_8sql__in.html#a9233da7d17f5a09bd345dcedabd5e509',1,'mean_squared_error(text message):&#160;pred_metrics.sql_in'],['../pred__metrics_8sql__in.html#a335747f3e5c611fb426b693aa270d340',1,'mean_squared_error():&#160;pred_metrics.sql_in']]],
+  ['measures_2esql_5fin',['measures.sql_in',['../measures_8sql__in.html',1,'']]],
+  ['mfvsketch_5fquick_5fhistogram',['mfvsketch_quick_histogram',['../sketch_8sql__in.html#aa2d4c0af50b242731f841c2dd355fc72',1,'sketch.sql_in']]],
+  ['mfvsketch_5ftop_5fhistogram',['mfvsketch_top_histogram',['../sketch_8sql__in.html#ab915f092b747e3a955cbb699afc9c70c',1,'sketch.sql_in']]],
+  ['minibatch_5fpreprocessing_2esql_5fin',['minibatch_preprocessing.sql_in',['../minibatch__preprocessing_8sql__in.html',1,'']]],
+  ['minibatch_5fpreprocessor',['minibatch_preprocessor',['../minibatch__preprocessing_8sql__in.html#a240a7074bf43145a5a0a034d4b417907',1,'minibatch_preprocessor(varchar source_table, varchar output_table, varchar dependent_varname, varchar independent_varname, varchar grouping_cols, integer buffer_size, boolean one_hot_encode_int_dep_var):&#160;minibatch_preprocessing.sql_in'],['../minibatch__preprocessing_8sql__in.html#a92b64147fde6f2d7f9914357c7059950',1,'minibatch_preprocessor(varchar source_table, varchar output_table, varchar dependent_varname, varchar independent_varname, varchar grouping_cols, integer buffer_size):&#160;minibatch_preprocessing.sql_in'],['../minibatch__preprocessing_8sql__in.html#a65e4a7785a85fd75d3d3be455cb5b922',1,'minibatch_preprocessor(varchar source_table, varchar output_table, varchar dependent_varname, varchar independent_varname, varchar grouping_cols):&#160;minibatch_preprocessing.sql_in'],['../minibatch__preprocessing_8sql__in.html#a1727d5439a8a73eb42c4b2a9bd29a3c2',1,'minibatch_preprocessor(varchar source_table, varchar output_table, varchar dependent_varname, varchar independent_varname):&#160;minibatch_preprocessing.sql_in'],['../minibatch__preprocessing_8sql__in.html#a3ea00bd7444fe9d2969e6a82e093091c',1,'minibatch_preprocessor(varchar message):&#160;minibatch_preprocessing.sql_in'],['../minibatch__preprocessing_8sql__in.html#abf3ab6567c5b5f64402b7412c74c7451',1,'minibatch_preprocessor():&#160;minibatch_preprocessing.sql_in']]],
+  ['misclassification_5favg',['misclassification_avg',['../cross__validation_8sql__in.html#ad01cd1c97ae1be0ac7cd6c42abb75bb2',1,'cross_validation.sql_in']]],
+  ['mlogregr',['mlogregr',['../multilogistic_8sql__in.html#a7be20ccb465d47808e18149140fc666f',1,'mlogregr(varchar source, varchar depvar, varchar indepvar, integer max_num_iterations=20, varchar optimizer=&quot;irls&quot;, float8 precision=0.0001, integer ref_category):&#160;multilogistic.sql_in'],['../multilogistic_8sql__in.html#a116c95de21b112dedf99035a9b243fd7',1,'mlogregr(varchar source, varchar depvar, varchar indepvar):&#160;multilogistic.sql_in'],['../multilogistic_8sql__in.html#a1ab68f7396f53ae3e32362240d077cbf',1,'mlogregr(varchar source, varchar depvar, varchar indepvar, integer max_num_iterations):&#160;multilogistic.sql_in'],['../multilogistic_8sql__in.html#ae1b5954340a0c98a6ed06eb5f3bb43b8',1,'mlogregr(varchar source, varchar depvar, varchar indepvar, integer max_num_iterations, varchar optimizer):&#160;multilogistic.sql_in']]],
+  ['mlogregr_5fmarginal_5fstep_5ffinal',['mlogregr_marginal_step_final',['../marginal_8sql__in.html#ad80d7df29226a2529f9f80607f2a983e',1,'marginal.sql_in']]],
+  ['mlogregr_5fmarginal_5fstep_5fmerge_5fstates',['mlogregr_marginal_step_merge_states',['../marginal_8sql__in.html#a82ac74fd7aec70b7596bc2b4776742fa',1,'marginal.sql_in']]],
+  ['mlogregr_5fmarginal_5fstep_5ftransition',['mlogregr_marginal_step_transition',['../marginal_8sql__in.html#a7b8a7cf298ea51fc16de975e2503615a',1,'marginal.sql_in']]],
+  ['mlogregr_5fpredict',['mlogregr_predict',['../multilogistic_8sql__in.html#a00f0c988e1b2b2fee9e4021450840061',1,'mlogregr_predict(text model, text source, text id_col_name, text output, text pred_type):&#160;multilogistic.sql_in'],['../multilogistic_8sql__in.html#a4c61f2fd5a67a7babb700fdfbd4d146f',1,'mlogregr_predict(text model, text source, text id_col_name, text output):&#160;multilogistic.sql_in'],['../multilogistic_8sql__in.html#a0fdfed54d63cefe260a0b74b9c7bbad5',1,'mlogregr_predict(text message):&#160;multilogistic.sql_in']]],
+  ['mlogregr_5frobust_5fstep_5ffinal',['mlogregr_robust_step_final',['../robust_8sql__in.html#a6bfc968b23887a0a8ddd69a5c3350ba9',1,'robust.sql_in']]],
+  ['mlogregr_5frobust_5fstep_5fmerge_5fstates',['mlogregr_robust_step_merge_states',['../robust_8sql__in.html#a123149abbf366743e04ecb6fc7f8b9d9',1,'robust.sql_in']]],
+  ['mlogregr_5frobust_5fstep_5ftransition',['mlogregr_robust_step_transition',['../robust_8sql__in.html#a3928ec1e3935e8dc4dbcb9e705805660',1,'robust.sql_in']]],
+  ['mlogregr_5ftrain',['mlogregr_train',['../multilogistic_8sql__in.html#aedc13474e6abbc88451d120ad97e44d4',1,'mlogregr_train(varchar source_table, varchar output_table, varchar dependent_varname, varchar independent_varname, integer ref_category, varchar optimizer_params):&#160;multilogistic.sql_in'],['../multilogistic_8sql__in.html#afea8bd51ec241fa7a749a7c74ae0f580',1,'mlogregr_train(varchar source_table, varchar output_table, varchar dependent_varname, varchar independent_varname, integer ref_category):&#160;multilogistic.sql_in'],['../multilogistic_8sql__in.html#aa596f23c7bcfcd47b051d78de0b99c36',1,'mlogregr_train(varchar source_table, varchar output_table, varchar dependent_varname, varchar independent_varname):&#160;multilogistic.sql_in'],['../multilogistic_8sql__in.html#a0b4643da1ecfcfaf3a1563c820b3347d',1,'mlogregr_train(varchar message):&#160;multilogistic.sql_in'],['../multilogistic_8sql__in.html#ab8b5a7eb69a945435cba5a068576f2e4',1,'mlogregr_train():&#160;multilogistic.sql_in']]],
+  ['mlp_2esql_5fin',['mlp.sql_in',['../mlp_8sql__in.html',1,'']]],
+  ['mlp_5fclassification',['mlp_classification',['../mlp_8sql__in.html#a73d39f7b6dd12112d080e5ab851e5f53',1,'mlp_classification(varchar source_table, varchar output_table, varchar independent_varname, varchar dependent_varname, integer[] hidden_layer_sizes, varchar optimizer_params, varchar activation, varchar weights, boolean warm_start, boolean verbose, varchar grouping_col):&#160;mlp.sql_in'],['../mlp_8sql__in.html#a4f787c902c3a5e656b387a688f262acb',1,'mlp_classification(varchar source_table, varchar output_table, varchar independent_varname, varchar dependent_varname, integer[] hidden_layer_sizes, varchar optimizer_params, varchar activation, varchar weights, boolean warm_start, boolean verbose):&#160;mlp.sql_in'],['../mlp_8sql__in.html#af520b5c8c8c737fc23ceb529610dd86b',1,'mlp_classification(varchar source_table, varchar output_table, varchar independent_varname, varchar dependent_varname, integer[] hidden_layer_sizes, varchar optimizer_params, varchar activation, varchar weights, boolean warm_start):&#160;mlp.sql_in'],['../mlp_8sql__in.html#a0daa7903ff719803b581aad045101344',1,'mlp_classification(varchar source_table, varchar output_table, varchar independent_varname, varchar dependent_varname, integer[] hidden_layer_sizes, varchar optimizer_params, varchar activation, varchar weights):&#160;mlp.sql_in'],['../mlp_8sql__in.html#a15c117bcf75101b7aec2fbecf7f851b5',1,'mlp_classification(varchar source_table, varchar output_table, varchar independent_varname, varchar dependent_varname, integer[] hidden_layer_sizes, varchar optimizer_params, varchar activation):&#160;mlp.sql_in'],['../mlp_8sql__in.html#a5d28bb79f649ab9e3d376bcbdf65f024',1,'mlp_classification(varchar source_table, varchar output_table, varchar independent_varname, varchar dependent_varname, integer[] hidden_layer_sizes, varchar optimizer_params):&#160;mlp.sql_in'],['../mlp_8sql__in.html#aa5ae594dad6af4eee8aa2e89fc1fc63c',1,'mlp_classification(varchar source_table, varchar output_table, varchar independent_varname, varchar dependent_varname, integer[] hidden_layer_sizes):&#160;mlp.sql_in'],['../mlp_8sql__in.html#aa576fa10b9b5c7e555d8037b07f49d07',1,'mlp_classification(text message):&#160;mlp.sql_in'],['../mlp_8sql__in.html#a0e264a5be29f84c6dd2ab74cafa821e6',1,'mlp_classification():&#160;mlp.sql_in']]],
+  ['mlp_5figd_5ffinal',['mlp_igd_final',['../mlp_8sql__in.html#ab0f74b98d0fe97d8c89a7777f40fc9f2',1,'mlp.sql_in']]],
+  ['mlp_5figd_5fmerge',['mlp_igd_merge',['../mlp_8sql__in.html#ab131a5383e05cc40207874a586394323',1,'mlp.sql_in']]],
+  ['mlp_5figd_5fstep',['mlp_igd_step',['../mlp_8sql__in.html#a01b8c82aaec038e0bd9d5bd208e23f9f',1,'mlp.sql_in']]],
+  ['mlp_5figd_5ftransition',['mlp_igd_transition',['../mlp_8sql__in.html#a591b8f7eb778fc57000ff2618fb90b6b',1,'mlp.sql_in']]],
+  ['mlp_5fminibatch_5ffinal',['mlp_minibatch_final',['../mlp_8sql__in.html#a78190aceb28796d29e3dffc6241b3f55',1,'mlp.sql_in']]],
+  ['mlp_5fminibatch_5fmerge',['mlp_minibatch_merge',['../mlp_8sql__in.html#a4ee983290b6936743645df606ce0b8ba',1,'mlp.sql_in']]],
+  ['mlp_5fminibatch_5fstep',['mlp_minibatch_step',['../mlp_8sql__in.html#a5933f1c1f2c41ce92578f67426f69456',1,'mlp.sql_in']]],
+  ['mlp_5fminibatch_5ftransition',['mlp_minibatch_transition',['../mlp_8sql__in.html#aba6da28d2565175ea81f50e735239eaa',1,'mlp.sql_in']]],
+  ['mlp_5fpredict',['mlp_predict',['../mlp_8sql__in.html#a98a7cda6f3fb5ed9734f4838e1c42488',1,'mlp_predict(varchar model_table, varchar data_table, varchar id_col_name, varchar output_table, varchar pred_type):&#160;mlp.sql_in'],['../mlp_8sql__in.html#a08142d48d68b51e0d5e8408f4bc2adf8',1,'mlp_predict(text message):&#160;mlp.sql_in'],['../mlp_8sql__in.html#abd5aaa58d22cc31fdbca80f70b018b70',1,'mlp_predict():&#160;mlp.sql_in']]],
+  ['mlp_5fregression',['mlp_regression',['../mlp_8sql__in.html#a0745971ef78379d5e0a6f59a1e084d3b',1,'mlp_regression(varchar source_table, varchar output_table, varchar independent_varname, varchar dependent_varname, integer[] hidden_layer_sizes, varchar optimizer_params, varchar activation, varchar weights, boolean warm_start, boolean verbose, varchar grouping_col):&#160;mlp.sql_in'],['../mlp_8sql__in.html#ae5043f0cfce81a69ae0db7f2c8c4a230',1,'mlp_regression(varchar source_table, varchar output_table, varchar independent_varname, varchar dependent_varname, integer[] hidden_layer_sizes, varchar optimizer_params, varchar activation, varchar weights, boolean warm_start, boolean verbose):&#160;mlp.sql_in'],['../mlp_8sql__in.html#aa22e20ac82a36d5c8f34d1687500cc47',1,'mlp_regression(varchar source_table, varchar output_table, varchar independent_varname, varchar dependent_varname, integer[] hidden_layer_sizes, varchar optimizer_params, varchar activation, varchar weights, boolean warm_start):&#160;mlp.sql_in'],['../mlp_8sql__in.html#a9732da677f1cfd6d1997c3a786e578f3',1,'mlp_regression(varchar source_table, varchar output_table, varchar independent_varname, varchar dependent_varname, integer[] hidden_layer_sizes, varchar optimizer_params, varchar activation, varchar weights):&#160;mlp.sql_in'],['../mlp_8sql__in.html#a47b00ac83ea4849f984d9f71bce288f1',1,'mlp_regression(varchar source_table, varchar output_table, varchar independent_varname, varchar dependent_varname, integer[] hidden_layer_sizes, varchar optimizer_params, varchar activation):&#160;mlp.sql_in'],['../mlp_8sql__in.html#a4f96e5b5b480023923db16bbd3a7c158',1,'mlp_regression(varchar source_table, varchar output_table, varchar independent_varname, varchar dependent_varname, integer[] hidden_layer_sizes, varchar optimizer_params):&#160;mlp.sql_in'],['../mlp_8sql__in.html#afa76bcdc0ea92342f65f9428dc1c51f6',1,'mlp_regression(varchar source_table, varchar output_table, varchar independent_varname, varchar dependent_varname, integer[] hidden_layer_sizes):&#160;mlp.sql_in'],['../mlp_8sql__in.html#af3b4c5961aee9cbd73fb3659a6e71a6c',1,'mlp_regression(text message):&#160;mlp.sql_in'],['../mlp_8sql__in.html#a35b3d56f14169bab8a9b93ad4234786b',1,'mlp_regression():&#160;mlp.sql_in']]],
+  ['mode',['mode',['../utilities_8sql__in.html#ac25ef90f8a8e2f9b2244a57d92086c91',1,'utilities.sql_in']]],
+  ['mse_5ferror',['mse_error',['../cross__validation_8sql__in.html#a2cd71e756f90b0c4fa46f508a1ca261e',1,'cross_validation.sql_in']]],
+  ['multilogistic_2esql_5fin',['multilogistic.sql_in',['../multilogistic_8sql__in.html',1,'']]],
+  ['multiresponseglm_2esql_5fin',['multiresponseglm.sql_in',['../multiresponseglm_8sql__in.html',1,'']]],
+  ['mw_5ftest_5ffinal',['mw_test_final',['../hypothesis__tests_8sql__in.html#ac18e666088117997da2d22236e982f5e',1,'hypothesis_tests.sql_in']]],
+  ['mw_5ftest_5ftransition',['mw_test_transition',['../hypothesis__tests_8sql__in.html#a4e324c82b069ebf7b498012aa83931c5',1,'hypothesis_tests.sql_in']]]
+];
diff --git a/docs/rc/search/all_d.html b/docs/rc/search/all_d.html
new file mode 100644
index 0000000..9986c9c
--- /dev/null
+++ b/docs/rc/search/all_d.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_d.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/all_d.js b/docs/rc/search/all_d.js
new file mode 100644
index 0000000..a5681bf
--- /dev/null
+++ b/docs/rc/search/all_d.js
@@ -0,0 +1,32 @@
+var searchData=
+[
+  ['naive_20bayes_20classification',['Naive Bayes Classification',['../group__grp__bayes.html',1,'']]],
+  ['norms_20and_20distance_20functions',['Norms and Distance Functions',['../group__grp__linalg.html',1,'']]],
+  ['neural_20network',['Neural Network',['../group__grp__nn.html',1,'']]],
+  ['negative_5fbinomial_5fcdf',['negative_binomial_cdf',['../prob_8sql__in.html#ad0a7e4474f828869fb90e62f8e6f04d7',1,'prob.sql_in']]],
+  ['negative_5fbinomial_5fpmf',['negative_binomial_pmf',['../prob_8sql__in.html#ab9cbc30424eba30f2df2a32a7e45f138',1,'prob.sql_in']]],
+  ['negative_5fbinomial_5fquantile',['negative_binomial_quantile',['../prob_8sql__in.html#ad9e541de8b41da2e7b7434f862db4845',1,'prob.sql_in']]],
+  ['non_5fcentral_5fbeta_5fcdf',['non_central_beta_cdf',['../prob_8sql__in.html#a1361569bd86e41f796c70f8cb277010e',1,'prob.sql_in']]],
+  ['non_5fcentral_5fbeta_5fpdf',['non_central_beta_pdf',['../prob_8sql__in.html#ad4a12c083054f0e2d316ae76c9aaeef7',1,'prob.sql_in']]],
+  ['non_5fcentral_5fbeta_5fquantile',['non_central_beta_quantile',['../prob_8sql__in.html#a3073b409eaee3faa6d43df014662c279',1,'prob.sql_in']]],
+  ['non_5fcentral_5fchi_5fsquared_5fcdf',['non_central_chi_squared_cdf',['../prob_8sql__in.html#ab4b7d2cf10bb031328dcc34c6ff494ad',1,'prob.sql_in']]],
+  ['non_5fcentral_5fchi_5fsquared_5fpdf',['non_central_chi_squared_pdf',['../prob_8sql__in.html#aa7a563183224593d1e0d623a3c5489d8',1,'prob.sql_in']]],
+  ['non_5fcentral_5fchi_5fsquared_5fquantile',['non_central_chi_squared_quantile',['../prob_8sql__in.html#ad694e29187b629ae683ef1235d2b9270',1,'prob.sql_in']]],
+  ['non_5fcentral_5ff_5fcdf',['non_central_f_cdf',['../prob_8sql__in.html#a00051df630007b530ce86b4ab44a0434',1,'prob.sql_in']]],
+  ['non_5fcentral_5ff_5fpdf',['non_central_f_pdf',['../prob_8sql__in.html#a3d94edcf90fca1fa52671293a9ea9c2f',1,'prob.sql_in']]],
+  ['non_5fcentral_5ff_5fquantile',['non_central_f_quantile',['../prob_8sql__in.html#a92b2a978db480a6c78cfb708107ecb92',1,'prob.sql_in']]],
+  ['non_5fcentral_5ft_5fcdf',['non_central_t_cdf',['../prob_8sql__in.html#afaf4374d2720b230a54713e21ecb1955',1,'prob.sql_in']]],
+  ['non_5fcentral_5ft_5fpdf',['non_central_t_pdf',['../prob_8sql__in.html#a4799e3bb68a496d9bc1ef1ea85265409',1,'prob.sql_in']]],
+  ['non_5fcentral_5ft_5fquantile',['non_central_t_quantile',['../prob_8sql__in.html#af50865aba2ece2e23b2af461a02f7d12',1,'prob.sql_in']]],
+  ['noop',['noop',['../utilities_8sql__in.html#ab194d6a1222672c314ea39b78aad8fd0',1,'utilities.sql_in']]],
+  ['norm1',['norm1',['../linalg_8sql__in.html#a300300fe4b8576ba0b97b95d8dea3057',1,'linalg.sql_in']]],
+  ['norm2',['norm2',['../linalg_8sql__in.html#a50fdfe30cc0edc6888a909dbb4b4c239',1,'linalg.sql_in']]],
+  ['normal_5fcdf',['normal_cdf',['../prob_8sql__in.html#aebcd34ad7b1ca4b31d9699112c9a3b90',1,'normal_cdf(float8 x, float8 mean=0, float8 sd=1):&#160;prob.sql_in'],['../prob_8sql__in.html#a370e31a46781ed8832b31625a683d053',1,'normal_cdf(float8 x, float8 mean):&#160;prob.sql_in'],['../prob_8sql__in.html#a6c0a499faa80db26c0178f1e69cf7a50',1,'normal_cdf(float8 x):&#160;prob.sql_in']]],
+  ['normal_5fpdf',['normal_pdf',['../prob_8sql__in.html#a63f555f36385d86e229cdca223e39567',1,'normal_pdf(float8 x, float8 mean=0, float8 sd=1):&#160;prob.sql_in'],['../prob_8sql__in.html#a4ee303e56677465989c30230c7f55004',1,'normal_pdf(float8 x, float8 mean):&#160;prob.sql_in'],['../prob_8sql__in.html#a2836483a456c4bf2c9886763b270317e',1,'normal_pdf(float8 x):&#160;prob.sql_in']]],
+  ['normal_5fquantile',['normal_quantile',['../prob_8sql__in.html#a53d56b672fe4cd1277cb5eac5de5118f',1,'normal_quantile(float8 p, float8 mean=0, float8 sd=1):&#160;prob.sql_in'],['../prob_8sql__in.html#a1b1f9d685f262ade8863ab3a1632b8d6',1,'normal_quantile(float8 p, float8 mean):&#160;prob.sql_in'],['../prob_8sql__in.html#a643bb4b6b880b96cf924c16e08b015d3',1,'normal_quantile(float8 p):&#160;prob.sql_in']]],
+  ['normalize',['normalize',['../array__ops_8sql__in.html#acb57ea4521dcb717f9e3148e0acccc74',1,'normalize(anyarray x):&#160;array_ops.sql_in'],['../svec__util_8sql__in.html#aace16abea7c63f136520fde6c28f1f28',1,'normalize(svec):&#160;svec_util.sql_in']]],
+  ['normalize_5fsum_5farray',['normalize_sum_array',['../random__forest_8sql__in.html#a33a268c5561595aa0efe6508bfaf6d47',1,'random_forest.sql_in']]],
+  ['normalized_5favg',['normalized_avg',['../linalg_8sql__in.html#a0b04663ca206f03e66aed5ea2b4cc461',1,'linalg.sql_in']]],
+  ['normalized_5favg_5fvector_5ffinal',['normalized_avg_vector_final',['../linalg_8sql__in.html#a1c22ee0672d6c550f5bb966f78ce738a',1,'linalg.sql_in']]],
+  ['normalized_5favg_5fvector_5ftransition',['normalized_avg_vector_transition',['../linalg_8sql__in.html#ad5863fed5eb4813ba0044abc268d03ce',1,'linalg.sql_in']]]
+];
diff --git a/docs/rc/search/all_e.html b/docs/rc/search/all_e.html
new file mode 100644
index 0000000..9fa42bb
--- /dev/null
+++ b/docs/rc/search/all_e.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_e.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/all_e.js b/docs/rc/search/all_e.js
new file mode 100644
index 0000000..c75bef5
--- /dev/null
+++ b/docs/rc/search/all_e.js
@@ -0,0 +1,9 @@
+var searchData=
+[
+  ['ordinal_20regression',['Ordinal Regression',['../group__grp__ordinal.html',1,'']]],
+  ['one_5fway_5fanova',['one_way_anova',['../hypothesis__tests_8sql__in.html#abd5c80afd954294de268030ee73e88cc',1,'hypothesis_tests.sql_in']]],
+  ['one_5fway_5fanova_5ffinal',['one_way_anova_final',['../hypothesis__tests_8sql__in.html#a5ac28bec7ff670a7da8b9eae4a8ed4cb',1,'hypothesis_tests.sql_in']]],
+  ['one_5fway_5fanova_5fmerge_5fstates',['one_way_anova_merge_states',['../hypothesis__tests_8sql__in.html#ad6c05d07183c961961f171b0a925ad93',1,'hypothesis_tests.sql_in']]],
+  ['one_5fway_5fanova_5ftransition',['one_way_anova_transition',['../hypothesis__tests_8sql__in.html#aa694f4ce95280210a3887773bb3f417b',1,'hypothesis_tests.sql_in']]],
+  ['ordinal_2esql_5fin',['ordinal.sql_in',['../ordinal_8sql__in.html',1,'']]]
+];
diff --git a/docs/rc/search/all_f.html b/docs/rc/search/all_f.html
new file mode 100644
index 0000000..6ecfc0e
--- /dev/null
+++ b/docs/rc/search/all_f.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_f.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/all_f.js b/docs/rc/search/all_f.js
new file mode 100644
index 0000000..97be23e
--- /dev/null
+++ b/docs/rc/search/all_f.js
@@ -0,0 +1,37 @@
+var searchData=
+[
+  ['preprocessor_20for_20images',['Preprocessor for Images',['../group__grp__input__preprocessor__dl.html',1,'']]],
+  ['pagerank',['PageRank',['../group__grp__pagerank.html',1,'']]],
+  ['path',['Path',['../group__grp__path.html',1,'']]],
+  ['principal_20component_20projection',['Principal Component Projection',['../group__grp__pca__project.html',1,'']]],
+  ['principal_20component_20analysis',['Principal Component Analysis',['../group__grp__pca__train.html',1,'']]],
+  ['pivot',['Pivot',['../group__grp__pivot.html',1,'']]],
+  ['pmml_20export',['PMML Export',['../group__grp__pmml.html',1,'']]],
+  ['prediction_20metrics',['Prediction Metrics',['../group__grp__pred.html',1,'']]],
+  ['probability_20functions',['Probability Functions',['../group__grp__prob.html',1,'']]],
+  ['pagerank',['pagerank',['../pagerank_8sql__in.html#ae13d4e007bbfc6629f8cf5e938e9c306',1,'pagerank(text vertex_table, text vertex_id, text edge_table, text edge_args, text out_table, float8 damping_factor, integer max_iter, float8 threshold, varchar grouping_cols, integer[] personalization_vertices):&#160;pagerank.sql_in'],['../pagerank_8sql__in.html#ac85f61143b581cd969530cea7a5311cc',1,'pagerank(text vertex_table, text vertex_id, text edge_table, text edge_args, text out_table, float8 damping_factor, integer max_iter, float8 threshold, varchar grouping_cols):&#160;pagerank.sql_in'],['../pagerank_8sql__in.html#afef4de2968cdf226c8c866ea74439569',1,'pagerank(text vertex_table, text vertex_id, text edge_table, text edge_args, text out_table, float8 damping_factor, integer max_iter, float8 threshold):&#160;pagerank.sql_in'],['../pagerank_8sql__in.html#a89e65d85e3f29c4659257a817c1bceb1',1,'pagerank(text vertex_table, text vertex_id, text edge_table, text edge_args, text out_table, float8 damping_factor, integer max_iter):&#160;pagerank.sql_in'],['../pagerank_8sql__in.html#ad5b0fd743404c42dce6a9fc0e35f7645',1,'pagerank(text vertex_table, text vertex_id, text edge_table, text edge_args, text out_table, float8 damping_factor):&#160;pagerank.sql_in'],['../pagerank_8sql__in.html#aae888a524d7fbb9fd3e94c1ee9a4dd42',1,'pagerank(text vertex_table, text vertex_id, text edge_table, text edge_args, text out_table):&#160;pagerank.sql_in'],['../pagerank_8sql__in.html#a5a240ada11e9de64e4b9930a81b81cd6',1,'pagerank(varchar message):&#160;pagerank.sql_in'],['../pagerank_8sql__in.html#a2e7d15ac323613c4e2a3275b75f85f6e',1,'pagerank():&#160;pagerank.sql_in']]],
+  ['pagerank_2esql_5fin',['pagerank.sql_in',['../pagerank_8sql__in.html',1,'']]],
+  ['pareto_5fcdf',['pareto_cdf',['../prob_8sql__in.html#aa1a42ebd68f20f65bc1784b427721b5d',1,'prob.sql_in']]],
+  ['pareto_5fpdf',['pareto_pdf',['../prob_8sql__in.html#a22c56a6e48bc442435b13afac2a1eb37',1,'prob.sql_in']]],
+  ['pareto_5fquantile',['pareto_quantile',['../prob_8sql__in.html#a77779e2b5fa951189ccba6806c503c4d',1,'prob.sql_in']]],
+  ['path',['path',['../path_8sql__in.html#a8de69ef8c9e00f5e27d4de16ad2f157a',1,'path(varchar source_table, varchar output_table, varchar partition_expr, varchar order_expr, varchar symbol_expr, varchar pattern_expr, varchar agg_func, boolean persist_rows, boolean overlapping_patterns):&#160;path.sql_in'],['../path_8sql__in.html#adb47d7f926d4800bd443d041fb42c3d0',1,'path(varchar source_table, varchar output_table, varchar partition_expr, varchar order_expr, varchar symbol_expr, varchar pattern_expr, varchar agg_func, boolean persist_rows):&#160;path.sql_in'],['../path_8sql__in.html#a2b676d9c8c02a98522cc8e0fee5a899d',1,'path(varchar source_table, varchar output_table, varchar partition_expr, varchar order_expr, varchar symbol_expr, varchar pattern_expr, varchar agg_func):&#160;path.sql_in'],['../path_8sql__in.html#ac2ca139a2066f39fc7da14824574d789',1,'path(varchar source_table, varchar output_table, varchar partition_expr, varchar order_expr, varchar symbol_expr, varchar pattern_expr):&#160;path.sql_in'],['../path_8sql__in.html#aae6088d72cc92f9542a72136acaa372f',1,'path(text message):&#160;path.sql_in'],['../path_8sql__in.html#af5842a2917fdea02cca12c8104bff022',1,'path():&#160;path.sql_in']]],
+  ['path_2esql_5fin',['path.sql_in',['../path_8sql__in.html',1,'']]],
+  ['path_5fpattern_5fmatch',['path_pattern_match',['../path_8sql__in.html#a841bef9d28833c6ecac9c3f957558c2f',1,'path.sql_in']]],
+  ['pca_2esql_5fin',['pca.sql_in',['../pca_8sql__in.html',1,'']]],
+  ['pca_5fproject',['pca_project',['../pca__project_8sql__in.html#a30c86aed79810df5595451481ba74265',1,'pca_project(text source_table, text pc_table, text out_table, text row_id, text residual_table, text result_summary_table):&#160;pca_project.sql_in'],['../pca__project_8sql__in.html#a075512374d6c3c21c9dfabb8449612b5',1,'pca_project(text source_table, text pc_table, text out_table, text row_id):&#160;pca_project.sql_in'],['../pca__project_8sql__in.html#aa760c09bdf15997da8a4ca50c6f90961',1,'pca_project(text source_table, text pc_table, text out_table, text row_id, text residual_table):&#160;pca_project.sql_in'],['../pca__project_8sql__in.html#a05473fbffb6c1ff77656c212b046eec8',1,'pca_project(text usage_string):&#160;pca_project.sql_in'],['../pca__project_8sql__in.html#a62c1f14279f47af3bdbddb52b8c712bf',1,'pca_project():&#160;pca_project.sql_in']]],
+  ['pca_5fproject_2esql_5fin',['pca_project.sql_in',['../pca__project_8sql__in.html',1,'']]],
+  ['pca_5fsparse_5fproject',['pca_sparse_project',['../pca__project_8sql__in.html#a2ffda9dc6c376df9f31e71b41b7259b3',1,'pca_sparse_project(text source_table, text pc_table, text out_table, text row_id, text col_id, text val_id, int4 row_dim, int4 col_dim, text residual_table, text result_summary_table):&#160;pca_project.sql_in'],['../pca__project_8sql__in.html#ae5b361b468fffb7aeec2330c3b026bd1',1,'pca_sparse_project(text source_table, text pc_table, text out_table, text row_id, text col_id, text val_id, int4 row_dim, int4 col_dim):&#160;pca_project.sql_in'],['../pca__project_8sql__in.html#aa9c21f739fbc2f8c6e7e6c1a3eaba5cd',1,'pca_sparse_project(text source_table, text pc_table, text out_table, text row_id, text col_id, text val_id, int4 row_dim, int4 col_dim, text residual_table):&#160;pca_project.sql_in'],['../pca__project_8sql__in.html#aa738137f91d595f312d5dd85f5e9c8ee',1,'pca_sparse_project(text usage_string):&#160;pca_project.sql_in'],['../pca__project_8sql__in.html#a6e62919f439ad5d62992c958a9324dce',1,'pca_sparse_project():&#160;pca_project.sql_in']]],
+  ['pca_5fsparse_5ftrain',['pca_sparse_train',['../pca_8sql__in.html#aaf22f179f07b6a88edd410a3f163d80b',1,'pca_sparse_train(text source_table, text pc_table, text row_id, text col_id, text val_id, integer row_dim, integer col_dim, integer k, text grouping_cols, integer lanczos_iter, boolean use_correlation, text result_summary_table, float8 variance):&#160;pca.sql_in'],['../pca_8sql__in.html#a9c819bc0f3fa1f02234d62cd5a8f391e',1,'pca_sparse_train(text source_table, text pc_table, text row_id, text col_id, text val_id, integer row_dim, integer col_dim, integer k, text grouping_cols, integer lanczos_iter, boolean use_correlation, text result_summary_table):&#160;pca.sql_in'],['../pca_8sql__in.html#a5f808e855a139ac21876bd8d7f6c94f9',1,'pca_sparse_train(text source_table, text pc_table, text row_id, text col_id, text val_id, integer row_dim, integer col_dim, integer k, text grouping_cols, integer lanczos_iter, boolean use_correlation):&#160;pca.sql_in'],['../pca_8sql__in.html#ace5236fb2133c297eca85ab788e6dfc2',1,'pca_sparse_train(text source_table, text pc_table, text row_id, text col_id, text val_id, integer row_dim, integer col_dim, integer k, text grouping_cols, integer lanczos_iter):&#160;pca.sql_in'],['../pca_8sql__in.html#a370a0cd4c3776db9716783877caaaea5',1,'pca_sparse_train(text source_table, text pc_table, text row_id, text col_id, text val_id, integer row_dim, integer col_dim, integer k, text grouping_cols):&#160;pca.sql_in'],['../pca_8sql__in.html#a47c9234d8f49a7467b4e2d172eb6958f',1,'pca_sparse_train(text source_table, text pc_table, text row_id, text col_id, text val_id, integer row_dim, integer col_dim, integer k):&#160;pca.sql_in'],['../pca_8sql__in.html#abcb783cb9b8cf34520930a25e1264566',1,'pca_sparse_train(text source_table, text pc_table, text row_id, text col_id, text val_id, integer row_dim, integer col_dim, float8 variance, text grouping_cols, integer lanczos_iter, boolean use_correlation, text result_summary_table):&#160;pca.sql_in'],['../pca_8sql__in.html#aaac2bea5ee35d3c250fb8ddfb43de7ee',1,'pca_sparse_train(text source_table, text pc_table, text row_id, text col_id, text val_id, integer row_dim, integer col_dim, float8 variance, text grouping_cols, integer lanczos_iter, boolean use_correlation):&#160;pca.sql_in'],['../pca_8sql__in.html#a7eefdb60ea3a6ba720c22159708bbf6b',1,'pca_sparse_train(text source_table, text pc_table, text row_id, text col_id, text val_id, integer row_dim, integer col_dim, float8 variance, text grouping_cols, integer lanczos_iter):&#160;pca.sql_in'],['../pca_8sql__in.html#a5bde0ac01309c986b8aed5ff3ccb2b04',1,'pca_sparse_train(text source_table, text pc_table, text row_id, text col_id, text val_id, integer row_dim, integer col_dim, float8 variance, text grouping_cols):&#160;pca.sql_in'],['../pca_8sql__in.html#a5258b8d0fdd1697c3ab3e4d954d07ca1',1,'pca_sparse_train(text source_table, text pc_table, text row_id, text col_id, text val_id, integer row_dim, integer col_dim, float8 variance):&#160;pca.sql_in'],['../pca_8sql__in.html#aa3e70c278fc1d4ab52396192691a8a3e',1,'pca_sparse_train(varchar usage_string):&#160;pca.sql_in'],['../pca_8sql__in.html#a1a62d21cdcc12ff8a54ea572f5af7073',1,'pca_sparse_train():&#160;pca.sql_in']]],
+  ['pca_5ftrain',['pca_train',['../pca_8sql__in.html#aa0482e3074f528f681a6cb4a374e25a1',1,'pca_train(text source_table, text pc_table, text row_id, integer k, text grouping_cols, integer lanczos_iter, boolean use_correlation, text result_summary_table, float8 variance):&#160;pca.sql_in'],['../pca_8sql__in.html#a4cf4caceb80885e288cc0451e6f47695',1,'pca_train(text source_table, text pc_table, text row_id, integer k, text grouping_cols, integer lanczos_iter, boolean use_correlation, text result_summary_table):&#160;pca.sql_in'],['../pca_8sql__in.html#a5634af9beb7936506ec2f5775c81d038',1,'pca_train(text source_table, text pc_table, text row_id, integer k, text grouping_cols, integer lanczos_iter, boolean use_correlation):&#160;pca.sql_in'],['../pca_8sql__in.html#a2d1cfcf6a7c8a9c69808ec8927b900d1',1,'pca_train(text source_table, text pc_table, text row_id, integer k, text grouping_cols, integer lanczos_iter):&#160;pca.sql_in'],['../pca_8sql__in.html#a7b52d3800ed2d529ccd2a1c2417a986d',1,'pca_train(text source_table, text pc_table, text row_id, integer k, text grouping_cols):&#160;pca.sql_in'],['../pca_8sql__in.html#a13f55d8f0ddc1ed37dc06dfd1f797f8d',1,'pca_train(text source_table, text pc_table, text row_id, integer k):&#160;pca.sql_in'],['../pca_8sql__in.html#aa3935e186e2db92ddad12574924dc075',1,'pca_train(text source_table, text pc_table, text row_id, float8 variance, text grouping_cols, integer lanczos_iter, boolean use_correlation, text result_summary_table):&#160;pca.sql_in'],['../pca_8sql__in.html#a0fca1853e46de92796f1b2462073bb87',1,'pca_train(text source_table, text pc_table, text row_id, float8 variance, text grouping_cols, integer lanczos_iter, boolean use_correlation):&#160;pca.sql_in'],['../pca_8sql__in.html#a7acd4b138ff5edd6e51ff3727842123a',1,'pca_train(text source_table, text pc_table, text row_id, float8 variance, text grouping_cols, integer lanczos_iter):&#160;pca.sql_in'],['../pca_8sql__in.html#ae7d85a5369594004c207604e486c4a9b',1,'pca_train(text source_table, text pc_table, text row_id, float8 variance, text grouping_cols):&#160;pca.sql_in'],['../pca_8sql__in.html#a3facc2b75c5a57b469d636b0cf71f624',1,'pca_train(text source_table, text pc_table, text row_id, float8 variance):&#160;pca.sql_in'],['../pca_8sql__in.html#a3bdb5967e072a36265fafe9f37164622',1,'pca_train(varchar usage_string):&#160;pca.sql_in'],['../pca_8sql__in.html#a31abf88e67a446a4f789764aa2c61e85',1,'pca_train():&#160;pca.sql_in']]],
+  ['pivot',['pivot',['../pivot_8sql__in.html#aaabcd0b46dea69aa924a02d00119b064',1,'pivot(text source_table, text output_table, text index, text pivot_cols, text pivot_values, text aggregate_func, text fill_value, boolean keep_null, boolean output_col_dictionary, text output_type):&#160;pivot.sql_in'],['../pivot_8sql__in.html#a54cf9b84a727e8364ea1f30c4ed77cf1',1,'pivot(text source_table, text output_table, text index, text pivot_cols, text pivot_values, text aggregate_func, text fill_value, boolean keep_null, boolean output_col_dictionary):&#160;pivot.sql_in'],['../pivot_8sql__in.html#a9aac423ee5ab1746428712b6318d082e',1,'pivot(text source_table, text output_table, text index, text pivot_cols, text pivot_values, text aggregate_func, text fill_value, boolean keep_null):&#160;pivot.sql_in'],['../pivot_8sql__in.html#aa4a81e670839f4c85dd3ec54105834cb',1,'pivot(text source_table, text output_table, text index, text pivot_cols, text pivot_values, text aggregate_func, text fill_value):&#160;pivot.sql_in'],['../pivot_8sql__in.html#a1d2163cb3a187ae9313712b115c14b75',1,'pivot(text source_table, text output_table, text index, text pivot_cols, text pivot_values, text aggregate_func, boolean keep_null):&#160;pivot.sql_in'],['../pivot_8sql__in.html#a321c365b023fba333a6b98093fd47492',1,'pivot(text source_table, text output_table, text index, text pivot_cols, text pivot_values, text aggregate_func):&#160;pivot.sql_in'],['../pivot_8sql__in.html#ad6ee7cf2b82f8c01cbc3eb89afc0bab3',1,'pivot(text source_table, text output_table, text index, text pivot_cols, text pivot_values, boolean keep_null):&#160;pivot.sql_in'],['../pivot_8sql__in.html#a4928b16b8473c2f7818fd58a633c5df7',1,'pivot(text source_table, text output_table, text index, text pivot_cols, text pivot_values):&#160;pivot.sql_in'],['../pivot_8sql__in.html#a65b0595b546a491f87ae1a8b2c0d33ec',1,'pivot(varchar message):&#160;pivot.sql_in'],['../pivot_8sql__in.html#a813c48cacf93deb9720a7994ee6d14bb',1,'pivot():&#160;pivot.sql_in']]],
+  ['pivot_2esql_5fin',['pivot.sql_in',['../pivot_8sql__in.html',1,'']]],
+  ['pivotalr_5farrayops_2esql_5fin',['pivotalr_arrayops.sql_in',['../pivotalr__arrayops_8sql__in.html',1,'']]],
+  ['pmml',['pmml',['../table__to__pmml_8sql__in.html#a9635b6989d9f972497b6b4164b77aa0a',1,'pmml(varchar model_table):&#160;table_to_pmml.sql_in'],['../table__to__pmml_8sql__in.html#a7e2c2a3746b6e2c68f9886ca2b8b7e09',1,'pmml(varchar model_table, varchar name_spec):&#160;table_to_pmml.sql_in'],['../table__to__pmml_8sql__in.html#a4aa7db5ec62506546dcbe178f6dcf262',1,'pmml(varchar model_table, varchar[] name_spec):&#160;table_to_pmml.sql_in'],['../table__to__pmml_8sql__in.html#a3aa36483b5dd5af46f9b564397822817',1,'pmml():&#160;table_to_pmml.sql_in']]],
+  ['poisson_5fcdf',['poisson_cdf',['../prob_8sql__in.html#ae0b4313d9fe730d6efb3f7c44206f345',1,'prob.sql_in']]],
+  ['poisson_5fpmf',['poisson_pmf',['../prob_8sql__in.html#a82f1edc27261021c73cd080ff2677a9f',1,'prob.sql_in']]],
+  ['poisson_5fquantile',['poisson_quantile',['../prob_8sql__in.html#a032d26db18b2ee1034085f5521939c61',1,'prob.sql_in']]],
+  ['poisson_5frandom',['poisson_random',['../sample_8sql__in.html#a2051a3f21bc06e3c6e3efcd7492b71c4',1,'sample.sql_in']]],
+  ['porter_5fstemmer_2esql_5fin',['porter_stemmer.sql_in',['../porter__stemmer_8sql__in.html',1,'']]],
+  ['pred_5fmetrics_2esql_5fin',['pred_metrics.sql_in',['../pred__metrics_8sql__in.html',1,'']]],
+  ['prob_2esql_5fin',['prob.sql_in',['../prob_8sql__in.html',1,'']]]
+];
diff --git a/docs/rc/search/close.png b/docs/rc/search/close.png
new file mode 100644
index 0000000..9342d3d
--- /dev/null
+++ b/docs/rc/search/close.png
Binary files differ
diff --git a/docs/rc/search/files_0.html b/docs/rc/search/files_0.html
new file mode 100644
index 0000000..4f272b8
--- /dev/null
+++ b/docs/rc/search/files_0.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="files_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/files_0.js b/docs/rc/search/files_0.js
new file mode 100644
index 0000000..6f98d80
--- /dev/null
+++ b/docs/rc/search/files_0.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+  ['apsp_2esql_5fin',['apsp.sql_in',['../apsp_8sql__in.html',1,'']]],
+  ['arima_2esql_5fin',['arima.sql_in',['../arima_8sql__in.html',1,'']]],
+  ['array_5fops_2esql_5fin',['array_ops.sql_in',['../array__ops_8sql__in.html',1,'']]],
+  ['assoc_5frules_2esql_5fin',['assoc_rules.sql_in',['../assoc__rules_8sql__in.html',1,'']]]
+];
diff --git a/docs/rc/search/files_1.html b/docs/rc/search/files_1.html
new file mode 100644
index 0000000..dcce422
--- /dev/null
+++ b/docs/rc/search/files_1.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="files_1.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/files_1.js b/docs/rc/search/files_1.js
new file mode 100644
index 0000000..eaf5c63
--- /dev/null
+++ b/docs/rc/search/files_1.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+  ['balance_5fsample_2esql_5fin',['balance_sample.sql_in',['../balance__sample_8sql__in.html',1,'']]],
+  ['bayes_2esql_5fin',['bayes.sql_in',['../bayes_8sql__in.html',1,'']]],
+  ['bfs_2esql_5fin',['bfs.sql_in',['../bfs_8sql__in.html',1,'']]]
+];
diff --git a/docs/rc/search/files_10.html b/docs/rc/search/files_10.html
new file mode 100644
index 0000000..d2187f6
--- /dev/null
+++ b/docs/rc/search/files_10.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="files_10.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/files_10.js b/docs/rc/search/files_10.js
new file mode 100644
index 0000000..60adb7f
--- /dev/null
+++ b/docs/rc/search/files_10.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['utilities_2esql_5fin',['utilities.sql_in',['../utilities_8sql__in.html',1,'']]],
+  ['utils_5fregularization_2esql_5fin',['utils_regularization.sql_in',['../utils__regularization_8sql__in.html',1,'']]]
+];
diff --git a/docs/rc/search/files_11.html b/docs/rc/search/files_11.html
new file mode 100644
index 0000000..a5e6888
--- /dev/null
+++ b/docs/rc/search/files_11.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="files_11.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/files_11.js b/docs/rc/search/files_11.js
new file mode 100644
index 0000000..a269f4c
--- /dev/null
+++ b/docs/rc/search/files_11.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['vec2cols_2esql_5fin',['vec2cols.sql_in',['../vec2cols_8sql__in.html',1,'']]],
+  ['viterbi_2esql_5fin',['viterbi.sql_in',['../viterbi_8sql__in.html',1,'']]]
+];
diff --git a/docs/rc/search/files_12.html b/docs/rc/search/files_12.html
new file mode 100644
index 0000000..0bfddb7
--- /dev/null
+++ b/docs/rc/search/files_12.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="files_12.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/files_12.js b/docs/rc/search/files_12.js
new file mode 100644
index 0000000..ab6bad5
--- /dev/null
+++ b/docs/rc/search/files_12.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['wcc_2esql_5fin',['wcc.sql_in',['../wcc_8sql__in.html',1,'']]]
+];
diff --git a/docs/rc/search/files_2.html b/docs/rc/search/files_2.html
new file mode 100644
index 0000000..d5c6c3b
--- /dev/null
+++ b/docs/rc/search/files_2.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="files_2.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/files_2.js b/docs/rc/search/files_2.js
new file mode 100644
index 0000000..a76dcef
--- /dev/null
+++ b/docs/rc/search/files_2.js
@@ -0,0 +1,14 @@
+var searchData=
+[
+  ['clustered_5fvariance_2esql_5fin',['clustered_variance.sql_in',['../clustered__variance_8sql__in.html',1,'']]],
+  ['clustered_5fvariance_5fcoxph_2esql_5fin',['clustered_variance_coxph.sql_in',['../clustered__variance__coxph_8sql__in.html',1,'']]],
+  ['cols2vec_2esql_5fin',['cols2vec.sql_in',['../cols2vec_8sql__in.html',1,'']]],
+  ['conjugate_5fgradient_2esql_5fin',['conjugate_gradient.sql_in',['../conjugate__gradient_8sql__in.html',1,'']]],
+  ['correlation_2esql_5fin',['correlation.sql_in',['../correlation_8sql__in.html',1,'']]],
+  ['cox_5fprop_5fhazards_2esql_5fin',['cox_prop_hazards.sql_in',['../cox__prop__hazards_8sql__in.html',1,'']]],
+  ['create_5findicators_2esql_5fin',['create_indicators.sql_in',['../create__indicators_8sql__in.html',1,'']]],
+  ['crf_2esql_5fin',['crf.sql_in',['../crf_8sql__in.html',1,'']]],
+  ['crf_5fdata_5floader_2esql_5fin',['crf_data_loader.sql_in',['../crf__data__loader_8sql__in.html',1,'']]],
+  ['crf_5ffeature_5fgen_2esql_5fin',['crf_feature_gen.sql_in',['../crf__feature__gen_8sql__in.html',1,'']]],
+  ['cross_5fvalidation_2esql_5fin',['cross_validation.sql_in',['../cross__validation_8sql__in.html',1,'']]]
+];
diff --git a/docs/rc/search/files_3.html b/docs/rc/search/files_3.html
new file mode 100644
index 0000000..d5a9528
--- /dev/null
+++ b/docs/rc/search/files_3.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="files_3.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/files_3.js b/docs/rc/search/files_3.js
new file mode 100644
index 0000000..494b0e5
--- /dev/null
+++ b/docs/rc/search/files_3.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+  ['decision_5ftree_2esql_5fin',['decision_tree.sql_in',['../decision__tree_8sql__in.html',1,'']]],
+  ['dense_5flinear_5fsystems_2esql_5fin',['dense_linear_systems.sql_in',['../dense__linear__systems_8sql__in.html',1,'']]],
+  ['distribution_2esql_5fin',['distribution.sql_in',['../distribution_8sql__in.html',1,'']]]
+];
diff --git a/docs/rc/search/files_4.html b/docs/rc/search/files_4.html
new file mode 100644
index 0000000..7b4c42a
--- /dev/null
+++ b/docs/rc/search/files_4.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="files_4.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/files_4.js b/docs/rc/search/files_4.js
new file mode 100644
index 0000000..cdf7d5f
--- /dev/null
+++ b/docs/rc/search/files_4.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['elastic_5fnet_2esql_5fin',['elastic_net.sql_in',['../elastic__net_8sql__in.html',1,'']]],
+  ['encode_5fcategorical_2esql_5fin',['encode_categorical.sql_in',['../encode__categorical_8sql__in.html',1,'']]]
+];
diff --git a/docs/rc/search/files_5.html b/docs/rc/search/files_5.html
new file mode 100644
index 0000000..1f77bb1
--- /dev/null
+++ b/docs/rc/search/files_5.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="files_5.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/files_5.js b/docs/rc/search/files_5.js
new file mode 100644
index 0000000..501093c
--- /dev/null
+++ b/docs/rc/search/files_5.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['glm_2esql_5fin',['glm.sql_in',['../glm_8sql__in.html',1,'']]]
+];
diff --git a/docs/rc/search/files_6.html b/docs/rc/search/files_6.html
new file mode 100644
index 0000000..7573254
--- /dev/null
+++ b/docs/rc/search/files_6.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="files_6.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/files_6.js b/docs/rc/search/files_6.js
new file mode 100644
index 0000000..e4b674a
--- /dev/null
+++ b/docs/rc/search/files_6.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['hits_2esql_5fin',['hits.sql_in',['../hits_8sql__in.html',1,'']]],
+  ['hypothesis_5ftests_2esql_5fin',['hypothesis_tests.sql_in',['../hypothesis__tests_8sql__in.html',1,'']]]
+];
diff --git a/docs/rc/search/files_7.html b/docs/rc/search/files_7.html
new file mode 100644
index 0000000..214b329
--- /dev/null
+++ b/docs/rc/search/files_7.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="files_7.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/files_7.js b/docs/rc/search/files_7.js
new file mode 100644
index 0000000..8b05525
--- /dev/null
+++ b/docs/rc/search/files_7.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['input_5fdata_5fpreprocessor_2esql_5fin',['input_data_preprocessor.sql_in',['../input__data__preprocessor_8sql__in.html',1,'']]]
+];
diff --git a/docs/rc/search/files_8.html b/docs/rc/search/files_8.html
new file mode 100644
index 0000000..6720c7c
--- /dev/null
+++ b/docs/rc/search/files_8.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="files_8.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/files_8.js b/docs/rc/search/files_8.js
new file mode 100644
index 0000000..df41830
--- /dev/null
+++ b/docs/rc/search/files_8.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+  ['keras_5fmodel_5farch_5ftable_2esql_5fin',['keras_model_arch_table.sql_in',['../keras__model__arch__table_8sql__in.html',1,'']]],
+  ['kmeans_2esql_5fin',['kmeans.sql_in',['../kmeans_8sql__in.html',1,'']]],
+  ['knn_2esql_5fin',['knn.sql_in',['../knn_8sql__in.html',1,'']]]
+];
diff --git a/docs/rc/search/files_9.html b/docs/rc/search/files_9.html
new file mode 100644
index 0000000..fc95877
--- /dev/null
+++ b/docs/rc/search/files_9.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="files_9.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/files_9.js b/docs/rc/search/files_9.js
new file mode 100644
index 0000000..82cd635
--- /dev/null
+++ b/docs/rc/search/files_9.js
@@ -0,0 +1,8 @@
+var searchData=
+[
+  ['lda_2esql_5fin',['lda.sql_in',['../lda_8sql__in.html',1,'']]],
+  ['linalg_2esql_5fin',['linalg.sql_in',['../linalg_8sql__in.html',1,'']]],
+  ['linear_2esql_5fin',['linear.sql_in',['../linear_8sql__in.html',1,'']]],
+  ['lmf_2esql_5fin',['lmf.sql_in',['../lmf_8sql__in.html',1,'']]],
+  ['logistic_2esql_5fin',['logistic.sql_in',['../logistic_8sql__in.html',1,'']]]
+];
diff --git a/docs/rc/search/files_a.html b/docs/rc/search/files_a.html
new file mode 100644
index 0000000..ffe3e9d
--- /dev/null
+++ b/docs/rc/search/files_a.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="files_a.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/files_a.js b/docs/rc/search/files_a.js
new file mode 100644
index 0000000..3d494e5
--- /dev/null
+++ b/docs/rc/search/files_a.js
@@ -0,0 +1,15 @@
+var searchData=
+[
+  ['madlib_5fkeras_2esql_5fin',['madlib_keras.sql_in',['../madlib__keras_8sql__in.html',1,'']]],
+  ['madlib_5fkeras_5ffit_5fmultiple_5fmodel_2esql_5fin',['madlib_keras_fit_multiple_model.sql_in',['../madlib__keras__fit__multiple__model_8sql__in.html',1,'']]],
+  ['madlib_5fkeras_5fgpu_5finfo_2esql_5fin',['madlib_keras_gpu_info.sql_in',['../madlib__keras__gpu__info_8sql__in.html',1,'']]],
+  ['madlib_5fkeras_5fmodel_5fselection_2esql_5fin',['madlib_keras_model_selection.sql_in',['../madlib__keras__model__selection_8sql__in.html',1,'']]],
+  ['mainpage_2edox',['mainpage.dox',['../mainpage_8dox.html',1,'']]],
+  ['marginal_2esql_5fin',['marginal.sql_in',['../marginal_8sql__in.html',1,'']]],
+  ['matrix_5fops_2esql_5fin',['matrix_ops.sql_in',['../matrix__ops_8sql__in.html',1,'']]],
+  ['measures_2esql_5fin',['measures.sql_in',['../measures_8sql__in.html',1,'']]],
+  ['minibatch_5fpreprocessing_2esql_5fin',['minibatch_preprocessing.sql_in',['../minibatch__preprocessing_8sql__in.html',1,'']]],
+  ['mlp_2esql_5fin',['mlp.sql_in',['../mlp_8sql__in.html',1,'']]],
+  ['multilogistic_2esql_5fin',['multilogistic.sql_in',['../multilogistic_8sql__in.html',1,'']]],
+  ['multiresponseglm_2esql_5fin',['multiresponseglm.sql_in',['../multiresponseglm_8sql__in.html',1,'']]]
+];
diff --git a/docs/rc/search/files_b.html b/docs/rc/search/files_b.html
new file mode 100644
index 0000000..32cd2be
--- /dev/null
+++ b/docs/rc/search/files_b.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="files_b.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/files_b.js b/docs/rc/search/files_b.js
new file mode 100644
index 0000000..e75faef
--- /dev/null
+++ b/docs/rc/search/files_b.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['ordinal_2esql_5fin',['ordinal.sql_in',['../ordinal_8sql__in.html',1,'']]]
+];
diff --git a/docs/rc/search/files_c.html b/docs/rc/search/files_c.html
new file mode 100644
index 0000000..bb83608
--- /dev/null
+++ b/docs/rc/search/files_c.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="files_c.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/files_c.js b/docs/rc/search/files_c.js
new file mode 100644
index 0000000..c983575
--- /dev/null
+++ b/docs/rc/search/files_c.js
@@ -0,0 +1,12 @@
+var searchData=
+[
+  ['pagerank_2esql_5fin',['pagerank.sql_in',['../pagerank_8sql__in.html',1,'']]],
+  ['path_2esql_5fin',['path.sql_in',['../path_8sql__in.html',1,'']]],
+  ['pca_2esql_5fin',['pca.sql_in',['../pca_8sql__in.html',1,'']]],
+  ['pca_5fproject_2esql_5fin',['pca_project.sql_in',['../pca__project_8sql__in.html',1,'']]],
+  ['pivot_2esql_5fin',['pivot.sql_in',['../pivot_8sql__in.html',1,'']]],
+  ['pivotalr_5farrayops_2esql_5fin',['pivotalr_arrayops.sql_in',['../pivotalr__arrayops_8sql__in.html',1,'']]],
+  ['porter_5fstemmer_2esql_5fin',['porter_stemmer.sql_in',['../porter__stemmer_8sql__in.html',1,'']]],
+  ['pred_5fmetrics_2esql_5fin',['pred_metrics.sql_in',['../pred__metrics_8sql__in.html',1,'']]],
+  ['prob_2esql_5fin',['prob.sql_in',['../prob_8sql__in.html',1,'']]]
+];
diff --git a/docs/rc/search/files_d.html b/docs/rc/search/files_d.html
new file mode 100644
index 0000000..38bf2b3
--- /dev/null
+++ b/docs/rc/search/files_d.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="files_d.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/files_d.js b/docs/rc/search/files_d.js
new file mode 100644
index 0000000..283c351
--- /dev/null
+++ b/docs/rc/search/files_d.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+  ['random_5fforest_2esql_5fin',['random_forest.sql_in',['../random__forest_8sql__in.html',1,'']]],
+  ['robust_2esql_5fin',['robust.sql_in',['../robust_8sql__in.html',1,'']]],
+  ['robust_5fvariance_5fcoxph_2esql_5fin',['robust_variance_coxph.sql_in',['../robust__variance__coxph_8sql__in.html',1,'']]]
+];
diff --git a/docs/rc/search/files_e.html b/docs/rc/search/files_e.html
new file mode 100644
index 0000000..6f84762
--- /dev/null
+++ b/docs/rc/search/files_e.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="files_e.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/files_e.js b/docs/rc/search/files_e.js
new file mode 100644
index 0000000..1224629
--- /dev/null
+++ b/docs/rc/search/files_e.js
@@ -0,0 +1,14 @@
+var searchData=
+[
+  ['sample_2esql_5fin',['sample.sql_in',['../sample_8sql__in.html',1,'']]],
+  ['sessionize_2esql_5fin',['sessionize.sql_in',['../sessionize_8sql__in.html',1,'']]],
+  ['sketch_2esql_5fin',['sketch.sql_in',['../sketch_8sql__in.html',1,'']]],
+  ['sparse_5flinear_5fsystems_2esql_5fin',['sparse_linear_systems.sql_in',['../sparse__linear__systems_8sql__in.html',1,'']]],
+  ['sssp_2esql_5fin',['sssp.sql_in',['../sssp_8sql__in.html',1,'']]],
+  ['stratified_5fsample_2esql_5fin',['stratified_sample.sql_in',['../stratified__sample_8sql__in.html',1,'']]],
+  ['summary_2esql_5fin',['summary.sql_in',['../summary_8sql__in.html',1,'']]],
+  ['svd_2esql_5fin',['svd.sql_in',['../svd_8sql__in.html',1,'']]],
+  ['svec_2esql_5fin',['svec.sql_in',['../svec_8sql__in.html',1,'']]],
+  ['svec_5futil_2esql_5fin',['svec_util.sql_in',['../svec__util_8sql__in.html',1,'']]],
+  ['svm_2esql_5fin',['svm.sql_in',['../svm_8sql__in.html',1,'']]]
+];
diff --git a/docs/rc/search/files_f.html b/docs/rc/search/files_f.html
new file mode 100644
index 0000000..7568063
--- /dev/null
+++ b/docs/rc/search/files_f.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="files_f.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/files_f.js b/docs/rc/search/files_f.js
new file mode 100644
index 0000000..f3bce21
--- /dev/null
+++ b/docs/rc/search/files_f.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+  ['table_5fto_5fpmml_2esql_5fin',['table_to_pmml.sql_in',['../table__to__pmml_8sql__in.html',1,'']]],
+  ['text_5futilities_2esql_5fin',['text_utilities.sql_in',['../text__utilities_8sql__in.html',1,'']]],
+  ['train_5ftest_5fsplit_2esql_5fin',['train_test_split.sql_in',['../train__test__split_8sql__in.html',1,'']]]
+];
diff --git a/docs/rc/search/functions_0.html b/docs/rc/search/functions_0.html
new file mode 100644
index 0000000..4e6d87d
--- /dev/null
+++ b/docs/rc/search/functions_0.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/functions_0.js b/docs/rc/search/functions_0.js
new file mode 100644
index 0000000..637308a
--- /dev/null
+++ b/docs/rc/search/functions_0.js
@@ -0,0 +1,319 @@
+var searchData=
+[
+  ['_5f_5farima_5fadjust',['__arima_adjust',['../arima_8sql__in.html#af6f5621d79045e8270e6785ed0d98ce3',1,'arima.sql_in']]],
+  ['_5f_5farima_5fdiff',['__arima_diff',['../arima_8sql__in.html#ab686e554403a61a5404d83e692735ada',1,'arima.sql_in']]],
+  ['_5f_5farima_5flm',['__arima_lm',['../arima_8sql__in.html#aadd3c7627043810a7e650e80b7fafd52',1,'arima.sql_in']]],
+  ['_5f_5farima_5flm_5fdelta',['__arima_lm_delta',['../arima_8sql__in.html#a6a728067ea53fcb8fcbf66bbe296a783',1,'arima.sql_in']]],
+  ['_5f_5farima_5flm_5fresult_5fagg',['__arima_lm_result_agg',['../arima_8sql__in.html#addf886fb09f74d10dfd1875c641d814b',1,'arima.sql_in']]],
+  ['_5f_5farima_5flm_5fresult_5fffunc',['__arima_lm_result_ffunc',['../arima_8sql__in.html#afd8e1b6c57007a47ba64b22718d4e26f',1,'arima.sql_in']]],
+  ['_5f_5farima_5flm_5fresult_5fpfunc',['__arima_lm_result_pfunc',['../arima_8sql__in.html#a76b2c9d653383c81acde8383bb29aa97',1,'arima.sql_in']]],
+  ['_5f_5farima_5flm_5fresult_5fsfunc',['__arima_lm_result_sfunc',['../arima_8sql__in.html#aa919ba0d4fe79c3b55ee60b7ad17c7de',1,'arima.sql_in']]],
+  ['_5f_5farima_5flm_5fstat_5fagg',['__arima_lm_stat_agg',['../arima_8sql__in.html#ae9b8675db85344ac26484f8c125f57b6',1,'arima.sql_in']]],
+  ['_5f_5farima_5flm_5fstat_5fffunc',['__arima_lm_stat_ffunc',['../arima_8sql__in.html#abb44a6b3bf206e966a9746dde942ddc3',1,'arima.sql_in']]],
+  ['_5f_5farima_5flm_5fstat_5fsfunc',['__arima_lm_stat_sfunc',['../arima_8sql__in.html#a884a57ef18bd9e1a1b4137269786bf19',1,'arima.sql_in']]],
+  ['_5f_5farima_5fresidual',['__arima_residual',['../arima_8sql__in.html#a6955c191d95e1531655cea4617caf12c',1,'arima.sql_in']]],
+  ['_5f_5farray_5fabs_5fadd_5fsfunc',['__array_abs_add_sfunc',['../matrix__ops_8sql__in.html#a998820afa3721fa1119532dc76801d18',1,'matrix_ops.sql_in']]],
+  ['_5f_5farray_5fadd',['__array_add',['../clustered__variance_8sql__in.html#a2d33f7a6a98dfc92c6d4a017ceabbd9a',1,'clustered_variance.sql_in']]],
+  ['_5f_5farray_5felem_5fcorr_5ffinal',['__array_elem_corr_final',['../cox__prop__hazards_8sql__in.html#a31f48cba79d114f8f251c5aa77b3c32a',1,'cox_prop_hazards.sql_in']]],
+  ['_5f_5farray_5felem_5fcorr_5fmerge',['__array_elem_corr_merge',['../cox__prop__hazards_8sql__in.html#a189426c7d99c600856205d15d2fe445c',1,'cox_prop_hazards.sql_in']]],
+  ['_5f_5farray_5felem_5fcorr_5ftransition',['__array_elem_corr_transition',['../cox__prop__hazards_8sql__in.html#a597e43a46842b113412d0940b3d175e4',1,'cox_prop_hazards.sql_in']]],
+  ['_5f_5farray_5felement_5fmax',['__array_element_max',['../cox__prop__hazards_8sql__in.html#a8e3917098eeb129096fa871e7e593e1d',1,'cox_prop_hazards.sql_in']]],
+  ['_5f_5farray_5felement_5fmin',['__array_element_min',['../cox__prop__hazards_8sql__in.html#abd49fa0a100bfe513baa90e32fe37839',1,'cox_prop_hazards.sql_in']]],
+  ['_5f_5farray_5fsum',['__array_sum',['../clustered__variance_8sql__in.html#a329c662f02c985ed68b886cf2bd29f37',1,'clustered_variance.sql_in']]],
+  ['_5f_5fbernoulli_5fvector',['__bernoulli_vector',['../matrix__ops_8sql__in.html#a9c36379876228130e6d4d1bf858c695d',1,'__bernoulli_vector(integer dim, float8 pos_val, float8 neg_val, float8 prob, integer seed):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a9ed5e603fa0924f08a7a9e5b3171768a',1,'__bernoulli_vector(integer dim):&#160;matrix_ops.sql_in']]],
+  ['_5f_5fbinomial_5ffista_5ffinal',['__binomial_fista_final',['../elastic__net_8sql__in.html#af83bb77c4eb5c9f5750f35d56fd39117',1,'elastic_net.sql_in']]],
+  ['_5f_5fbinomial_5ffista_5fmerge',['__binomial_fista_merge',['../elastic__net_8sql__in.html#a2284166bacd4b45fb34d50b2d7aec4d4',1,'elastic_net.sql_in']]],
+  ['_5f_5fbinomial_5ffista_5fresult',['__binomial_fista_result',['../elastic__net_8sql__in.html#a1e0cc178e025d8eebb0637d97a02f624',1,'elastic_net.sql_in']]],
+  ['_5f_5fbinomial_5ffista_5fstate_5fdiff',['__binomial_fista_state_diff',['../elastic__net_8sql__in.html#aba9d8b5ca783ad4c3d551fd7b2797ade',1,'elastic_net.sql_in']]],
+  ['_5f_5fbinomial_5ffista_5fstep',['__binomial_fista_step',['../elastic__net_8sql__in.html#a69a71f6e1f8fb3f7d8ad8b987bd432db',1,'elastic_net.sql_in']]],
+  ['_5f_5fbinomial_5ffista_5ftransition',['__binomial_fista_transition',['../elastic__net_8sql__in.html#a43f125953d105e8ad2243f7c722cf753',1,'elastic_net.sql_in']]],
+  ['_5f_5fbinomial_5figd_5ffinal',['__binomial_igd_final',['../elastic__net_8sql__in.html#a39c4af5547dc7f28c189fe5ef8d09ba5',1,'elastic_net.sql_in']]],
+  ['_5f_5fbinomial_5figd_5fmerge',['__binomial_igd_merge',['../elastic__net_8sql__in.html#ae4aed277de996eab9023335413fe9e28',1,'elastic_net.sql_in']]],
+  ['_5f_5fbinomial_5figd_5fresult',['__binomial_igd_result',['../elastic__net_8sql__in.html#a93bfe398c91709e7d55ed94d18c6ac23',1,'elastic_net.sql_in']]],
+  ['_5f_5fbinomial_5figd_5fstate_5fdiff',['__binomial_igd_state_diff',['../elastic__net_8sql__in.html#a2968538b152e7f38e71bcff8e55b768e',1,'elastic_net.sql_in']]],
+  ['_5f_5fbinomial_5figd_5fstep',['__binomial_igd_step',['../elastic__net_8sql__in.html#a791a9701c20c65d1e86a1d5c3462b99d',1,'elastic_net.sql_in']]],
+  ['_5f_5fbinomial_5figd_5fstep_5fsingle_5fseg',['__binomial_igd_step_single_seg',['../elastic__net_8sql__in.html#ac1ec74fff164d85cae14969bb0890e11',1,'elastic_net.sql_in']]],
+  ['_5f_5fbinomial_5figd_5ftransition',['__binomial_igd_transition',['../elastic__net_8sql__in.html#aa0f3feb438f90eef90ddfc9ad4f3e33e',1,'elastic_net.sql_in']]],
+  ['_5f_5fbuild_5ftree',['__build_tree',['../decision__tree_8sql__in.html#abf7fdb1ed06c426e60fb4aedae95d53c',1,'decision_tree.sql_in']]],
+  ['_5f_5fclustered_5ferr_5flin_5ffinal',['__clustered_err_lin_final',['../clustered__variance_8sql__in.html#ad772976f85e2f1dd3927f84a7f96e9ae',1,'clustered_variance.sql_in']]],
+  ['_5f_5fclustered_5ferr_5flin_5fmerge',['__clustered_err_lin_merge',['../clustered__variance_8sql__in.html#a876867228d62f422f10c03dc93d1e9eb',1,'clustered_variance.sql_in']]],
+  ['_5f_5fclustered_5ferr_5flin_5fstep',['__clustered_err_lin_step',['../clustered__variance_8sql__in.html#ad4b627f3a2aa513b8809e3fc2f5e4c5f',1,'clustered_variance.sql_in']]],
+  ['_5f_5fclustered_5ferr_5flin_5ftransition',['__clustered_err_lin_transition',['../clustered__variance_8sql__in.html#ab3548ff761b9d720e4db767dcf419e66',1,'clustered_variance.sql_in']]],
+  ['_5f_5fclustered_5ferr_5flog_5ffinal',['__clustered_err_log_final',['../clustered__variance_8sql__in.html#a790988e40da04d13e5b56197d35546d8',1,'clustered_variance.sql_in']]],
+  ['_5f_5fclustered_5ferr_5flog_5fmerge',['__clustered_err_log_merge',['../clustered__variance_8sql__in.html#ab3dcbdb7edc8575a660656a2ce680d21',1,'clustered_variance.sql_in']]],
+  ['_5f_5fclustered_5ferr_5flog_5fstep',['__clustered_err_log_step',['../clustered__variance_8sql__in.html#a6f17f900dfce2d0a53a9f9ab06631386',1,'clustered_variance.sql_in']]],
+  ['_5f_5fclustered_5ferr_5flog_5ftransition',['__clustered_err_log_transition',['../clustered__variance_8sql__in.html#adbddf55ce3fbb5c99024298566a33cf2',1,'clustered_variance.sql_in']]],
+  ['_5f_5fclustered_5ferr_5fmlog_5ffinal',['__clustered_err_mlog_final',['../clustered__variance_8sql__in.html#adcf2cf1ec7b2a376be25ed3a0a466e67',1,'clustered_variance.sql_in']]],
+  ['_5f_5fclustered_5ferr_5fmlog_5fmerge',['__clustered_err_mlog_merge',['../clustered__variance_8sql__in.html#a12b136a5f17b60527a0b38d0dd553c97',1,'clustered_variance.sql_in']]],
+  ['_5f_5fclustered_5ferr_5fmlog_5fstep',['__clustered_err_mlog_step',['../clustered__variance_8sql__in.html#ad2112683f96b35cee6fcaa44a2831a49',1,'clustered_variance.sql_in']]],
+  ['_5f_5fclustered_5ferr_5fmlog_5ftransition',['__clustered_err_mlog_transition',['../clustered__variance_8sql__in.html#aacb9639e3031010d9d69ab57ba2a5b1f',1,'clustered_variance.sql_in']]],
+  ['_5f_5fclustered_5flin_5fcompute_5fstats',['__clustered_lin_compute_stats',['../clustered__variance_8sql__in.html#abebc8d70763c7264857b4b14d3ddf280',1,'clustered_variance.sql_in']]],
+  ['_5f_5fclustered_5flog_5fcompute_5fstats',['__clustered_log_compute_stats',['../clustered__variance_8sql__in.html#a621c23b2be30469873870797b1dab995',1,'clustered_variance.sql_in']]],
+  ['_5f_5fclustered_5fmlog_5fcompute_5fstats',['__clustered_mlog_compute_stats',['../clustered__variance_8sql__in.html#a5497d5be990c0efb11508b23f128f154',1,'clustered_variance.sql_in']]],
+  ['_5f_5fcmsketch_5fbase64_5ffinal',['__cmsketch_base64_final',['../sketch_8sql__in.html#ae2407a3372bcaf029785164794667566',1,'sketch.sql_in']]],
+  ['_5f_5fcmsketch_5fint8_5ftrans',['__cmsketch_int8_trans',['../sketch_8sql__in.html#a75cd2be76765b34d62ed8c082281d800',1,'__cmsketch_int8_trans(bytea bitmaps, int8 input):&#160;sketch.sql_in'],['../sketch_8sql__in.html#ae8e48dccef6bb071a05af06ed85cde2d',1,'__cmsketch_int8_trans(bytea bitmaps, int8 input, int8 arg1):&#160;sketch.sql_in'],['../sketch_8sql__in.html#a23bffd8efabca2a03dacd5e95f3cdb32',1,'__cmsketch_int8_trans(bytea bitmaps, int8 input, int8 arg1, int8 arg2):&#160;sketch.sql_in'],['../sketch_8sql__in.html#ac3bf881894a534b20a98d98f7370f845',1,'__cmsketch_int8_trans(bytea bitmaps, int8 input, int8 arg1, int8 arg2, int8 arg3):&#160;sketch.sql_in']]],
+  ['_5f_5fcmsketch_5fmerge',['__cmsketch_merge',['../sketch_8sql__in.html#a4b7e9896cacb126cd82d2a12fc4a5067',1,'sketch.sql_in']]],
+  ['_5f_5fcompute_5fmlogregr',['__compute_mlogregr',['../multilogistic_8sql__in.html#ac7da2fbd9877d94b2f1f013cc000566b',1,'multilogistic.sql_in']]],
+  ['_5f_5fcoxph_5fresid_5fstat_5fagg',['__coxph_resid_stat_agg',['../cox__prop__hazards_8sql__in.html#a41a4e85912f00b5b73207f837dccc359',1,'cox_prop_hazards.sql_in']]],
+  ['_5f_5fcoxph_5fresid_5fstat_5ffinal',['__coxph_resid_stat_final',['../cox__prop__hazards_8sql__in.html#a3e6c330ccd548a25c3ef0153f0c956e4',1,'cox_prop_hazards.sql_in']]],
+  ['_5f_5fcoxph_5fresid_5fstat_5fmerge',['__coxph_resid_stat_merge',['../cox__prop__hazards_8sql__in.html#a51da9d74afff6f4ec5a34bbdbec5c868',1,'cox_prop_hazards.sql_in']]],
+  ['_5f_5fcoxph_5fresid_5fstat_5ftransition',['__coxph_resid_stat_transition',['../cox__prop__hazards_8sql__in.html#ab3b596b440d3850d742ebab0245dbf61',1,'cox_prop_hazards.sql_in']]],
+  ['_5f_5fcoxph_5fscale_5fresid',['__coxph_scale_resid',['../cox__prop__hazards_8sql__in.html#a97191f842120124d56329b8b20ed837c',1,'cox_prop_hazards.sql_in']]],
+  ['_5f_5fdeconstruct_5flower_5ftriangle',['__deconstruct_lower_triangle',['../linalg_8sql__in.html#ab67d0a074625d4fb90950d047dc2794e',1,'linalg.sql_in']]],
+  ['_5f_5felastic_5fnet_5fbinomial_5floglikelihood',['__elastic_net_binomial_loglikelihood',['../elastic__net_8sql__in.html#a465ca3aeaca43ab1294f82146eb2fc31',1,'elastic_net.sql_in']]],
+  ['_5f_5ffmsketch_5fcount_5fdistinct',['__fmsketch_count_distinct',['../sketch_8sql__in.html#ade6f6fd17475164c6c6d23cdd9752fca',1,'sketch.sql_in']]],
+  ['_5f_5ffmsketch_5fmerge',['__fmsketch_merge',['../sketch_8sql__in.html#af38dd060ed896681f4587648e3e424ed',1,'sketch.sql_in']]],
+  ['_5f_5ffmsketch_5ftrans',['__fmsketch_trans',['../sketch_8sql__in.html#a585c96bea2300c0c842eb45799e1fe8b',1,'sketch.sql_in']]],
+  ['_5f_5fgaussian_5ffista_5ffinal',['__gaussian_fista_final',['../elastic__net_8sql__in.html#a9cf4bc6bc719c054cf99436965bbab0c',1,'elastic_net.sql_in']]],
+  ['_5f_5fgaussian_5ffista_5fmerge',['__gaussian_fista_merge',['../elastic__net_8sql__in.html#a35dad39bc1dce3573be2c9cc3f5458b2',1,'elastic_net.sql_in']]],
+  ['_5f_5fgaussian_5ffista_5fresult',['__gaussian_fista_result',['../elastic__net_8sql__in.html#a9f5ed35bd3467280e7d68604046ccebd',1,'elastic_net.sql_in']]],
+  ['_5f_5fgaussian_5ffista_5fstate_5fdiff',['__gaussian_fista_state_diff',['../elastic__net_8sql__in.html#ab9b58c238fa59cd8b38a07d3cbfef514',1,'elastic_net.sql_in']]],
+  ['_5f_5fgaussian_5ffista_5fstep',['__gaussian_fista_step',['../elastic__net_8sql__in.html#a4566cf3ca4587153ab7b57fd741582fe',1,'elastic_net.sql_in']]],
+  ['_5f_5fgaussian_5ffista_5ftransition',['__gaussian_fista_transition',['../elastic__net_8sql__in.html#a87bf3c26c925cfe8d214cc4f8c784613',1,'elastic_net.sql_in']]],
+  ['_5f_5fgaussian_5figd_5ffinal',['__gaussian_igd_final',['../elastic__net_8sql__in.html#a4c5b88fb94d8035e988178a2b67ffa43',1,'elastic_net.sql_in']]],
+  ['_5f_5fgaussian_5figd_5fmerge',['__gaussian_igd_merge',['../elastic__net_8sql__in.html#aba6849a59e2178eb0629d3bfc5abe5da',1,'elastic_net.sql_in']]],
+  ['_5f_5fgaussian_5figd_5fresult',['__gaussian_igd_result',['../elastic__net_8sql__in.html#a407f4a6063a4eb931a39b23f52d675f1',1,'elastic_net.sql_in']]],
+  ['_5f_5fgaussian_5figd_5fstate_5fdiff',['__gaussian_igd_state_diff',['../elastic__net_8sql__in.html#a244ef9698a82bbd2d28cdce326f8e514',1,'elastic_net.sql_in']]],
+  ['_5f_5fgaussian_5figd_5fstep',['__gaussian_igd_step',['../elastic__net_8sql__in.html#a493a8cfa6faf0264c7cf9aa80dc9ffb2',1,'elastic_net.sql_in']]],
+  ['_5f_5fgaussian_5figd_5fstep_5fsingle_5fseg',['__gaussian_igd_step_single_seg',['../elastic__net_8sql__in.html#abd46990f9fd7d216bc7f9e8115f10408',1,'elastic_net.sql_in']]],
+  ['_5f_5fgaussian_5figd_5ftransition',['__gaussian_igd_transition',['../elastic__net_8sql__in.html#ad8a31dceade418034918a37c34101c18',1,'elastic_net.sql_in']]],
+  ['_5f_5fgen_5fsvec',['__gen_svec',['../svec__util_8sql__in.html#a1f3669297bdf0fec501894d0652ec848',1,'svec_util.sql_in']]],
+  ['_5f_5fglm_5fbinomial_5flogit_5fagg',['__glm_binomial_logit_agg',['../glm_8sql__in.html#a6e5d4b66896ec8b10d0aff46d4de50ce',1,'glm.sql_in']]],
+  ['_5f_5fglm_5fbinomial_5flogit_5ftransition',['__glm_binomial_logit_transition',['../glm_8sql__in.html#afd34074de9267aff541ff3207907cc3a',1,'glm.sql_in']]],
+  ['_5f_5fglm_5fbinomial_5fprobit_5fagg',['__glm_binomial_probit_agg',['../glm_8sql__in.html#ae3bdd5b1c8b963488bc9633807295630',1,'glm.sql_in']]],
+  ['_5f_5fglm_5fbinomial_5fprobit_5ftransition',['__glm_binomial_probit_transition',['../glm_8sql__in.html#a0680d2db1d03d34a39c3e2e7100a52e7',1,'glm.sql_in']]],
+  ['_5f_5fglm_5ffinal',['__glm_final',['../glm_8sql__in.html#a7e32144641562f061625c4d211912a01',1,'glm.sql_in']]],
+  ['_5f_5fglm_5fgamma_5fidentity_5fagg',['__glm_gamma_identity_agg',['../glm_8sql__in.html#adfbdbca61a165aff83ef53356da73a3e',1,'glm.sql_in']]],
+  ['_5f_5fglm_5fgamma_5fidentity_5ftransition',['__glm_gamma_identity_transition',['../glm_8sql__in.html#a64e74bd1f88b9e42db89a00edac0373a',1,'glm.sql_in']]],
+  ['_5f_5fglm_5fgamma_5finverse_5fagg',['__glm_gamma_inverse_agg',['../glm_8sql__in.html#a2177e1ed1d58d238528a407fce6d52fb',1,'glm.sql_in']]],
+  ['_5f_5fglm_5fgamma_5finverse_5ftransition',['__glm_gamma_inverse_transition',['../glm_8sql__in.html#aaa373b5854856d2b4761cc843ab5011a',1,'glm.sql_in']]],
+  ['_5f_5fglm_5fgamma_5flog_5fagg',['__glm_gamma_log_agg',['../glm_8sql__in.html#a7d6f215077e51c95a193880edf67f574',1,'glm.sql_in']]],
+  ['_5f_5fglm_5fgamma_5flog_5ftransition',['__glm_gamma_log_transition',['../glm_8sql__in.html#a904065c82d2d2275413377a28115853f',1,'glm.sql_in']]],
+  ['_5f_5fglm_5fgaussian_5fidentity_5fagg',['__glm_gaussian_identity_agg',['../glm_8sql__in.html#a33377c70ad934fdcea9206a9ef2ccf1c',1,'glm.sql_in']]],
+  ['_5f_5fglm_5fgaussian_5fidentity_5ftransition',['__glm_gaussian_identity_transition',['../glm_8sql__in.html#aa181df655a47f71f0ce0388ce112282b',1,'glm.sql_in']]],
+  ['_5f_5fglm_5fgaussian_5finverse_5fagg',['__glm_gaussian_inverse_agg',['../glm_8sql__in.html#a0328f64e64a88cc82c09b4b05ee4256a',1,'glm.sql_in']]],
+  ['_5f_5fglm_5fgaussian_5finverse_5ftransition',['__glm_gaussian_inverse_transition',['../glm_8sql__in.html#a695c305abf7d59e224b7c7a05364b534',1,'glm.sql_in']]],
+  ['_5f_5fglm_5fgaussian_5flog_5fagg',['__glm_gaussian_log_agg',['../glm_8sql__in.html#a1dfe1977eb90fb628cbc0b722bb29403',1,'glm.sql_in']]],
+  ['_5f_5fglm_5fgaussian_5flog_5ftransition',['__glm_gaussian_log_transition',['../glm_8sql__in.html#a6aa9b05a9e74e3bf5e9121ec58bffe4f',1,'glm.sql_in']]],
+  ['_5f_5fglm_5finverse_5fgaussian_5fidentity_5fagg',['__glm_inverse_gaussian_identity_agg',['../glm_8sql__in.html#a63f861e73f6ffe5f4a92e4d3bd75cc84',1,'glm.sql_in']]],
+  ['_5f_5fglm_5finverse_5fgaussian_5fidentity_5ftransition',['__glm_inverse_gaussian_identity_transition',['../glm_8sql__in.html#a4a613bda22c8686a28afb47260ccabc9',1,'glm.sql_in']]],
+  ['_5f_5fglm_5finverse_5fgaussian_5finverse_5fagg',['__glm_inverse_gaussian_inverse_agg',['../glm_8sql__in.html#a60fb24d4a39f4f98666320b8fc11965c',1,'glm.sql_in']]],
+  ['_5f_5fglm_5finverse_5fgaussian_5finverse_5ftransition',['__glm_inverse_gaussian_inverse_transition',['../glm_8sql__in.html#a8473dca909f252c2a7d60368ffbb5977',1,'glm.sql_in']]],
+  ['_5f_5fglm_5finverse_5fgaussian_5flog_5fagg',['__glm_inverse_gaussian_log_agg',['../glm_8sql__in.html#a68be2c4fabab9720636435dcebed5c10',1,'glm.sql_in']]],
+  ['_5f_5fglm_5finverse_5fgaussian_5flog_5ftransition',['__glm_inverse_gaussian_log_transition',['../glm_8sql__in.html#a3f4c78c4c52b01251307f24e077e92ff',1,'glm.sql_in']]],
+  ['_5f_5fglm_5finverse_5fgaussian_5fsqr_5finverse_5fagg',['__glm_inverse_gaussian_sqr_inverse_agg',['../glm_8sql__in.html#a9b884108c457cb5881770176115f2661',1,'glm.sql_in']]],
+  ['_5f_5fglm_5finverse_5fgaussian_5fsqr_5finverse_5ftransition',['__glm_inverse_gaussian_sqr_inverse_transition',['../glm_8sql__in.html#a5d4b8d33917e42124a44b30db557940a',1,'glm.sql_in']]],
+  ['_5f_5fglm_5floglik_5fdiff',['__glm_loglik_diff',['../glm_8sql__in.html#a7e84e1d4351a72ea9ecc61db175891ea',1,'glm.sql_in']]],
+  ['_5f_5fglm_5fmerge_5fstates',['__glm_merge_states',['../glm_8sql__in.html#ace09cf40c436db6c065ef2606781cc93',1,'glm.sql_in']]],
+  ['_5f_5fglm_5fpoisson_5fidentity_5fagg',['__glm_poisson_identity_agg',['../glm_8sql__in.html#aff5070482e51bf7ce3704febfa8f3b58',1,'glm.sql_in']]],
+  ['_5f_5fglm_5fpoisson_5fidentity_5ftransition',['__glm_poisson_identity_transition',['../glm_8sql__in.html#a041ee0e1e80ea5cf07f39b8c13f8accb',1,'glm.sql_in']]],
+  ['_5f_5fglm_5fpoisson_5flog_5fagg',['__glm_poisson_log_agg',['../glm_8sql__in.html#a504fa161f5dde9155dd962456597a5c6',1,'glm.sql_in']]],
+  ['_5f_5fglm_5fpoisson_5flog_5ftransition',['__glm_poisson_log_transition',['../glm_8sql__in.html#a48ccc5647dc8d0b6211ae3445d7d533e',1,'glm.sql_in']]],
+  ['_5f_5fglm_5fpoisson_5fsqrt_5fagg',['__glm_poisson_sqrt_agg',['../glm_8sql__in.html#a051510c3a79c019749fd3f04db41c438',1,'glm.sql_in']]],
+  ['_5f_5fglm_5fpoisson_5fsqrt_5ftransition',['__glm_poisson_sqrt_transition',['../glm_8sql__in.html#aa6b93dd92e49df7e3202db15d9e50c6c',1,'glm.sql_in']]],
+  ['_5f_5fglm_5fresult_5ft_5fstats',['__glm_result_t_stats',['../glm_8sql__in.html#a3b7f6999ae949831f33e355ec28b1f79',1,'glm.sql_in']]],
+  ['_5f_5fglm_5fresult_5fz_5fstats',['__glm_result_z_stats',['../glm_8sql__in.html#a0fb8358e0b92c9d9883eaea281a1ba5f',1,'glm.sql_in']]],
+  ['_5f_5finternal_5fget_5fcol_5fnames_5fexcept_5fdep_5fvariable',['__internal_get_col_names_except_dep_variable',['../utilities_8sql__in.html#a7086f5e79c0f53a849759227759d16d7',1,'utilities.sql_in']]],
+  ['_5f_5finternal_5fmlogregr_5firls_5fresult',['__internal_mlogregr_irls_result',['../multilogistic_8sql__in.html#ae890704e55f57bd9105b63021e0f86ae',1,'multilogistic.sql_in']]],
+  ['_5f_5finternal_5fmlogregr_5firls_5fstep_5fdistance',['__internal_mlogregr_irls_step_distance',['../multilogistic_8sql__in.html#aad300d3120db2ecaabf4809cf6be81e7',1,'multilogistic.sql_in']]],
+  ['_5f_5finternal_5fmlogregr_5fsummary_5fresults',['__internal_mlogregr_summary_results',['../multilogistic_8sql__in.html#a48e0f07fcd855a9abcdf6ff070474b73',1,'multilogistic.sql_in']]],
+  ['_5f_5fkmeans_5fvalidate_5fexpr',['__kmeans_validate_expr',['../kmeans_8sql__in.html#a02b4325792510fbdc539f8e76076e451',1,'kmeans.sql_in']]],
+  ['_5f_5fkmeans_5fvalidate_5fsrc',['__kmeans_validate_src',['../kmeans_8sql__in.html#a6e25194423cccea7a1fc58e68d5a05a8',1,'kmeans.sql_in']]],
+  ['_5f_5fknn_5fvalidate_5fsrc',['__knn_validate_src',['../knn_8sql__in.html#a35157e94fa61948ea5314aef292e0fea',1,'knn.sql_in']]],
+  ['_5f_5flda_5fcheck_5fcount_5fceiling',['__lda_check_count_ceiling',['../lda_8sql__in.html#a0eefd7b201fda5289554b7d43366865b',1,'lda.sql_in']]],
+  ['_5f_5flda_5fcount_5ftopic_5fagg',['__lda_count_topic_agg',['../lda_8sql__in.html#acdae83c5837155ea3663b34db4521e86',1,'lda.sql_in']]],
+  ['_5f_5flda_5fcount_5ftopic_5fprefunc',['__lda_count_topic_prefunc',['../lda_8sql__in.html#ae9987628d56799cd5fadccc92dff3110',1,'lda.sql_in']]],
+  ['_5f_5flda_5fcount_5ftopic_5fsfunc',['__lda_count_topic_sfunc',['../lda_8sql__in.html#ad72ac6a8db5e26ef6ca8e7c2563bec94',1,'lda.sql_in']]],
+  ['_5f_5flda_5fgibbs_5fsample',['__lda_gibbs_sample',['../lda_8sql__in.html#ab2640fce837da813a3b6fff38dc713d8',1,'lda.sql_in']]],
+  ['_5f_5flda_5fperplexity_5fagg',['__lda_perplexity_agg',['../lda_8sql__in.html#aa9bc2a38ba29636740deb01aad241050',1,'lda.sql_in']]],
+  ['_5f_5flda_5fperplexity_5fffunc',['__lda_perplexity_ffunc',['../lda_8sql__in.html#abf691da12a45408203b82940644dc34e',1,'lda.sql_in']]],
+  ['_5f_5flda_5fperplexity_5fprefunc',['__lda_perplexity_prefunc',['../lda_8sql__in.html#a78a90c564e975e9a170b83ddeb6bd11c',1,'lda.sql_in']]],
+  ['_5f_5flda_5fperplexity_5fsfunc',['__lda_perplexity_sfunc',['../lda_8sql__in.html#a5defc3ef61cabeaf343a2e1d9988f8da',1,'lda.sql_in']]],
+  ['_5f_5flda_5frandom_5fassign',['__lda_random_assign',['../lda_8sql__in.html#a3cdff7ba417e1a9c1b221f23bc2aac64',1,'lda.sql_in']]],
+  ['_5f_5flda_5futil_5fconorm_5fdata',['__lda_util_conorm_data',['../lda_8sql__in.html#aa4fd0a274f1c400014f2ea9549507436',1,'lda.sql_in']]],
+  ['_5f_5flda_5futil_5findex_5fsort',['__lda_util_index_sort',['../lda_8sql__in.html#aa9729b6bcc20d00936b6831382747c2f',1,'lda.sql_in']]],
+  ['_5f_5flda_5futil_5fnorm_5fdataset',['__lda_util_norm_dataset',['../lda_8sql__in.html#a85990f0bc07a2ab8834301561662939e',1,'lda.sql_in']]],
+  ['_5f_5flda_5futil_5fnorm_5fvocab',['__lda_util_norm_vocab',['../lda_8sql__in.html#a0032ed0be0c41a1b6ed08dca93f4a59f',1,'lda.sql_in']]],
+  ['_5f_5flda_5futil_5fnorm_5fwith_5fsmoothing',['__lda_util_norm_with_smoothing',['../lda_8sql__in.html#a9b522ce2d080956d7fb3d5ae79195b8a',1,'lda.sql_in']]],
+  ['_5f_5flda_5futil_5ftranspose',['__lda_util_transpose',['../lda_8sql__in.html#a2db0019220f10a1fca78ed77a5c2dcd5',1,'lda.sql_in']]],
+  ['_5f_5flda_5futil_5funnest',['__lda_util_unnest',['../lda_8sql__in.html#a2fcec45a37b459567ad0bbcd42c07142',1,'lda.sql_in']]],
+  ['_5f_5flda_5futil_5funnest_5ftranspose',['__lda_util_unnest_transpose',['../lda_8sql__in.html#a219c8432558301878384e5ef8aca1e3d',1,'lda.sql_in']]],
+  ['_5f_5flogregr_5fcg_5fresult',['__logregr_cg_result',['../logistic_8sql__in.html#af5fcfe75b7724e0b93901e64e3f8c1b4',1,'logistic.sql_in']]],
+  ['_5f_5flogregr_5fcg_5fstep',['__logregr_cg_step',['../logistic_8sql__in.html#a0037d0e2891dff4ec1b4e856b9ac103c',1,'logistic.sql_in']]],
+  ['_5f_5flogregr_5fcg_5fstep_5fdistance',['__logregr_cg_step_distance',['../logistic_8sql__in.html#aabc041a54449405558d8a522f0e7d995',1,'logistic.sql_in']]],
+  ['_5f_5flogregr_5fcg_5fstep_5ffinal',['__logregr_cg_step_final',['../logistic_8sql__in.html#a909ec8b38aac9dd78ed7fb52e5e5910d',1,'logistic.sql_in']]],
+  ['_5f_5flogregr_5fcg_5fstep_5fmerge_5fstates',['__logregr_cg_step_merge_states',['../logistic_8sql__in.html#ae4f6142efcde3c7d72405f5daf218af7',1,'logistic.sql_in']]],
+  ['_5f_5flogregr_5fcg_5fstep_5ftransition',['__logregr_cg_step_transition',['../logistic_8sql__in.html#a874e9c5a3ebb7efab16730f85d3e8d25',1,'logistic.sql_in']]],
+  ['_5f_5flogregr_5figd_5fresult',['__logregr_igd_result',['../logistic_8sql__in.html#ab0b377e0dc63a7d79602643a6ee827c9',1,'logistic.sql_in']]],
+  ['_5f_5flogregr_5figd_5fstep',['__logregr_igd_step',['../logistic_8sql__in.html#a782cd8580dac58cc0a70d534dd696801',1,'logistic.sql_in']]],
+  ['_5f_5flogregr_5figd_5fstep_5fdistance',['__logregr_igd_step_distance',['../logistic_8sql__in.html#a993ec0ebec0084170902c0cefc489ae8',1,'logistic.sql_in']]],
+  ['_5f_5flogregr_5figd_5fstep_5ffinal',['__logregr_igd_step_final',['../logistic_8sql__in.html#a44b3499c913ddcc44b0b9e18e2069fed',1,'logistic.sql_in']]],
+  ['_5f_5flogregr_5figd_5fstep_5fmerge_5fstates',['__logregr_igd_step_merge_states',['../logistic_8sql__in.html#a2b23f6e4f9671b511d675c43b42b6544',1,'logistic.sql_in']]],
+  ['_5f_5flogregr_5figd_5fstep_5ftransition',['__logregr_igd_step_transition',['../logistic_8sql__in.html#a0f4010cefc479196d2d280514f92e5b0',1,'logistic.sql_in']]],
+  ['_5f_5flogregr_5firls_5fresult',['__logregr_irls_result',['../logistic_8sql__in.html#aaaf5ea72356ebae7e808b54c495bc501',1,'logistic.sql_in']]],
+  ['_5f_5flogregr_5firls_5fstep',['__logregr_irls_step',['../logistic_8sql__in.html#a7bdf5d39836d8b8826e38a9c15a613c0',1,'logistic.sql_in']]],
+  ['_5f_5flogregr_5firls_5fstep_5fdistance',['__logregr_irls_step_distance',['../logistic_8sql__in.html#a56962d63f19d6c4672f9772f6d2b2810',1,'logistic.sql_in']]],
+  ['_5f_5flogregr_5firls_5fstep_5ffinal',['__logregr_irls_step_final',['../logistic_8sql__in.html#a45fbe307010fcb5890828e35a398c0a6',1,'logistic.sql_in']]],
+  ['_5f_5flogregr_5firls_5fstep_5fmerge_5fstates',['__logregr_irls_step_merge_states',['../logistic_8sql__in.html#a2671672fed9d07b5c8c68a63e3d99e5f',1,'logistic.sql_in']]],
+  ['_5f_5flogregr_5firls_5fstep_5ftransition',['__logregr_irls_step_transition',['../logistic_8sql__in.html#aa51c257177aa60df02dcf46bac43982e',1,'logistic.sql_in']]],
+  ['_5f_5fmargins_5fcompute_5fstats',['__margins_compute_stats',['../marginal_8sql__in.html#a5f270ce35e107912d5ea4e9efd075318',1,'marginal.sql_in']]],
+  ['_5f_5fmargins_5fcoxph_5fint_5ffinal',['__margins_coxph_int_final',['../marginal_8sql__in.html#a3d8c5567fd111b9d10b49d61006f35bf',1,'marginal.sql_in']]],
+  ['_5f_5fmargins_5fcoxph_5fint_5fmerge',['__margins_coxph_int_merge',['../marginal_8sql__in.html#a153bcc3884fa16399fa608442259d32d',1,'marginal.sql_in']]],
+  ['_5f_5fmargins_5fcoxph_5fint_5ftransition',['__margins_coxph_int_transition',['../marginal_8sql__in.html#af82b77209159da1b8bc75b39cc8abd98',1,'marginal.sql_in']]],
+  ['_5f_5fmargins_5fint_5fcoxph_5fagg',['__margins_int_coxph_agg',['../marginal_8sql__in.html#aa44a5bf9ba69ba5e87ebf1f5f4a297db',1,'marginal.sql_in']]],
+  ['_5f_5fmargins_5fint_5flinregr_5fagg',['__margins_int_linregr_agg',['../marginal_8sql__in.html#a228e94d07a25adef545e7f1948648b68',1,'marginal.sql_in']]],
+  ['_5f_5fmargins_5fint_5flogregr_5fagg',['__margins_int_logregr_agg',['../marginal_8sql__in.html#aa419eeb4ee78982d5ce8e3fe102f28c3',1,'marginal.sql_in']]],
+  ['_5f_5fmargins_5fint_5fmlogregr_5fagg',['__margins_int_mlogregr_agg',['../marginal_8sql__in.html#a56aec1f2d980a739df09e09ca52b34f4',1,'marginal.sql_in']]],
+  ['_5f_5fmargins_5flinregr_5fint_5ffinal',['__margins_linregr_int_final',['../marginal_8sql__in.html#a946260ec369f98b5b8d584d3e63fcf80',1,'marginal.sql_in']]],
+  ['_5f_5fmargins_5flinregr_5fint_5fmerge',['__margins_linregr_int_merge',['../marginal_8sql__in.html#a0db48e48baea1ab56841e5b57083d939',1,'marginal.sql_in']]],
+  ['_5f_5fmargins_5flinregr_5fint_5ftransition',['__margins_linregr_int_transition',['../marginal_8sql__in.html#a6f238f587436d904d2206e7edb795bb1',1,'marginal.sql_in']]],
+  ['_5f_5fmargins_5flogregr_5fint_5ffinal',['__margins_logregr_int_final',['../marginal_8sql__in.html#a7ffb6d8dd35dce6deef315458a4f85cd',1,'marginal.sql_in']]],
+  ['_5f_5fmargins_5flogregr_5fint_5fmerge',['__margins_logregr_int_merge',['../marginal_8sql__in.html#a7899421c84eaf701949c7e430dc3eb15',1,'marginal.sql_in']]],
+  ['_5f_5fmargins_5flogregr_5fint_5ftransition',['__margins_logregr_int_transition',['../marginal_8sql__in.html#a5aaf126f78c5eb0f4c7eaae3ebb53f13',1,'marginal.sql_in']]],
+  ['_5f_5fmargins_5fmlogregr_5fint_5ffinal',['__margins_mlogregr_int_final',['../marginal_8sql__in.html#a64e8f06dc5425379065f12eacb95ad05',1,'marginal.sql_in']]],
+  ['_5f_5fmargins_5fmlogregr_5fint_5fmerge',['__margins_mlogregr_int_merge',['../marginal_8sql__in.html#a8c1e7d827ee07f3f6532cdd12a4e1d29',1,'marginal.sql_in']]],
+  ['_5f_5fmargins_5fmlogregr_5fint_5ftransition',['__margins_mlogregr_int_transition',['../marginal_8sql__in.html#ade4ae58316e82c1de75f65f383043532',1,'marginal.sql_in']]],
+  ['_5f_5fmatrix_5fblockize_5fagg',['__matrix_blockize_agg',['../matrix__ops_8sql__in.html#acc0ca1d652b5bd1ad6ffe658bc45b758',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fblockize_5fsfunc',['__matrix_blockize_sfunc',['../matrix__ops_8sql__in.html#a320f5ca4aacb21d56ae2e5eebc908835',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fcholesky_5ffinal',['__matrix_cholesky_final',['../matrix__ops_8sql__in.html#a6b4ddaf2e9daf2452a016498c7f546fb',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fcolumn_5fabs_5fsum_5fagg',['__matrix_column_abs_sum_agg',['../matrix__ops_8sql__in.html#ab905d4447072594f1af9c2bd954bba90',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fcolumn_5fto_5farray_5fformat',['__matrix_column_to_array_format',['../matrix__ops_8sql__in.html#ae4176a88e13c09362af1e4c1afd1f12b',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fcompose_5fdense_5ftransition',['__matrix_compose_dense_transition',['../matrix__ops_8sql__in.html#ac8430e6b3e2595ec2f13bbc98609ebbb',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fcompose_5fmerge',['__matrix_compose_merge',['../matrix__ops_8sql__in.html#a067b397a47438e993a1b1577744e0cf6',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fcompose_5fsparse_5ftransition',['__matrix_compose_sparse_transition',['../matrix__ops_8sql__in.html#a2e0fda0e0ef7fc7d1669207d86667251',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fdense_5fcholesky',['__matrix_dense_cholesky',['../matrix__ops_8sql__in.html#aafdac25e2489777fa349c02272a52afe',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fdense_5feigen',['__matrix_dense_eigen',['../matrix__ops_8sql__in.html#a226bfdc99ee7b87750eb1e34839ba40b',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fdense_5finverse',['__matrix_dense_inverse',['../matrix__ops_8sql__in.html#a2a42b415200e2970528ee6db0070aaec',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fdense_5flu',['__matrix_dense_lu',['../matrix__ops_8sql__in.html#aabb7d39f86fa8442cb6893f7a51f1f07',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fdense_5fnuclear_5fnorm',['__matrix_dense_nuclear_norm',['../matrix__ops_8sql__in.html#a86e1545c3a5d9f83e3eeb374419f181b',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fdense_5fpinv',['__matrix_dense_pinv',['../matrix__ops_8sql__in.html#ac61111e1c209ec09a82a4370c6b2e5ad',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fdense_5fqr',['__matrix_dense_qr',['../matrix__ops_8sql__in.html#ab5ab1aca1133bf650a53d53a0fae226c',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fdense_5frank',['__matrix_dense_rank',['../matrix__ops_8sql__in.html#a65f0ffed59f979f066feba4b7640a11f',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fdensify_5fagg',['__matrix_densify_agg',['../matrix__ops_8sql__in.html#a10a095fb37e4505d38c926a2a390e72f',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fdensify_5fsfunc',['__matrix_densify_sfunc',['../matrix__ops_8sql__in.html#a04809ad9a25c7cf84afd0253fa825d6c',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5feigen_5ffinal',['__matrix_eigen_final',['../matrix__ops_8sql__in.html#ac113f89fe7f51491c8223480433495e5',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5finv_5ffinal',['__matrix_inv_final',['../matrix__ops_8sql__in.html#ad62966b094a7c4ce9c5e0c3b6679e4d1',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5flu_5ffinal',['__matrix_lu_final',['../matrix__ops_8sql__in.html#a47ca9c941be86f88c4746744a6105e89',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fmem_5fsum',['__matrix_mem_sum',['../matrix__ops_8sql__in.html#aa9f91e48c5890026fc35e65722bb6a0b',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fmem_5fsum_5fsfunc',['__matrix_mem_sum_sfunc',['../matrix__ops_8sql__in.html#a634478f746232cb12f3c46cbb2c20837',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fnuclear_5fnorm_5ffinal',['__matrix_nuclear_norm_final',['../matrix__ops_8sql__in.html#a7df499382f7b4ea9347f941cb049c738',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fpinv_5ffinal',['__matrix_pinv_final',['../matrix__ops_8sql__in.html#a1fecf03b9cb3df7423ce40e24a86c511',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fqr_5ffinal',['__matrix_qr_final',['../matrix__ops_8sql__in.html#aad1de24406ecd7ec29b5aa2553373dfc',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5frank_5ffinal',['__matrix_rank_final',['../matrix__ops_8sql__in.html#abe950f847a36db534edc393f04d5fd28',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5frow_5fsplit',['__matrix_row_split',['../matrix__ops_8sql__in.html#a461bf9972c8b132d6f21a1de19fd4f40',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fsparse_5fcholesky',['__matrix_sparse_cholesky',['../matrix__ops_8sql__in.html#af84acb7ebaa37616da8f5ad9f443cb23',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fsparse_5feigen',['__matrix_sparse_eigen',['../matrix__ops_8sql__in.html#afc9506600ad539ffd0a342bdbd22c11d',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fsparse_5finverse',['__matrix_sparse_inverse',['../matrix__ops_8sql__in.html#a91a74f848438f5376cb7e33b90f7f69a',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fsparse_5flu',['__matrix_sparse_lu',['../matrix__ops_8sql__in.html#a4df2e2056385af5f3f236613bca47083',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fsparse_5fnuclear_5fnorm',['__matrix_sparse_nuclear_norm',['../matrix__ops_8sql__in.html#a8823870472e1de1b090694b3a388e41b',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fsparse_5fpinv',['__matrix_sparse_pinv',['../matrix__ops_8sql__in.html#ad1d693b401ca30e14052647d6c10b0b9',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fsparse_5fqr',['__matrix_sparse_qr',['../matrix__ops_8sql__in.html#a2379145bebdb037b482836ac5e592119',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fsparse_5frank',['__matrix_sparse_rank',['../matrix__ops_8sql__in.html#a5e09639f4ce3b62338c421635b1d9e3f',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5funblockize_5fagg',['__matrix_unblockize_agg',['../matrix__ops_8sql__in.html#a9040650f804ace7108c0bca001ed6fae',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5funblockize_5fsfunc',['__matrix_unblockize_sfunc',['../matrix__ops_8sql__in.html#a66142991fa1c3abc0c1b1327002743ce',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5funnest_5fblock',['__matrix_unnest_block',['../matrix__ops_8sql__in.html#a01ea5d175f37efba0cedbba6ade0f7bd',1,'matrix_ops.sql_in']]],
+  ['_5f_5fmatrix_5fvec_5fmult_5fin_5fmem',['__matrix_vec_mult_in_mem',['../matrix__ops_8sql__in.html#a4d267c1d4a4869414c880ea18d44a260',1,'__matrix_vec_mult_in_mem(float8[] vector, float8[][] matrix):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a86db6cbb11df1f7077540ce531b52399',1,'__matrix_vec_mult_in_mem(float8[] vector, float8[] matrix):&#160;matrix_ops.sql_in']]],
+  ['_5f_5fmfvsketch_5ffinal',['__mfvsketch_final',['../sketch_8sql__in.html#a704f9719f5565960a12e3c9d32aac01d',1,'sketch.sql_in']]],
+  ['_5f_5fmfvsketch_5fmerge',['__mfvsketch_merge',['../sketch_8sql__in.html#a3ebb4ce07471e55aae91478d7a7bd15a',1,'sketch.sql_in']]],
+  ['_5f_5fmfvsketch_5ftrans',['__mfvsketch_trans',['../sketch_8sql__in.html#af468ecc80e53fed205f475d4e1309995',1,'sketch.sql_in']]],
+  ['_5f_5fmlogregr_5fformat',['__mlogregr_format',['../multilogistic_8sql__in.html#a55ffab7c3e95b301b3ad5733f185a1ec',1,'multilogistic.sql_in']]],
+  ['_5f_5fmlogregr_5firls_5fstep',['__mlogregr_irls_step',['../multilogistic_8sql__in.html#a695395e04b6d95afafc7c8ac9e01b7b2',1,'multilogistic.sql_in']]],
+  ['_5f_5fmlogregr_5firls_5fstep_5ffinal',['__mlogregr_irls_step_final',['../multilogistic_8sql__in.html#a690a74b753dceec66c4e0ad22f50c51e',1,'multilogistic.sql_in']]],
+  ['_5f_5fmlogregr_5firls_5fstep_5fmerge_5fstates',['__mlogregr_irls_step_merge_states',['../multilogistic_8sql__in.html#a7cae4ea602fc9c159fa2cc8c1a7653a6',1,'multilogistic.sql_in']]],
+  ['_5f_5fmlogregr_5firls_5fstep_5ftransition',['__mlogregr_irls_step_transition',['../multilogistic_8sql__in.html#aef43e4a6363495901045daf339d5c6d7',1,'multilogistic.sql_in']]],
+  ['_5f_5fmlogregr_5fpredict_5fprob',['__mlogregr_predict_prob',['../multilogistic_8sql__in.html#a7418e1ce65432793d0889f7e53f668cd',1,'multilogistic.sql_in']]],
+  ['_5f_5fmlogregr_5fpredict_5fresponse',['__mlogregr_predict_response',['../multilogistic_8sql__in.html#ad5e9a79ac38439db8ecd25148ca6f244',1,'multilogistic.sql_in']]],
+  ['_5f_5fmultinom_5ffinal',['__multinom_final',['../multiresponseglm_8sql__in.html#ab0f66e577e5734114060cef6bfe9a36b',1,'multiresponseglm.sql_in']]],
+  ['_5f_5fmultinom_5flogit_5ftransition',['__multinom_logit_transition',['../multiresponseglm_8sql__in.html#afcd02b370d023e2faf028390f2b7f0c7',1,'multiresponseglm.sql_in']]],
+  ['_5f_5fmultinom_5fmerge_5fstates',['__multinom_merge_states',['../multiresponseglm_8sql__in.html#ac08c2fc81967cc26f8475cc0495fb4ec',1,'multiresponseglm.sql_in']]],
+  ['_5f_5fnormal_5fvector',['__normal_vector',['../matrix__ops_8sql__in.html#a1545c36760a94943c2e1aeca23f1db84',1,'__normal_vector(integer dim, float8 mu, float8 sigma, integer seed):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a32e4cb006c85a878f6054fae7a41b135',1,'__normal_vector(integer dim, float8 mu, float8 sigma):&#160;matrix_ops.sql_in']]],
+  ['_5f_5fordinal_5ffinal',['__ordinal_final',['../ordinal_8sql__in.html#a43acfb9669b17dc032850322993238bd',1,'ordinal.sql_in']]],
+  ['_5f_5fordinal_5flogit_5ftransition',['__ordinal_logit_transition',['../ordinal_8sql__in.html#a8430c72e6eeccf6f057432e0c09df784',1,'ordinal.sql_in']]],
+  ['_5f_5fordinal_5fmerge_5fstates',['__ordinal_merge_states',['../ordinal_8sql__in.html#aea97aa914403a78b150dcaa54b08dc2b',1,'ordinal.sql_in']]],
+  ['_5f_5fpivotalr_5fcrossprod_5fmerge',['__pivotalr_crossprod_merge',['../pivotalr__arrayops_8sql__in.html#a1ce8de76ca7156f2608ff5142921b7ef',1,'pivotalr_arrayops.sql_in']]],
+  ['_5f_5fpivotalr_5fcrossprod_5fsym_5ftransition',['__pivotalr_crossprod_sym_transition',['../pivotalr__arrayops_8sql__in.html#a2667b2584e46a241c98358d8a7db4be4',1,'pivotalr_arrayops.sql_in']]],
+  ['_5f_5fpivotalr_5fcrossprod_5ftransition',['__pivotalr_crossprod_transition',['../pivotalr__arrayops_8sql__in.html#a7aee64ab0f57185432fb0709f7769f6a',1,'pivotalr_arrayops.sql_in']]],
+  ['_5f_5frand_5fblock',['__rand_block',['../matrix__ops_8sql__in.html#a049ad6b2bb6a728539fb49e4e6610233',1,'__rand_block(integer row_dim, integer col_dim):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a5b183fd27db62e94f9275dd6ca8077c3',1,'__rand_block(integer dim):&#160;matrix_ops.sql_in']]],
+  ['_5f_5frand_5fvector',['__rand_vector',['../matrix__ops_8sql__in.html#a845a3e8b711a3ad64103a2c0442f7baf',1,'matrix_ops.sql_in']]],
+  ['_5f_5frow_5ffold',['__row_fold',['../matrix__ops_8sql__in.html#aaeacfbaf004310e36ebb8c4ce4ac601c',1,'matrix_ops.sql_in']]],
+  ['_5f_5fsketch_5farray_5fset_5fbit_5fin_5fplace',['__sketch_array_set_bit_in_place',['../sketch_8sql__in.html#accad714b33677ecddc1da621d23d56ed',1,'sketch.sql_in']]],
+  ['_5f_5fsketch_5fleftmost_5fzero',['__sketch_leftmost_zero',['../sketch_8sql__in.html#a6f8100369e3d3bfc0567381da082db96',1,'sketch.sql_in']]],
+  ['_5f_5fsketch_5frightmost_5fone',['__sketch_rightmost_one',['../sketch_8sql__in.html#a7da3910af51118f6f2831d00fa287bc2',1,'sketch.sql_in']]],
+  ['_5f_5fsub_5farray',['__sub_array',['../marginal_8sql__in.html#aa4edc871f05eb57354a82a16f85e0ee7',1,'marginal.sql_in']]],
+  ['_5f_5fsvd_5fblock_5flanczos_5fagg',['__svd_block_lanczos_agg',['../svd_8sql__in.html#acd10d4d0a196e1ed062f5e38288555df',1,'svd.sql_in']]],
+  ['_5f_5fsvd_5fblock_5flanczos_5fsfunc',['__svd_block_lanczos_sfunc',['../svd_8sql__in.html#a6bc4dbb608e1042746c10b9fa180ec13',1,'svd.sql_in']]],
+  ['_5f_5fsvd_5fdecompose_5fbidiag',['__svd_decompose_bidiag',['../svd_8sql__in.html#a53034f4da049595a4c0ea03e67c727fb',1,'svd.sql_in']]],
+  ['_5f_5fsvd_5fgram_5fschmidt_5forthogonalize_5fagg',['__svd_gram_schmidt_orthogonalize_agg',['../svd_8sql__in.html#abb9c16df6000f260e101bb8dd5c7aa0e',1,'svd.sql_in']]],
+  ['_5f_5fsvd_5fgram_5fschmidt_5forthogonalize_5fffunc',['__svd_gram_schmidt_orthogonalize_ffunc',['../svd_8sql__in.html#af006d422c49a2de762cbf7ebfe588484',1,'svd.sql_in']]],
+  ['_5f_5fsvd_5fgram_5fschmidt_5forthogonalize_5fprefunc',['__svd_gram_schmidt_orthogonalize_prefunc',['../svd_8sql__in.html#ae8f2006de42ea486eccfb82b3623218c',1,'svd.sql_in']]],
+  ['_5f_5fsvd_5fgram_5fschmidt_5forthogonalize_5fsfunc',['__svd_gram_schmidt_orthogonalize_sfunc',['../svd_8sql__in.html#ab145d0ed41d32120b31adf8cf29691f6',1,'svd.sql_in']]],
+  ['_5f_5fsvd_5flanczos_5fagg',['__svd_lanczos_agg',['../svd_8sql__in.html#aa5e1fcbd1d65133acab96cc2085b56b3',1,'svd.sql_in']]],
+  ['_5f_5fsvd_5flanczos_5fbidiagonalize',['__svd_lanczos_bidiagonalize',['../svd_8sql__in.html#a4bd839e9214cec1dfcdcfb3ca9755df1',1,'svd.sql_in']]],
+  ['_5f_5fsvd_5flanczos_5fbidiagonalize_5fsparse',['__svd_lanczos_bidiagonalize_sparse',['../svd_8sql__in.html#a48b5b42e70a402926e39c59cd16e539e',1,'svd.sql_in']]],
+  ['_5f_5fsvd_5flanczos_5fprefunc',['__svd_lanczos_prefunc',['../svd_8sql__in.html#ae7b94da849ee17b7743fc18588c629f5',1,'svd.sql_in']]],
+  ['_5f_5fsvd_5flanczos_5fpvec',['__svd_lanczos_pvec',['../svd_8sql__in.html#ae86146392b1b5065fc6badc0f25b3f3e',1,'svd.sql_in']]],
+  ['_5f_5fsvd_5flanczos_5fqvec',['__svd_lanczos_qvec',['../svd_8sql__in.html#a6b85b00dae1c49821be7d3e68ccf266b',1,'svd.sql_in']]],
+  ['_5f_5fsvd_5flanczos_5fsfunc',['__svd_lanczos_sfunc',['../svd_8sql__in.html#a63ae741e70fbfba1082241c75d6cdd51',1,'svd.sql_in']]],
+  ['_5f_5fsvd_5fsparse_5flanczos_5fagg',['__svd_sparse_lanczos_agg',['../svd_8sql__in.html#a1ba5e18c0f8db1190ef75a9d209a1f0f',1,'svd.sql_in']]],
+  ['_5f_5fsvd_5fsparse_5flanczos_5fsfunc',['__svd_sparse_lanczos_sfunc',['../svd_8sql__in.html#a6f1c90152f497ef91526cc9200bad00a',1,'svd.sql_in']]],
+  ['_5f_5fsvd_5funit_5fvector',['__svd_unit_vector',['../svd_8sql__in.html#a7638f4ea701362e5c318b5272c0e98b9',1,'svd.sql_in']]],
+  ['_5f_5fsvd_5fvec_5fmult_5fmatrix',['__svd_vec_mult_matrix',['../svd_8sql__in.html#a95e025c969e4a93696b49bad69f993d5',1,'svd.sql_in']]],
+  ['_5f_5fsvd_5fvec_5ftrans_5fmult_5fmatrix',['__svd_vec_trans_mult_matrix',['../svd_8sql__in.html#ab18d5d90ce54e9e80c06b843a4bd8ba5',1,'svd.sql_in']]],
+  ['_5f_5fsvd_5fvec_5ftrans_5fmult_5fmatrix_5finternal',['__svd_vec_trans_mult_matrix_internal',['../svd_8sql__in.html#a9a6498e5a9a9d78b46f89401df776ed8',1,'svd.sql_in']]],
+  ['_5f_5fto_5fchar',['__to_char',['../utilities_8sql__in.html#abdd2768e61b034d04c934a981259bbfd',1,'utilities.sql_in']]],
+  ['_5f_5ftree_5fpredict',['__tree_predict',['../decision__tree_8sql__in.html#a71a536f94609625aabceaaa8a9030ac6',1,'decision_tree.sql_in']]],
+  ['_5f_5funiform_5fvector',['__uniform_vector',['../matrix__ops_8sql__in.html#a659d654fc2cd25e498ad83950e044b13',1,'__uniform_vector(integer dim, float8 a, float8 b, integer seed):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a69a8dcfcacf6d5d362e26d74192cea92',1,'__uniform_vector(integer dim, float8 a, float8 b):&#160;matrix_ops.sql_in']]],
+  ['_5f_5funique_5fstring',['__unique_string',['../utilities_8sql__in.html#a5b0156044142673183205154f9e63ddc',1,'utilities.sql_in']]],
+  ['_5f_5futils_5fvar_5fscales_5ffinal',['__utils_var_scales_final',['../utils__regularization_8sql__in.html#a39dba68ff8a3da3a83c646902ca3949d',1,'utils_regularization.sql_in']]],
+  ['_5f_5futils_5fvar_5fscales_5fmerge',['__utils_var_scales_merge',['../utils__regularization_8sql__in.html#abfaba5b835e943b6a79eb785a6901536',1,'utils_regularization.sql_in']]],
+  ['_5f_5futils_5fvar_5fscales_5fnon_5fzero_5fstd_5ffinal',['__utils_var_scales_non_zero_std_final',['../utils__regularization_8sql__in.html#abeb442ad31298aa56b5ca8d2c138a5e1',1,'utils_regularization.sql_in']]],
+  ['_5f_5futils_5fvar_5fscales_5fresult',['__utils_var_scales_result',['../utils__regularization_8sql__in.html#a5cfe62b0f14b537d50ebe122eacc5c77',1,'utils_regularization.sql_in']]],
+  ['_5f_5futils_5fvar_5fscales_5ftransition',['__utils_var_scales_transition',['../utils__regularization_8sql__in.html#a930148a43d97714bf76988122b4a2cd6',1,'utils_regularization.sql_in']]],
+  ['_5f_5fzph_5ffinal',['__zph_final',['../cox__prop__hazards_8sql__in.html#ac4025de22406c470e32e35376d0f54a4',1,'cox_prop_hazards.sql_in']]],
+  ['_5f_5fzph_5fmerge',['__zph_merge',['../cox__prop__hazards_8sql__in.html#afe87ae70e07135bc657b6c9db58a2820',1,'cox_prop_hazards.sql_in']]],
+  ['_5f_5fzph_5ftransition',['__zph_transition',['../cox__prop__hazards_8sql__in.html#abb83dc1e36c379287e4dfdf14a350647',1,'cox_prop_hazards.sql_in']]],
+  ['_5fclosest_5fcolumn',['_closest_column',['../linalg_8sql__in.html#a8239fac12096a5dc2720f6cb35b011e5',1,'linalg.sql_in']]],
+  ['_5fclosest_5fcolumns',['_closest_columns',['../linalg_8sql__in.html#a37fd07274dbc9a7f779346b8572ec989',1,'linalg.sql_in']]],
+  ['_5fcompute_5fgrpid',['_compute_grpid',['../cox__prop__hazards_8sql__in.html#a85be1c85fcf03e9b1bc25798e6fa9914',1,'_compute_grpid(float8[] splits, float8 split_col, boolean reverse):&#160;cox_prop_hazards.sql_in'],['../cox__prop__hazards_8sql__in.html#ae94792f3fb4a0697e11db4334f643164',1,'_compute_grpid(float8[] splits, float8 split_col):&#160;cox_prop_hazards.sql_in']]],
+  ['_5fcompute_5fleaf_5fstats',['_compute_leaf_stats',['../decision__tree_8sql__in.html#a93896cc01cd324ff6dec20d3791b8500',1,'decision_tree.sql_in']]],
+  ['_5fcompute_5fleaf_5fstats_5fmerge',['_compute_leaf_stats_merge',['../decision__tree_8sql__in.html#aec006330e98f6c322f30c05cb07518c0',1,'decision_tree.sql_in']]],
+  ['_5fcompute_5fleaf_5fstats_5ftransition',['_compute_leaf_stats_transition',['../decision__tree_8sql__in.html#aadad9dcc5dd62e335305e99dc1a1b68e',1,'decision_tree.sql_in']]],
+  ['_5fcompute_5fsplits',['_compute_splits',['../cox__prop__hazards_8sql__in.html#a138656eb9696e48be0c5a90ee2de5a44',1,'cox_prop_hazards.sql_in']]],
+  ['_5fcompute_5fsurr_5fstats',['_compute_surr_stats',['../decision__tree_8sql__in.html#a52020e1216a5ca6b255aa9fefa5ed0f1',1,'decision_tree.sql_in']]],
+  ['_5fcompute_5fsurr_5fstats_5ftransition',['_compute_surr_stats_transition',['../decision__tree_8sql__in.html#af17fb0c819380de1c090731dba54ec40',1,'decision_tree.sql_in']]],
+  ['_5fcompute_5fvar_5fimportance',['_compute_var_importance',['../decision__tree_8sql__in.html#adb43607742d993e1588e1e7a74e82320',1,'decision_tree.sql_in']]],
+  ['_5fconvert_5fto_5frandom_5fforest_5fformat',['_convert_to_random_forest_format',['../random__forest_8sql__in.html#a5ec3574505880bc3f6e2620b6ab5cd02',1,'random_forest.sql_in']]],
+  ['_5fcoxph_5fpredict_5fresp',['_coxph_predict_resp',['../cox__prop__hazards_8sql__in.html#a1d53d501174ed20ace7108db2ca8863d',1,'cox_prop_hazards.sql_in']]],
+  ['_5fcoxph_5fpredict_5fterms',['_coxph_predict_terms',['../cox__prop__hazards_8sql__in.html#a063f714c9a2c0f618007f0274febb266',1,'cox_prop_hazards.sql_in']]],
+  ['_5fdisplay_5fdecision_5ftree',['_display_decision_tree',['../decision__tree_8sql__in.html#a77f0212dd3776488cf73080eeb4e851c',1,'_display_decision_tree(bytea8 tree, text[] cat_features, text[] con_features, text[] cat_levels_in_text, integer[] cat_n_levels, text[] dependent_levels, text id_prefix, boolean verbose):&#160;decision_tree.sql_in'],['../decision__tree_8sql__in.html#a0dd7cec9ec3db8482ae60a3f274c3488',1,'_display_decision_tree(bytea8 tree, text[] cat_features, text[] con_features, text[] cat_levels_in_text, integer[] cat_n_levels, text[] dependent_levels, text id_prefix):&#160;decision_tree.sql_in']]],
+  ['_5fdisplay_5fdecision_5ftree_5fsurrogate',['_display_decision_tree_surrogate',['../decision__tree_8sql__in.html#a071ad5dd0cf985d9e5258968fa8c214d',1,'decision_tree.sql_in']]],
+  ['_5fdisplay_5ftext_5fdecision_5ftree',['_display_text_decision_tree',['../decision__tree_8sql__in.html#af030ab954fd282bb08e13134e087fafb',1,'decision_tree.sql_in']]],
+  ['_5fdst_5fcompute_5fcon_5fsplits',['_dst_compute_con_splits',['../decision__tree_8sql__in.html#aaabc1efd8cc211886572692062f74732',1,'decision_tree.sql_in']]],
+  ['_5fdst_5fcompute_5fcon_5fsplits_5ffinal',['_dst_compute_con_splits_final',['../decision__tree_8sql__in.html#a1ce0c3bc05f5f6657ce61f2890b27a33',1,'decision_tree.sql_in']]],
+  ['_5fdst_5fcompute_5fcon_5fsplits_5ftransition',['_dst_compute_con_splits_transition',['../decision__tree_8sql__in.html#ac6533f633d95f6c41a628a751b356ce1',1,'decision_tree.sql_in']]],
+  ['_5fdst_5fcompute_5fentropy',['_dst_compute_entropy',['../decision__tree_8sql__in.html#a71e8f6ae4227a3cd3734d8c8f7ef54fe',1,'decision_tree.sql_in']]],
+  ['_5fdst_5fcompute_5fentropy_5ffinal',['_dst_compute_entropy_final',['../decision__tree_8sql__in.html#ac81d2cf47356702c5bc30790f505c05f',1,'decision_tree.sql_in']]],
+  ['_5fdst_5fcompute_5fentropy_5fmerge',['_dst_compute_entropy_merge',['../decision__tree_8sql__in.html#a992c692244ec9f1dd38557bc8cf5c2ef',1,'decision_tree.sql_in']]],
+  ['_5fdst_5fcompute_5fentropy_5ftransition',['_dst_compute_entropy_transition',['../decision__tree_8sql__in.html#a88589c4a865221cd97af52284e222195',1,'decision_tree.sql_in']]],
+  ['_5fdt_5fapply',['_dt_apply',['../decision__tree_8sql__in.html#a164580846362686fe4ab55db7c4fa52a',1,'decision_tree.sql_in']]],
+  ['_5fdt_5fsurr_5fapply',['_dt_surr_apply',['../decision__tree_8sql__in.html#a05665f86bc28346cdf12e4b4d05aa3d9',1,'decision_tree.sql_in']]],
+  ['_5ffinal_5fmode',['_final_mode',['../utilities_8sql__in.html#a378fd0afa1245520f2270e602ed9e6b6',1,'utilities.sql_in']]],
+  ['_5fgen_5fcat_5flevels_5fset',['_gen_cat_levels_set',['../decision__tree_8sql__in.html#a658412807f7b28e9e367a1421cb8ad96',1,'decision_tree.sql_in']]],
+  ['_5fgen_5fstate',['_gen_state',['../utilities_8sql__in.html#a2dc21ec6de26adef2cf1699ed8dab5aa',1,'utilities.sql_in']]],
+  ['_5fget_5fbin_5findex_5fby_5fvalue',['_get_bin_index_by_value',['../random__forest_8sql__in.html#a5abaf34ca61c9870463291b0851ef261',1,'random_forest.sql_in']]],
+  ['_5fget_5fbin_5findices_5fby_5fvalues',['_get_bin_indices_by_values',['../random__forest_8sql__in.html#a022b4a4701e439538bd8aad7891ecee5',1,'random_forest.sql_in']]],
+  ['_5fget_5fbin_5fvalue_5fby_5findex',['_get_bin_value_by_index',['../random__forest_8sql__in.html#a807c2d0ab7a4c3b56d52aad07aedd02a',1,'random_forest.sql_in']]],
+  ['_5finitialize_5fdecision_5ftree',['_initialize_decision_tree',['../decision__tree_8sql__in.html#ad63f7b9a78190275509744f9517dd370',1,'decision_tree.sql_in']]],
+  ['_5fmap_5fcatlevel_5fto_5fint',['_map_catlevel_to_int',['../decision__tree_8sql__in.html#a56fec99839acd3f7f9d33f0912480928',1,'decision_tree.sql_in']]],
+  ['_5fpca_5fproject_5funion',['_pca_project_union',['../pca__project_8sql__in.html#a326bbd91fea50c9ebd8edcfe963eb535',1,'pca_project.sql_in']]],
+  ['_5fpca_5funion',['_pca_union',['../pca_8sql__in.html#a2c896b607596a09d707365bb9287e73b',1,'pca.sql_in']]],
+  ['_5fpredict_5fdt_5fprob',['_predict_dt_prob',['../decision__tree_8sql__in.html#a25ef01785744c7cf005e6b517602b497',1,'decision_tree.sql_in']]],
+  ['_5fpredict_5fdt_5fresponse',['_predict_dt_response',['../decision__tree_8sql__in.html#a59b5f555e1f8d7c57830c9cfe3401615',1,'decision_tree.sql_in']]],
+  ['_5fprint_5fdecision_5ftree',['_print_decision_tree',['../decision__tree_8sql__in.html#a32e1056ceed38cc5da2e022e455b7de6',1,'decision_tree.sql_in']]],
+  ['_5frf_5fcat_5fimp_5fscore',['_rf_cat_imp_score',['../random__forest_8sql__in.html#a9b188037fd90e41b9590d8296351b645',1,'random_forest.sql_in']]],
+  ['_5frf_5fcon_5fimp_5fscore',['_rf_con_imp_score',['../random__forest_8sql__in.html#aa237f4a451150d5a44f7e871a62b4621',1,'random_forest.sql_in']]],
+  ['_5fsplit_5ffinal',['_split_final',['../cox__prop__hazards_8sql__in.html#ac5ba4af69415de3372e5a9d9f97a96af',1,'cox_prop_hazards.sql_in']]],
+  ['_5fsplit_5fmerge',['_split_merge',['../cox__prop__hazards_8sql__in.html#a2e641566026ce44f191e722db6d4f4d3',1,'cox_prop_hazards.sql_in']]],
+  ['_5fsplit_5ftransition',['_split_transition',['../cox__prop__hazards_8sql__in.html#a842f88fb0d1f17d5410ac30fb1445deb',1,'cox_prop_hazards.sql_in']]],
+  ['_5fstring_5fto_5farray',['_string_to_array',['../utilities_8sql__in.html#a967afc3041b28c8ceedcef8d25c26b9b',1,'utilities.sql_in']]]
+];
diff --git a/docs/rc/search/functions_1.html b/docs/rc/search/functions_1.html
new file mode 100644
index 0000000..b343e2d
--- /dev/null
+++ b/docs/rc/search/functions_1.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_1.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/functions_1.js b/docs/rc/search/functions_1.js
new file mode 100644
index 0000000..08c4b45
--- /dev/null
+++ b/docs/rc/search/functions_1.js
@@ -0,0 +1,61 @@
+var searchData=
+[
+  ['adjusted_5fr2_5fscore',['adjusted_r2_score',['../pred__metrics_8sql__in.html#a129d96c2f4645d026634d9e1826ed9a0',1,'adjusted_r2_score(text table_in, text table_out, text prediction_col, text observed_col, integer num_predictors, integer training_size, text grouping_cols):&#160;pred_metrics.sql_in'],['../pred__metrics_8sql__in.html#ad50bf1fb684d2e285ad26478f9a2aa84',1,'adjusted_r2_score(text table_in, text table_out, text prediction_col, text observed_col, integer num_predictors, integer training_size):&#160;pred_metrics.sql_in'],['../pred__metrics_8sql__in.html#a424d641abd6653a870f7a835778450c7',1,'adjusted_r2_score(text message):&#160;pred_metrics.sql_in'],['../pred__metrics_8sql__in.html#a70d9e59f0f44519b173a82b9731e1cc1',1,'adjusted_r2_score():&#160;pred_metrics.sql_in']]],
+  ['agg_5farray_5fconcat',['agg_array_concat',['../input__data__preprocessor_8sql__in.html#a0d24b7a8306ca61b0d89d1afe1f892b0',1,'agg_array_concat(real[]):&#160;input_data_preprocessor.sql_in'],['../input__data__preprocessor_8sql__in.html#ab478cd585b6a2aa1435c93d53429987f',1,'agg_array_concat(smallint[]):&#160;input_data_preprocessor.sql_in']]],
+  ['angle',['angle',['../svec__util_8sql__in.html#a7e395ee71f6cf05afa76d89a72d45bec',1,'svec_util.sql_in']]],
+  ['area_5funder_5froc',['area_under_roc',['../pred__metrics_8sql__in.html#ac9a3057fb15ed515509de58c829bb591',1,'area_under_roc(text table_in, text table_out, text prediction_col, text observed_col, text grouping_cols):&#160;pred_metrics.sql_in'],['../pred__metrics_8sql__in.html#a9c0f1d6fa8ac88b1151710795d762e47',1,'area_under_roc(text table_in, text table_out, text prediction_col, text observed_col):&#160;pred_metrics.sql_in'],['../pred__metrics_8sql__in.html#a92da7daab6584c8981b85a3c4f830c3b',1,'area_under_roc(text message):&#160;pred_metrics.sql_in'],['../pred__metrics_8sql__in.html#a341c337551c0bf8785093b48bbf10cc9',1,'area_under_roc():&#160;pred_metrics.sql_in']]],
+  ['argmax',['argmax',['../bayes_8sql__in.html#ad47c68a2b8aeedf66d509f0c32a9732d',1,'bayes.sql_in']]],
+  ['argmax_5fcombine',['argmax_combine',['../bayes_8sql__in.html#ab150442ec577f4a0a3948176baf5ebd0',1,'bayes.sql_in']]],
+  ['argmax_5ffinal',['argmax_final',['../bayes_8sql__in.html#aa7017323fd6fad40c9acbbee5f1fec7e',1,'bayes.sql_in']]],
+  ['argmax_5ftransition',['argmax_transition',['../bayes_8sql__in.html#a0671e6ac35a1967f41d2efb9e8417e1b',1,'bayes.sql_in']]],
+  ['arima_5fforecast',['arima_forecast',['../arima_8sql__in.html#a52416f13110c15b6b7fe8736a4eb0202',1,'arima_forecast(text model_table, text output_table, integer steps_ahead):&#160;arima.sql_in'],['../arima_8sql__in.html#ada9e8962693411ec919953bad1ef6007',1,'arima_forecast(text message):&#160;arima.sql_in'],['../arima_8sql__in.html#a08645edc97c591bce174964ac309a3a0',1,'arima_forecast():&#160;arima.sql_in']]],
+  ['arima_5ftrain',['arima_train',['../arima_8sql__in.html#a9af899e0260745b75b1872159fea1281',1,'arima_train(text input_table, text output_table, text timestamp_column, text timeseries_column, text grouping_columns, boolean include_mean, integer[] non_seasonal_orders, text optimizer_params):&#160;arima.sql_in'],['../arima_8sql__in.html#ac5b071de3f011a05b877afd6a415f993',1,'arima_train(text input_table, text output_table, text timestamp_column, text timeseries_column, text grouping_columns, boolean include_mean, integer[] non_seasonal_orders):&#160;arima.sql_in'],['../arima_8sql__in.html#ac4d148eefd1d5fbf4e613d5f10df4930',1,'arima_train(text input_table, text output_table, text timestamp_column, text timeseries_column, text grouping_columns, boolean include_mean):&#160;arima.sql_in'],['../arima_8sql__in.html#a47977919832510a148d237b11688aee6',1,'arima_train(text input_table, text output_table, text timestamp_column, text timeseries_column, text grouping_columns):&#160;arima.sql_in'],['../arima_8sql__in.html#a1842458490b5b3a3a80d9663792c5e48',1,'arima_train(text input_table, text output_table, text timestamp_column, text timeseries_column):&#160;arima.sql_in'],['../arima_8sql__in.html#a97025971eb41b5480e279e8b56d5c018',1,'arima_train(text message):&#160;arima.sql_in'],['../arima_8sql__in.html#a71f407786355a4226ff44a94b6c80589',1,'arima_train():&#160;arima.sql_in']]],
+  ['array_5fabs',['array_abs',['../array__ops_8sql__in.html#ac14e74c10b58f5518cd0e3e56067e5ba',1,'array_ops.sql_in']]],
+  ['array_5fabs_5fsum',['array_abs_sum',['../array__ops_8sql__in.html#a13c0b0c53e8b0dc4e08c21bb8152ee7d',1,'array_ops.sql_in']]],
+  ['array_5fadd',['array_add',['../array__ops_8sql__in.html#a91c8d3715142927b3967f05a4fbf1575',1,'array_ops.sql_in']]],
+  ['array_5favg',['array_avg',['../cox__prop__hazards_8sql__in.html#a5734f5796a403ebf2e765cba136f54c8',1,'cox_prop_hazards.sql_in']]],
+  ['array_5favg_5ffinal',['array_avg_final',['../cox__prop__hazards_8sql__in.html#a1f5594f3a1199bfd91d7479292e25b5c',1,'cox_prop_hazards.sql_in']]],
+  ['array_5favg_5fmerge',['array_avg_merge',['../cox__prop__hazards_8sql__in.html#a45bd6774621ad8fe0baa9427f7ce8fd4',1,'cox_prop_hazards.sql_in']]],
+  ['array_5favg_5ftransition',['array_avg_transition',['../cox__prop__hazards_8sql__in.html#a0ffc559f8f54d7ea49c8d1a865ef5a37',1,'cox_prop_hazards.sql_in']]],
+  ['array_5fcontains',['array_contains',['../array__ops_8sql__in.html#aedf6cb13eb4803bcc12dc4d95ea8ff4e',1,'array_ops.sql_in']]],
+  ['array_5fcontains_5fnull',['array_contains_null',['../array__ops_8sql__in.html#a86e48d6f0ed7572cfc10576a07f84d25',1,'array_ops.sql_in']]],
+  ['array_5fcos',['array_cos',['../array__ops_8sql__in.html#a8855869bb9f124c3ff5b10041988610c',1,'array_ops.sql_in']]],
+  ['array_5fcum_5fprod',['array_cum_prod',['../array__ops_8sql__in.html#a69642cec81403897436d3c286bf2b36b',1,'array_ops.sql_in']]],
+  ['array_5fcum_5fsum',['array_cum_sum',['../array__ops_8sql__in.html#a819f395ada41a446dd4941f172d0bfef',1,'array_ops.sql_in']]],
+  ['array_5fdiv',['array_div',['../array__ops_8sql__in.html#a6cc05e7052495f8b64692faf40219576',1,'array_ops.sql_in']]],
+  ['array_5fdot',['array_dot',['../array__ops_8sql__in.html#acde10964ed23b7c8da515fb84cb8d5e0',1,'array_ops.sql_in']]],
+  ['array_5felem_5fcorr_5fagg',['array_elem_corr_agg',['../cox__prop__hazards_8sql__in.html#a8928da50ddcf85de812ab058214324db',1,'cox_prop_hazards.sql_in']]],
+  ['array_5felement_5fmax',['array_element_max',['../cox__prop__hazards_8sql__in.html#a1de2b192c73ede707b42726e9469664d',1,'cox_prop_hazards.sql_in']]],
+  ['array_5felement_5fmin',['array_element_min',['../cox__prop__hazards_8sql__in.html#a2ec0ea5a3faba236a75d4d9cc16e40a4',1,'cox_prop_hazards.sql_in']]],
+  ['array_5ffill',['array_fill',['../array__ops_8sql__in.html#a065a5323f3b742be47e39ad8b4c90fc2',1,'array_ops.sql_in']]],
+  ['array_5ffilter',['array_filter',['../array__ops_8sql__in.html#acc295a568878940ffc3e2c9a75990efb',1,'array_filter(anyarray x, anyelement k, text op):&#160;array_ops.sql_in'],['../array__ops_8sql__in.html#a0c3c44e81ff158ce8914258aa5604872',1,'array_filter(anyarray x, anyelement k):&#160;array_ops.sql_in'],['../array__ops_8sql__in.html#ac4490f150ecb7aaab0933c223ccde5bd',1,'array_filter(anyarray x):&#160;array_ops.sql_in']]],
+  ['array_5fmax',['array_max',['../array__ops_8sql__in.html#ae891429cc50705c530f3e5ca15541849',1,'array_ops.sql_in']]],
+  ['array_5fmax_5findex',['array_max_index',['../array__ops_8sql__in.html#aa415256a9064aecc600dfb5e377fb7b1',1,'array_ops.sql_in']]],
+  ['array_5fmean',['array_mean',['../array__ops_8sql__in.html#a407598f9eb70637798b02fd731bfca2c',1,'array_ops.sql_in']]],
+  ['array_5fmin',['array_min',['../array__ops_8sql__in.html#a6659bf9d9363eb179fab34f81f8ac59b',1,'array_ops.sql_in']]],
+  ['array_5fmin_5findex',['array_min_index',['../array__ops_8sql__in.html#a813a4d9ffc1c18b1b3e18f6ecdb2051f',1,'array_ops.sql_in']]],
+  ['array_5fmult',['array_mult',['../array__ops_8sql__in.html#a652d70c480d484c4a1a92ded384b0dd7',1,'array_ops.sql_in']]],
+  ['array_5fof_5fbigint',['array_of_bigint',['../array__ops_8sql__in.html#ab7d8550e66d2e0bd54b8f0997d93880c',1,'array_ops.sql_in']]],
+  ['array_5fof_5ffloat',['array_of_float',['../array__ops_8sql__in.html#ab066e65a41db78b00b4532996b2a6efc',1,'array_ops.sql_in']]],
+  ['array_5fpow',['array_pow',['../array__ops_8sql__in.html#a761e7ca753a5e1acf26896b37ed8b0bd',1,'array_ops.sql_in']]],
+  ['array_5fscalar_5fadd',['array_scalar_add',['../array__ops_8sql__in.html#a0b6ffe59b12c3dee076c3059f9ab363f',1,'array_ops.sql_in']]],
+  ['array_5fscalar_5fmult',['array_scalar_mult',['../array__ops_8sql__in.html#ae6881cc5c86941b6ffca35d7f3cd5c12',1,'array_ops.sql_in']]],
+  ['array_5fsqrt',['array_sqrt',['../array__ops_8sql__in.html#a83451ed0c3ca5a9c62751dba47e45df7',1,'array_ops.sql_in']]],
+  ['array_5fsquare',['array_square',['../array__ops_8sql__in.html#aff60f4091bed6374683f047c8a70ef9a',1,'array_ops.sql_in']]],
+  ['array_5fstddev',['array_stddev',['../array__ops_8sql__in.html#a3b6c2d173a611e6d6b184d825c2b336d',1,'array_ops.sql_in']]],
+  ['array_5fsub',['array_sub',['../array__ops_8sql__in.html#a2875a161a01c7dcdea9a4997b074eefc',1,'array_ops.sql_in']]],
+  ['array_5fsum',['array_sum',['../array__ops_8sql__in.html#a4c98f20e6a737358806f63318daea5ec',1,'array_ops.sql_in']]],
+  ['array_5fsum_5fbig',['array_sum_big',['../array__ops_8sql__in.html#a418de59800833aa95f9b7cbd6b12901c',1,'array_ops.sql_in']]],
+  ['array_5fto_5f1d',['array_to_1d',['../linalg_8sql__in.html#a71304c333a999e69ac1430c285c35181',1,'linalg.sql_in']]],
+  ['array_5fto_5f2d',['array_to_2d',['../linalg_8sql__in.html#a0799a4ccb93a699a280861126c3e1a74',1,'linalg.sql_in']]],
+  ['array_5fto_5fbytea',['array_to_bytea',['../array__ops_8sql__in.html#ae82f5f104ce04c1b0e6cf8dbf9c110ee',1,'array_ops.sql_in']]],
+  ['array_5funion',['array_union',['../crf_8sql__in.html#a73693c959db4ca3dbfd1b9debcca2c8f',1,'crf.sql_in']]],
+  ['array_5funnest_5f2d_5fto_5f1d',['array_unnest_2d_to_1d',['../array__ops_8sql__in.html#af057b589f2a2cb1095caa99feaeb3d70',1,'array_unnest_2d_to_1d(anyarray x, int unnest_row_id, anyarray unnest_result):&#160;array_ops.sql_in'],['../array__ops_8sql__in.html#aa86efceb2ac80f621db00844bab77553',1,'array_unnest_2d_to_1d():&#160;array_ops.sql_in']]],
+  ['assert',['assert',['../utilities_8sql__in.html#a76cfdbed8a6782f37f50710d855434bd',1,'utilities.sql_in']]],
+  ['assert_5fguc_5fvalue',['assert_guc_value',['../utilities_8sql__in.html#ab0c056b9f6ec748b24352261276775ba',1,'utilities.sql_in']]],
+  ['assoc_5frules',['assoc_rules',['../assoc__rules_8sql__in.html#a7c215a102cc18276a3ca14c38ed35f89',1,'assoc_rules(float8 support, float8 confidence, text tid_col, text item_col, text input_table, text output_schema, boolean verbose, integer max_itemset_size, integer max_lhs_size, integer max_rhs_size):&#160;assoc_rules.sql_in'],['../assoc__rules_8sql__in.html#a033f13252ebfc88b21f18835e5d3ce37',1,'assoc_rules(float8 support, float8 confidence, text tid_col, text item_col, text input_table, text output_schema, boolean verbose, integer max_itemset_size, integer max_lhs_size):&#160;assoc_rules.sql_in'],['../assoc__rules_8sql__in.html#a2ce0222d57332da628eb98220130e905',1,'assoc_rules(float8 support, float8 confidence, text tid_col, text item_col, text input_table, text output_schema, boolean verbose, integer max_itemset_size):&#160;assoc_rules.sql_in'],['../assoc__rules_8sql__in.html#a68a256d98b82ac15bac7df92e806f6f8',1,'assoc_rules(float8 support, float8 confidence, text tid_col, text item_col, text input_table, text output_schema):&#160;assoc_rules.sql_in'],['../assoc__rules_8sql__in.html#af9456adb6dad01e452415b9a0a5371dc',1,'assoc_rules(float8 support, float8 confidence, text tid_col, text item_col, text input_table, text output_schema, boolean verbose):&#160;assoc_rules.sql_in'],['../assoc__rules_8sql__in.html#aeddb752c12b9af779d796b135f900e38',1,'assoc_rules(text message):&#160;assoc_rules.sql_in'],['../assoc__rules_8sql__in.html#a8362eb54bb0eeb551d5a1aadb96e7092',1,'assoc_rules():&#160;assoc_rules.sql_in']]],
+  ['avg',['avg',['../linalg_8sql__in.html#a1aa37f73fb1cd8d7d106aa518dd8c0b4',1,'linalg.sql_in']]],
+  ['avg_5fvector_5ffinal',['avg_vector_final',['../linalg_8sql__in.html#ad468b52a7caa9b47a0650d39e32d9c50',1,'linalg.sql_in']]],
+  ['avg_5fvector_5fmerge',['avg_vector_merge',['../linalg_8sql__in.html#a5ac255c13e1f2d91274b829ff0383e44',1,'linalg.sql_in']]],
+  ['avg_5fvector_5ftransition',['avg_vector_transition',['../linalg_8sql__in.html#aaea269f4746f952faadffed9d9b107d7',1,'linalg.sql_in']]]
+];
diff --git a/docs/rc/search/functions_10.html b/docs/rc/search/functions_10.html
new file mode 100644
index 0000000..72bc1ea
--- /dev/null
+++ b/docs/rc/search/functions_10.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_10.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/functions_10.js b/docs/rc/search/functions_10.js
new file mode 100644
index 0000000..02828ae
--- /dev/null
+++ b/docs/rc/search/functions_10.js
@@ -0,0 +1,27 @@
+var searchData=
+[
+  ['r2_5fscore',['r2_score',['../pred__metrics_8sql__in.html#a2e00cc6c0666528b7ed420a89a3b6413',1,'r2_score(text table_in, text table_out, text prediction_col, text observed_col, text grouping_cols):&#160;pred_metrics.sql_in'],['../pred__metrics_8sql__in.html#aee34887f9fe23e90cd130ec0c2666008',1,'r2_score(text table_in, text table_out, text prediction_col, text observed_col):&#160;pred_metrics.sql_in'],['../pred__metrics_8sql__in.html#a0061e653014344317bd9a0e9f964a3e2',1,'r2_score(text message):&#160;pred_metrics.sql_in'],['../pred__metrics_8sql__in.html#ae858a4cf95d805da71db17d1018d500f',1,'r2_score():&#160;pred_metrics.sql_in']]],
+  ['rayleigh_5fcdf',['rayleigh_cdf',['../prob_8sql__in.html#aab0ddb8a5348cfa387d777043a3cb6d0',1,'prob.sql_in']]],
+  ['rayleigh_5fpdf',['rayleigh_pdf',['../prob_8sql__in.html#a798541736d9255bdd5c0bd94924d47bc',1,'prob.sql_in']]],
+  ['rayleigh_5fquantile',['rayleigh_quantile',['../prob_8sql__in.html#acd6757acab1683c735e2b57901494336',1,'prob.sql_in']]],
+  ['rb_5fcoxph_5fstep_5ffinal',['rb_coxph_step_final',['../robust__variance__coxph_8sql__in.html#a504aa4de0f53044a065e6b1e8a66a285',1,'robust_variance_coxph.sql_in']]],
+  ['rb_5fcoxph_5fstep_5ftransition',['rb_coxph_step_transition',['../robust__variance__coxph_8sql__in.html#a0bd8046f4e0956b8dc503656d5127467',1,'robust_variance_coxph.sql_in']]],
+  ['rb_5fcoxph_5fstrata_5fstep_5ffinal',['rb_coxph_strata_step_final',['../robust__variance__coxph_8sql__in.html#a9826d93b250c1fb6e06d412181545754',1,'robust_variance_coxph.sql_in']]],
+  ['rb_5fsum_5fstrata',['rb_sum_strata',['../robust__variance__coxph_8sql__in.html#ad8fc6f9cca64b26bc7a12f15abfc6234',1,'robust_variance_coxph.sql_in']]],
+  ['rb_5fsum_5fstrata_5ffinal',['rb_sum_strata_final',['../robust__variance__coxph_8sql__in.html#a9473298f0225d2ad1f6297f360a639d4',1,'robust_variance_coxph.sql_in']]],
+  ['rb_5fsum_5fstrata_5ftransition',['rb_sum_strata_transition',['../robust__variance__coxph_8sql__in.html#a4bf2a610417ee174074b2191fb921256',1,'robust_variance_coxph.sql_in']]],
+  ['relative_5ferror',['relative_error',['../utilities_8sql__in.html#a4d49e00b4dd6059f61ffb9fdc0a696f7',1,'relative_error(float8 approx, float8 value):&#160;utilities.sql_in'],['../utilities_8sql__in.html#a26a54368fbf2460323cacf95db76fd2f',1,'relative_error(float8[] approx, float8[] value):&#160;utilities.sql_in']]],
+  ['robust_5flinregr',['robust_linregr',['../robust_8sql__in.html#ade1af85b04294ee404a638aa2bfbf051',1,'robust.sql_in']]],
+  ['robust_5flinregr_5ffinal',['robust_linregr_final',['../robust_8sql__in.html#a458741a15dc6c2ca627f0d1c1d19b7f8',1,'robust.sql_in']]],
+  ['robust_5flinregr_5fmerge_5fstates',['robust_linregr_merge_states',['../robust_8sql__in.html#ad85d9925cbab4b59acd798a7b32671ff',1,'robust.sql_in']]],
+  ['robust_5flinregr_5ftransition',['robust_linregr_transition',['../robust_8sql__in.html#a3f978229f9a2e229276278985d76c438',1,'robust.sql_in']]],
+  ['robust_5flogregr',['robust_logregr',['../robust_8sql__in.html#a6a9290aafa048bcb7cdc13410d5814aa',1,'robust.sql_in']]],
+  ['robust_5flogregr_5fstep_5ffinal',['robust_logregr_step_final',['../robust_8sql__in.html#af8efdd02ad3155411507bf786095a562',1,'robust.sql_in']]],
+  ['robust_5flogregr_5fstep_5fmerge_5fstates',['robust_logregr_step_merge_states',['../robust_8sql__in.html#aa715a6f6885b56d919a243ec4ff07fde',1,'robust.sql_in']]],
+  ['robust_5flogregr_5fstep_5ftransition',['robust_logregr_step_transition',['../robust_8sql__in.html#a840ddaa14013c4445b7a0d55e9489d8d',1,'robust.sql_in']]],
+  ['robust_5fmlogregr',['robust_mlogregr',['../robust_8sql__in.html#a209021ac52461f029353cec7fb900cd4',1,'robust.sql_in']]],
+  ['robust_5fvariance_5fcoxph',['robust_variance_coxph',['../clustered__variance__coxph_8sql__in.html#abaeae5d6cd30db4b06a49d24d714812e',1,'robust_variance_coxph(varchar model_table, varchar output_table, varchar clustervar):&#160;clustered_variance_coxph.sql_in'],['../robust__variance__coxph_8sql__in.html#a9d08b7ab1efa1f58543214a311344741',1,'robust_variance_coxph():&#160;robust_variance_coxph.sql_in'],['../robust__variance__coxph_8sql__in.html#aee46845ee87505ad1d35badb7db4dfd7',1,'robust_variance_coxph(varchar message):&#160;robust_variance_coxph.sql_in'],['../robust__variance__coxph_8sql__in.html#a746cf7ce7d9db6ad50bb399125403a55',1,'robust_variance_coxph(varchar model_table, varchar output_table):&#160;robust_variance_coxph.sql_in']]],
+  ['robust_5fvariance_5flinregr',['robust_variance_linregr',['../robust_8sql__in.html#a390473d2fd45e268f0fc13ca971b49b4',1,'robust_variance_linregr(varchar message):&#160;robust.sql_in'],['../robust_8sql__in.html#aec15331f90464a70c222774d78a5caf2',1,'robust_variance_linregr():&#160;robust.sql_in'],['../robust_8sql__in.html#a3f79ad2b83c9749fa85d4f96a12c5af0',1,'robust_variance_linregr(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, varchar grouping_cols, boolean verbose_mode):&#160;robust.sql_in'],['../robust_8sql__in.html#a80b264be3cd0784d49424efee14b78a8',1,'robust_variance_linregr(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, varchar grouping_cols):&#160;robust.sql_in'],['../robust_8sql__in.html#ac513ea8711b165dac3f75e0c5f4a577f',1,'robust_variance_linregr(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname):&#160;robust.sql_in']]],
+  ['robust_5fvariance_5flogregr',['robust_variance_logregr',['../robust_8sql__in.html#abc20ec2c5e74f268e7727c33a4bb9054',1,'robust_variance_logregr(varchar message):&#160;robust.sql_in'],['../robust_8sql__in.html#a0c426835208c1c9b14a9cce168c8bf87',1,'robust_variance_logregr():&#160;robust.sql_in'],['../robust_8sql__in.html#a815cadfeb54447993db9ce2bd2aa709e',1,'robust_variance_logregr(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, varchar grouping_cols, integer max_iter, varchar optimizer, float8 tolerance, boolean verbose_mode):&#160;robust.sql_in'],['../robust_8sql__in.html#a0924470ae6bf5bb3b4b03e41f69d6f7b',1,'robust_variance_logregr(varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable, varchar grouping_cols, integer max_iter, varchar optimizer, float8 tolerance):&#160;robust.sql_in'],['../robust_8sql__in.html#a9a9a8c67a89f4ecf6e783762536239bc',1,'robust_variance_logregr(varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable, varchar grouping_cols, integer max_iter, varchar optimizer):&#160;robust.sql_in'],['../robust_8sql__in.html#aef8d807073c9e5a8c62b6a318b5048a1',1,'robust_variance_logregr(varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable, varchar grouping_cols, integer max_iter):&#160;robust.sql_in'],['../robust_8sql__in.html#a89770eec0b2e47c714a755b5b1697dd9',1,'robust_variance_logregr(varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable, varchar grouping_cols):&#160;robust.sql_in'],['../robust_8sql__in.html#ab73b9a117ba6bd637bac5757ed122d59',1,'robust_variance_logregr(varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable):&#160;robust.sql_in']]],
+  ['robust_5fvariance_5fmlogregr',['robust_variance_mlogregr',['../robust_8sql__in.html#a1f27c072a4ef885a55825f75d12b3bd8',1,'robust_variance_mlogregr(varchar message):&#160;robust.sql_in'],['../robust_8sql__in.html#abd0fb2d66b0dcb4ee6649aaa97bc62f9',1,'robust_variance_mlogregr():&#160;robust.sql_in'],['../robust_8sql__in.html#a8ee938491f0cd0eda60c9fd320740566',1,'robust_variance_mlogregr(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, integer ref_category, varchar grouping_cols, varchar optimizer_params, boolean verbose_mode):&#160;robust.sql_in'],['../robust_8sql__in.html#a2a00a61722a2b92fca37883c795598f6',1,'robust_variance_mlogregr(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, integer ref_category, varchar grouping_cols, varchar optimizer_params):&#160;robust.sql_in'],['../robust_8sql__in.html#afe0d690ca9e2a75f8fd157b548ece204',1,'robust_variance_mlogregr(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, integer ref_category, varchar grouping_cols):&#160;robust.sql_in'],['../robust_8sql__in.html#af3b1cba3e31f65233524d110f5873682',1,'robust_variance_mlogregr(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, integer ref_category):&#160;robust.sql_in'],['../robust_8sql__in.html#a93031a31e4c93d3caa22d963927e75c8',1,'robust_variance_mlogregr(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname):&#160;robust.sql_in'],['../robust_8sql__in.html#a99a3252474c5fbb2982e461325b1838d',1,'robust_variance_mlogregr(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, integer ref_category, varchar grouping_cols, integer max_iter, varchar optimizer, float8 tolerance, boolean verbose_mode):&#160;robust.sql_in'],['../robust_8sql__in.html#a08cd16eaf72e07c3034951863951d7e1',1,'robust_variance_mlogregr(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, integer ref_category, varchar grouping_cols, integer max_iter, varchar optimizer, float8 tolerance):&#160;robust.sql_in'],['../robust_8sql__in.html#abdebb95685f06580eade2941a2edd2af',1,'robust_variance_mlogregr(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, integer ref_category, varchar grouping_cols, integer max_iter, varchar optimizer):&#160;robust.sql_in'],['../robust_8sql__in.html#a4ebbb7afe6193dfa77116a5c3ae9b7dc',1,'robust_variance_mlogregr(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, integer ref_category, varchar grouping_cols, integer max_iter):&#160;robust.sql_in']]]
+];
diff --git a/docs/rc/search/functions_11.html b/docs/rc/search/functions_11.html
new file mode 100644
index 0000000..6948a61
--- /dev/null
+++ b/docs/rc/search/functions_11.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_11.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/functions_11.js b/docs/rc/search/functions_11.js
new file mode 100644
index 0000000..24e8ec1
--- /dev/null
+++ b/docs/rc/search/functions_11.js
@@ -0,0 +1,100 @@
+var searchData=
+[
+  ['sessionize',['sessionize',['../sessionize_8sql__in.html#a288509ef965178e3841153997c63b0b2',1,'sessionize(varchar source_table, varchar output_table, varchar partition_expr, varchar time_stamp, interval max_time, varchar output_cols, boolean create_view):&#160;sessionize.sql_in'],['../sessionize_8sql__in.html#afb8a7e6fed41778e20d297051f5184cd',1,'sessionize(varchar source_table, varchar output_table, varchar partition_expr, varchar time_stamp, interval max_time, varchar output_cols):&#160;sessionize.sql_in'],['../sessionize_8sql__in.html#a73adab9955f25ef5b3bec39376cea014',1,'sessionize(varchar source_table, varchar output_table, varchar partition_expr, varchar time_stamp, interval max_time):&#160;sessionize.sql_in'],['../sessionize_8sql__in.html#acbb16f241e71c43e7f972d17e1619fa7',1,'sessionize(text message):&#160;sessionize.sql_in'],['../sessionize_8sql__in.html#a61a22075a6e70172e568756381798c1d',1,'sessionize():&#160;sessionize.sql_in']]],
+  ['sparse_5fdirect_5flinear_5fsystem',['sparse_direct_linear_system',['../sparse__linear__systems_8sql__in.html#a8d22e4088dedd57a931b465a73a0357a',1,'sparse_linear_systems.sql_in']]],
+  ['sparse_5fdirect_5flinear_5fsystem_5ffinal',['sparse_direct_linear_system_final',['../sparse__linear__systems_8sql__in.html#a37d42899e8ec22d8642aa2c943689d19',1,'sparse_linear_systems.sql_in']]],
+  ['sparse_5fdirect_5flinear_5fsystem_5fmerge_5fstates',['sparse_direct_linear_system_merge_states',['../sparse__linear__systems_8sql__in.html#a81014be318749e53d8c3fd58eece9600',1,'sparse_linear_systems.sql_in']]],
+  ['sparse_5fdirect_5flinear_5fsystem_5ftransition',['sparse_direct_linear_system_transition',['../sparse__linear__systems_8sql__in.html#a8175311c8e181a3ac73d9cc87814bbb0',1,'sparse_linear_systems.sql_in']]],
+  ['sparse_5finmem_5fiterative_5flinear_5fsystem',['sparse_inmem_iterative_linear_system',['../sparse__linear__systems_8sql__in.html#ace39ff8e846754e3e0709bfbbbee9a60',1,'sparse_linear_systems.sql_in']]],
+  ['sparse_5finmem_5fiterative_5flinear_5fsystem_5ffinal',['sparse_inmem_iterative_linear_system_final',['../sparse__linear__systems_8sql__in.html#a5ff2f1afd945580fc9cb9bedba84695b',1,'sparse_linear_systems.sql_in']]],
+  ['sparse_5finmem_5fiterative_5flinear_5fsystem_5fmerge_5fstates',['sparse_inmem_iterative_linear_system_merge_states',['../sparse__linear__systems_8sql__in.html#a3daa8daf05cda974b4137ce07c694e2e',1,'sparse_linear_systems.sql_in']]],
+  ['sparse_5finmem_5fiterative_5flinear_5fsystem_5ftransition',['sparse_inmem_iterative_linear_system_transition',['../sparse__linear__systems_8sql__in.html#a5463eaef5dc5e4040acd56a1035ecc91',1,'sparse_linear_systems.sql_in']]],
+  ['squared_5fdist_5fnorm2',['squared_dist_norm2',['../linalg_8sql__in.html#a00a08e69f27524f2096032214e15b668',1,'linalg.sql_in']]],
+  ['stem_5ftoken',['stem_token',['../porter__stemmer_8sql__in.html#aca5bc24a9a8f5c33470b9f0bf0b3c515',1,'stem_token(text token):&#160;porter_stemmer.sql_in'],['../porter__stemmer_8sql__in.html#ae074993f351b069eaa7831e8afb979ae',1,'stem_token():&#160;porter_stemmer.sql_in']]],
+  ['stem_5ftoken_5farr',['stem_token_arr',['../porter__stemmer_8sql__in.html#a1ac3a2fd645ddf807b36a1328134a4ea',1,'stem_token_arr(text[] token_arr):&#160;porter_stemmer.sql_in'],['../porter__stemmer_8sql__in.html#a23ebfbea896802dd4c489773819f6cd8',1,'stem_token_arr():&#160;porter_stemmer.sql_in']]],
+  ['stratified_5fsample',['stratified_sample',['../stratified__sample_8sql__in.html#a44753db6b486f7e020740ead271a2420',1,'stratified_sample(text source_table, text output_table, float8 proportion, text grouping_cols, text target_cols, boolean with_replacement):&#160;stratified_sample.sql_in'],['../stratified__sample_8sql__in.html#a9107baf0d8ea245273e06ae5c41d16aa',1,'stratified_sample(text source_table, text output_table, float8 proportion, text grouping_cols, text target_cols):&#160;stratified_sample.sql_in'],['../stratified__sample_8sql__in.html#a5a09f753977051e3eb337f39680c3730',1,'stratified_sample(text source_table, text output_table, float8 proportion, text grouping_cols):&#160;stratified_sample.sql_in'],['../stratified__sample_8sql__in.html#aadb9952a02cb0977b2fcead3445adde2',1,'stratified_sample(text source_table, text output_table, float8 proportion):&#160;stratified_sample.sql_in'],['../stratified__sample_8sql__in.html#a489042579fb1e9b138a309584b57ca36',1,'stratified_sample(varchar message):&#160;stratified_sample.sql_in'],['../stratified__sample_8sql__in.html#aa89c8ef2dbb59b4c84657b75572bf7ff',1,'stratified_sample():&#160;stratified_sample.sql_in']]],
+  ['students_5ft_5fcdf',['students_t_cdf',['../prob_8sql__in.html#a5322531131074c23a2dbf067ee504ef7',1,'prob.sql_in']]],
+  ['students_5ft_5fpdf',['students_t_pdf',['../prob_8sql__in.html#a8815c21670fff9d31946553a84b845b1',1,'prob.sql_in']]],
+  ['students_5ft_5fquantile',['students_t_quantile',['../prob_8sql__in.html#a7d64add02af21a95d73502b2dd466a75',1,'prob.sql_in']]],
+  ['sum',['sum',['../array__ops_8sql__in.html#a26e8508a2bae10a6574cec697a270eea',1,'array_ops.sql_in']]],
+  ['summary',['summary',['../summary_8sql__in.html#a4be51e88a1df45191a1692b95429af36',1,'summary(text source_table, text output_table, text target_cols, text grouping_cols, boolean get_distinct, boolean get_quartiles, float8[] ntile_array, integer how_many_mfv, boolean get_estimates, integer n_cols_per_run):&#160;summary.sql_in'],['../summary_8sql__in.html#a14ff66aaa0248c5e2741dfaf2e360881',1,'summary(text source_table, text output_table, text target_cols, text grouping_cols, boolean get_distinct, boolean get_quartiles, float8[] ntile_array, integer how_many_mfv, boolean get_estimates):&#160;summary.sql_in'],['../summary_8sql__in.html#ab14b423b19a17fe7bbc6d522dda13402',1,'summary(text source_table, text output_table, text target_cols, text grouping_cols, boolean get_distinct, boolean get_quartiles, float8[] ntile_array, integer how_many_mfv):&#160;summary.sql_in'],['../summary_8sql__in.html#ae39edc1569d25b212ca5ebc06703c6d6',1,'summary(text source_table, text output_table, text target_cols, text grouping_cols, boolean get_distinct, boolean get_quartiles, float8[] ntile_array):&#160;summary.sql_in'],['../summary_8sql__in.html#a44d256be00bd0f79f8bea359fa32de32',1,'summary(text source_table, text output_table, text target_cols, text grouping_cols, boolean get_distinct, boolean get_quartiles):&#160;summary.sql_in'],['../summary_8sql__in.html#a7cfc420930c03f5b50421aee757d02bb',1,'summary(text source_table, text output_table, text target_cols, text grouping_cols, boolean get_distinct):&#160;summary.sql_in'],['../summary_8sql__in.html#ad562be9b174fa1c5e0384005f5478009',1,'summary(text source_table, text output_table, text target_cols, text grouping_cols):&#160;summary.sql_in'],['../summary_8sql__in.html#a02b92e4f8962278c063738ecae488d53',1,'summary(text source_table, text output_table, text target_cols):&#160;summary.sql_in'],['../summary_8sql__in.html#ab56b9ffdee9c36566e0079ca5f2b19fd',1,'summary(text source_table, text output_table):&#160;summary.sql_in'],['../summary_8sql__in.html#aad245ee0091df4c4955dbbaff5c9bd3f',1,'summary(text input_message):&#160;summary.sql_in'],['../summary_8sql__in.html#aeed4f7ad586b0ea344bd623d8d48e2bb',1,'summary():&#160;summary.sql_in']]],
+  ['svd',['svd',['../svd_8sql__in.html#a8dbab74f5bde863a63431a6ec6f66a61',1,'svd(text source_table, text output_table_prefix, text row_id, integer k, integer n_iterations, text result_summary_table):&#160;svd.sql_in'],['../svd_8sql__in.html#a3222ad5181b1b7dde8e89ae00c663177',1,'svd(text source_table, text output_table_prefix, text row_id, integer k):&#160;svd.sql_in'],['../svd_8sql__in.html#a9deeee6cc15d9f9713f0c93665923622',1,'svd(text source_table, text output_table_prefix, text row_id, integer k, integer n_iterations):&#160;svd.sql_in'],['../svd_8sql__in.html#ad020de39296f7e8e121ba2a173700fa6',1,'svd(text input_message):&#160;svd.sql_in'],['../svd_8sql__in.html#a33268c776f0e4f86f7cefc52290b552a',1,'svd():&#160;svd.sql_in']]],
+  ['svd_5fblock',['svd_block',['../svd_8sql__in.html#a96fb5620eed9c936b5bbfe24d7e37ad6',1,'svd_block(text source_table, text output_table_prefix, integer k, integer n_iterations, text result_summary_table):&#160;svd.sql_in'],['../svd_8sql__in.html#a2927cf2c1a1addd00f838718e8b1fea1',1,'svd_block(text source_table, text output_table_prefix, integer k, integer n_iterations):&#160;svd.sql_in'],['../svd_8sql__in.html#a2ed4bfd5bba7b959deaccb3471e624ed',1,'svd_block(text source_table, text output_table_prefix, integer k):&#160;svd.sql_in']]],
+  ['svd_5fsparse',['svd_sparse',['../svd_8sql__in.html#a511f83e3eba19f6f41f8e3f7122ddb3a',1,'svd_sparse(text source_table, text output_table_prefix, text row_id, text col_id, text val_id, integer row_dim, integer col_dim, integer k, integer n_iterations, text result_summary_table):&#160;svd.sql_in'],['../svd_8sql__in.html#aaad7f45ad283fcffa5b5d9938432a038',1,'svd_sparse(text source_table, text output_table_prefix, text row_id, text col_id, text val_id, integer row_dim, integer col_dim, integer k):&#160;svd.sql_in'],['../svd_8sql__in.html#a20f535608417d4ff73b6e029b785ddef',1,'svd_sparse(text source_table, text output_table_prefix, text row_id, text col_id, text val_id, integer row_dim, integer col_dim, integer k, integer n_iterations):&#160;svd.sql_in']]],
+  ['svd_5fsparse_5fnative',['svd_sparse_native',['../svd_8sql__in.html#a0225b28fd4b71cf6e7072c034f3296c6',1,'svd_sparse_native(text source_table, text output_table_prefix, text row_id, text col_id, text val_id, integer row_dim, integer col_dim, integer k, integer n_iterations, text result_summary_table):&#160;svd.sql_in'],['../svd_8sql__in.html#a8e0f90441d3a2335aef8cc1403577bb9',1,'svd_sparse_native(text source_table, text output_table_prefix, text row_id, text col_id, text val_id, integer row_dim, integer col_dim, integer k):&#160;svd.sql_in'],['../svd_8sql__in.html#ad3a3a3d97f9d7bc96578be4aa6b54d1c',1,'svd_sparse_native(text source_table, text output_table_prefix, text row_id, text col_id, text val_id, integer row_dim, integer col_dim, integer k, integer n_iterations):&#160;svd.sql_in']]],
+  ['svec_5fappend',['svec_append',['../svec__util_8sql__in.html#a3950b17b103ceeddca520a0f0d097ddc',1,'svec_util.sql_in']]],
+  ['svec_5fcast_5ffloat4',['svec_cast_float4',['../svec_8sql__in.html#a1f1025124d5423cc1505991414f17582',1,'svec.sql_in']]],
+  ['svec_5fcast_5ffloat8',['svec_cast_float8',['../svec_8sql__in.html#af42e4b15879949032a68139c59443aac',1,'svec.sql_in']]],
+  ['svec_5fcast_5ffloat8arr',['svec_cast_float8arr',['../svec_8sql__in.html#a96025250e64f049a053c5696b3b96e02',1,'svec.sql_in']]],
+  ['svec_5fcast_5fint2',['svec_cast_int2',['../svec_8sql__in.html#af69458bf9b2906ca471d027966b13e6f',1,'svec.sql_in']]],
+  ['svec_5fcast_5fint4',['svec_cast_int4',['../svec_8sql__in.html#abc01ac6b36ea9d689d338fd72abbd540',1,'svec.sql_in']]],
+  ['svec_5fcast_5fint8',['svec_cast_int8',['../svec_8sql__in.html#a9ea167c01fb2999dc5aaf5e8e21f5e8f',1,'svec.sql_in']]],
+  ['svec_5fcast_5fnumeric',['svec_cast_numeric',['../svec_8sql__in.html#a50de0278ff7ceeff33a2ea4ca5fdf1a0',1,'svec.sql_in']]],
+  ['svec_5fcast_5fpositions_5ffloat8arr',['svec_cast_positions_float8arr',['../svec_8sql__in.html#a0ee423729fbca5abd46c86fa81d51f23',1,'svec.sql_in']]],
+  ['svec_5fchange',['svec_change',['../svec__util_8sql__in.html#a59407764a1cbf1937da39cf39a2f447c',1,'svec_util.sql_in']]],
+  ['svec_5fcmp',['svec_cmp',['../svec_8sql__in.html#a813762d8bd2a7fda083880e5bd8c355b',1,'svec.sql_in']]],
+  ['svec_5fconcat',['svec_concat',['../svec_8sql__in.html#a24f184bef083fd9068c28fc94dad8054',1,'svec.sql_in']]],
+  ['svec_5fconcat_5freplicate',['svec_concat_replicate',['../svec_8sql__in.html#a34cb5f83e0c010aacc719b8b078bfeb9',1,'svec.sql_in']]],
+  ['svec_5fcontains',['svec_contains',['../svec__util_8sql__in.html#afdef1c6bf65ffc0e838cf10f33ae5557',1,'svec_util.sql_in']]],
+  ['svec_5fcount',['svec_count',['../svec__util_8sql__in.html#a6a21e25d3f50053c888a0bd126f831f0',1,'svec_util.sql_in']]],
+  ['svec_5fcount_5fnonzero',['svec_count_nonzero',['../svec__util_8sql__in.html#abebdcbe45de346aff874db008e842e65',1,'svec_util.sql_in']]],
+  ['svec_5fdimension',['svec_dimension',['../svec__util_8sql__in.html#ab8d1acbe4e8551755fef217b506bed8a',1,'svec_util.sql_in']]],
+  ['svec_5fdiv',['svec_div',['../svec_8sql__in.html#a78a38512c860085e31f6153b8118cbe9',1,'svec.sql_in']]],
+  ['svec_5fdiv_5ffloat8arr',['svec_div_float8arr',['../svec_8sql__in.html#a211cf37584f54087dabc1fac14ed12dd',1,'svec.sql_in']]],
+  ['svec_5fdmax',['svec_dmax',['../svec__util_8sql__in.html#aa05abd8cb32253c07c0f2224861256a5',1,'svec_util.sql_in']]],
+  ['svec_5fdmin',['svec_dmin',['../svec__util_8sql__in.html#ad1011a13839994adbb1eb3e643c9074d',1,'svec_util.sql_in']]],
+  ['svec_5fdot',['svec_dot',['../svec_8sql__in.html#a4eeaf69c84d7ce0e46adc93e38b2b4f3',1,'svec_dot(svec, svec):&#160;svec.sql_in'],['../svec_8sql__in.html#af870f06fd4c51f585515b6306f64fe3b',1,'svec_dot(float8[], float8[]):&#160;svec.sql_in'],['../svec_8sql__in.html#a93f4a0901681fc11e847615a4aba0255',1,'svec_dot(svec, float8[]):&#160;svec.sql_in'],['../svec_8sql__in.html#a47b111663b39ec8646891edec8ab3925',1,'svec_dot(float8[], svec):&#160;svec.sql_in']]],
+  ['svec_5felsum',['svec_elsum',['../svec__util_8sql__in.html#a00a7b3260b9fde9b55061e6bf58a028a',1,'svec_elsum(svec):&#160;svec_util.sql_in'],['../svec__util_8sql__in.html#afb2076f09f00e512a62c06d4d33e5922',1,'svec_elsum(float8[]):&#160;svec_util.sql_in']]],
+  ['svec_5feq',['svec_eq',['../svec_8sql__in.html#adceeff7e2f2e43b3e17219bca5d4fea0',1,'svec.sql_in']]],
+  ['svec_5feq_5fnon_5fzero',['svec_eq_non_zero',['../svec__util_8sql__in.html#ab3a1cccd709379973f100e5eb35559d2',1,'svec_util.sql_in']]],
+  ['svec_5ffrom_5fstring',['svec_from_string',['../svec__util_8sql__in.html#a1f5e8911574cf30cc979478040bd3262',1,'svec_util.sql_in']]],
+  ['svec_5fge',['svec_ge',['../svec_8sql__in.html#ad08b0cadbcf50ff4685228f917cafd1f',1,'svec.sql_in']]],
+  ['svec_5fgt',['svec_gt',['../svec_8sql__in.html#a3e5d57b7a4473904e4d053884468e540',1,'svec.sql_in']]],
+  ['svec_5fhash',['svec_hash',['../svec__util_8sql__in.html#a0bfa8f8d083282bc9e8caf6f03bb5251',1,'svec_util.sql_in']]],
+  ['svec_5fin',['svec_in',['../svec_8sql__in.html#abe896192db26c02d5c517a5ccf2144f1',1,'svec.sql_in']]],
+  ['svec_5fl1norm',['svec_l1norm',['../svec__util_8sql__in.html#ae60f7aaa5710c765d08b6c3906e0c9f0',1,'svec_l1norm(svec):&#160;svec_util.sql_in'],['../svec__util_8sql__in.html#ae5ac6f098519439b76e03091022c9508',1,'svec_l1norm(float8[]):&#160;svec_util.sql_in']]],
+  ['svec_5fl2_5fcmp',['svec_l2_cmp',['../svec_8sql__in.html#a8f72c8cf6d39f08d939f23cf1338a3c6',1,'svec.sql_in']]],
+  ['svec_5fl2_5feq',['svec_l2_eq',['../svec_8sql__in.html#a9268d26c54c4b2905eb7938df95af8c0',1,'svec.sql_in']]],
+  ['svec_5fl2_5fge',['svec_l2_ge',['../svec_8sql__in.html#ac22b72fbae2a8f2b35b1c571d9f54dad',1,'svec.sql_in']]],
+  ['svec_5fl2_5fgt',['svec_l2_gt',['../svec_8sql__in.html#ab2414d0d78286884cd199cf44c1d17b9',1,'svec.sql_in']]],
+  ['svec_5fl2_5fle',['svec_l2_le',['../svec_8sql__in.html#a4045437bce8b9a9bdb0eb3115c97ca99',1,'svec.sql_in']]],
+  ['svec_5fl2_5flt',['svec_l2_lt',['../svec_8sql__in.html#ab53b85cb3412c9172bf0ee04f6856c69',1,'svec.sql_in']]],
+  ['svec_5fl2_5fne',['svec_l2_ne',['../svec_8sql__in.html#af35c08aadf164fa3bbc8678765bca643',1,'svec.sql_in']]],
+  ['svec_5fl2norm',['svec_l2norm',['../svec__util_8sql__in.html#a475f0f3e4602e8278b582e099fce2487',1,'svec_l2norm(svec):&#160;svec_util.sql_in'],['../svec__util_8sql__in.html#a536fbd3c596af5ea8ddfa2a3ca3e141c',1,'svec_l2norm(float8[]):&#160;svec_util.sql_in']]],
+  ['svec_5flapply',['svec_lapply',['../svec__util_8sql__in.html#a0d94c44dde95a00e3d802dee6d7c01eb',1,'svec_util.sql_in']]],
+  ['svec_5fle',['svec_le',['../svec_8sql__in.html#aa6f5715df728db0783b5dcb8db82a2a2',1,'svec.sql_in']]],
+  ['svec_5flog',['svec_log',['../svec__util_8sql__in.html#aab641f9db3deed5bbfa7e050c531e9c1',1,'svec_util.sql_in']]],
+  ['svec_5flt',['svec_lt',['../svec_8sql__in.html#ad7f05a6ce6efc51517bab6ccdb79ee23',1,'svec.sql_in']]],
+  ['svec_5fmean_5ffinal',['svec_mean_final',['../svec__util_8sql__in.html#ac3fc45511b50b5d054bf7bbeb952b98d',1,'svec_util.sql_in']]],
+  ['svec_5fmean_5fprefunc',['svec_mean_prefunc',['../svec__util_8sql__in.html#ab161647a1498c85762779966790eab71',1,'svec_util.sql_in']]],
+  ['svec_5fmean_5ftransition',['svec_mean_transition',['../svec__util_8sql__in.html#afcf2f75cd00ab0ba269caf79dcfcc62c',1,'svec_util.sql_in']]],
+  ['svec_5fmedian',['svec_median',['../svec__util_8sql__in.html#a2284a118fe03465203ecea8c34acefa5',1,'svec_median(float8[]):&#160;svec_util.sql_in'],['../svec__util_8sql__in.html#af9950e9ce4770738f2ce368d8124f142',1,'svec_median(svec):&#160;svec_util.sql_in']]],
+  ['svec_5fmedian_5finmemory',['svec_median_inmemory',['../svec__util_8sql__in.html#a93400e39ecce2f11b9ceb08403420a43',1,'svec_util.sql_in']]],
+  ['svec_5fminus',['svec_minus',['../svec_8sql__in.html#a170890a165bf662d343339ffc2a187cf',1,'svec.sql_in']]],
+  ['svec_5fminus_5ffloat8arr',['svec_minus_float8arr',['../svec_8sql__in.html#adf39975fbbd8a39629569c622db33ab9',1,'svec.sql_in']]],
+  ['svec_5fmult',['svec_mult',['../svec_8sql__in.html#a27f0629942dba2e395b005c728d53ac3',1,'svec.sql_in']]],
+  ['svec_5fmult_5ffloat8arr',['svec_mult_float8arr',['../svec_8sql__in.html#a6e6916baaf0a7ae0079424ce0565c8b4',1,'svec.sql_in']]],
+  ['svec_5fne',['svec_ne',['../svec_8sql__in.html#a80d9692f67e7cb482c4bda6dbaacd82b',1,'svec.sql_in']]],
+  ['svec_5fnonbase_5fpositions',['svec_nonbase_positions',['../svec__util_8sql__in.html#a5bc053a080fb38601ad91045dc3ffe74',1,'svec_util.sql_in']]],
+  ['svec_5fnonbase_5fvalues',['svec_nonbase_values',['../svec__util_8sql__in.html#a076dcbc0a278bb3b5161b0db2ad8fa44',1,'svec_util.sql_in']]],
+  ['svec_5fout',['svec_out',['../svec_8sql__in.html#a3db4af36acd318030ae57d2bfd19387a',1,'svec.sql_in']]],
+  ['svec_5fpivot',['svec_pivot',['../svec__util_8sql__in.html#a929bde3bc91b67300d9d370b6a1495f1',1,'svec_util.sql_in']]],
+  ['svec_5fplus',['svec_plus',['../svec_8sql__in.html#a612d8920c61e6fdf18dd4e3e9c69c979',1,'svec.sql_in']]],
+  ['svec_5fplus_5ffloat8arr',['svec_plus_float8arr',['../svec_8sql__in.html#aaeb54c952836c83c7f21a1c62a77955f',1,'svec.sql_in']]],
+  ['svec_5fpow',['svec_pow',['../svec_8sql__in.html#ab5166565f3482768db33ee677acc3d96',1,'svec.sql_in']]],
+  ['svec_5fproj',['svec_proj',['../svec__util_8sql__in.html#a8787222aec691f94d9808d1369aa401c',1,'svec_util.sql_in']]],
+  ['svec_5frecv',['svec_recv',['../svec_8sql__in.html#a585ea8bcb1d0647ef1295187b87405b2',1,'svec.sql_in']]],
+  ['svec_5freturn_5farray',['svec_return_array',['../svec_8sql__in.html#a7decda276d7ff1e9340dd44e0e7419c0',1,'svec.sql_in']]],
+  ['svec_5freverse',['svec_reverse',['../svec__util_8sql__in.html#a4a221435ca91b6fa45114e689ee96010',1,'svec_util.sql_in']]],
+  ['svec_5fsend',['svec_send',['../svec_8sql__in.html#a617557435170136b2781070c0a268b83',1,'svec.sql_in']]],
+  ['svec_5fsfv',['svec_sfv',['../svec__util_8sql__in.html#a375acd521ed9cb05f63b3696dcc10bf4',1,'svec_util.sql_in']]],
+  ['svec_5fsort',['svec_sort',['../svec__util_8sql__in.html#a91c23a7ce58932f48f5ab3579ea0309e',1,'svec_util.sql_in']]],
+  ['svec_5fsubvec',['svec_subvec',['../svec__util_8sql__in.html#a5cb3446de5fc117befe88ccb1ebb0e4e',1,'svec_util.sql_in']]],
+  ['svec_5fsum',['svec_sum',['../svec__util_8sql__in.html#af1ce6cdd7244ac0832d15c65b7ccc782',1,'svec_util.sql_in']]],
+  ['svec_5fto_5fstring',['svec_to_string',['../svec__util_8sql__in.html#a1de746ebd23530e72ba4f031ac41d155',1,'svec_util.sql_in']]],
+  ['svec_5funnest',['svec_unnest',['../svec__util_8sql__in.html#a87b45a983da4066fa7f35b17ccecf699',1,'svec_util.sql_in']]],
+  ['svm_5fclassification',['svm_classification',['../svm_8sql__in.html#a8da862a62df18a51dc88eba9c60b5638',1,'svm_classification(text source_table, text model_table, text dependent_varname, text independent_varname, text kernel_func, text kernel_params, text grouping_col, text params, bool verbose):&#160;svm.sql_in'],['../svm_8sql__in.html#a135884f3e412fde1bee4126446e9299e',1,'svm_classification(text source_table, text model_table, text dependent_varname, text independent_varname, text kernel_func, text kernel_params, text grouping_col, text params):&#160;svm.sql_in'],['../svm_8sql__in.html#ab1d29da8dde1eb9da5e9fac967514239',1,'svm_classification(text source_table, text model_table, text dependent_varname, text independent_varname, text kernel_func, text kernel_params, text grouping_col):&#160;svm.sql_in'],['../svm_8sql__in.html#a82aac4fbefbe918c16eb091e4f8f385f',1,'svm_classification(text source_table, text model_table, text dependent_varname, text independent_varname, text kernel_func, text kernel_params):&#160;svm.sql_in'],['../svm_8sql__in.html#abe8f5d1c4158bc8c38e2d74192c25a4b',1,'svm_classification(text source_table, text model_table, text dependent_varname, text independent_varname, text kernel_func):&#160;svm.sql_in'],['../svm_8sql__in.html#a57cc7e97be2a99498c581a59670e4a25',1,'svm_classification(text source_table, text model_table, text dependent_varname, text independent_varname):&#160;svm.sql_in'],['../svm_8sql__in.html#ae840bfcdc6cca8803dda06da8f05eda9',1,'svm_classification(text message):&#160;svm.sql_in'],['../svm_8sql__in.html#a69c5c09545536511f6273a9609428697',1,'svm_classification():&#160;svm.sql_in']]],
+  ['svm_5fone_5fclass',['svm_one_class',['../svm_8sql__in.html#a36f4846dfb1ea586ee5a742523cd6a09',1,'svm_one_class(text source_table, text model_table, text independent_varname, text kernel_func, text kernel_params, text grouping_col, text params, bool verbose):&#160;svm.sql_in'],['../svm_8sql__in.html#a5ce23d32a839eafc7097346dbaa05ee5',1,'svm_one_class(text source_table, text model_table, text independent_varname, text kernel_func, text kernel_params, text grouping_col, text params):&#160;svm.sql_in'],['../svm_8sql__in.html#adf2b25ab957e0d6f075a8d8db8a1d278',1,'svm_one_class(text source_table, text model_table, text independent_varname, text kernel_func, text kernel_params, text grouping_col):&#160;svm.sql_in'],['../svm_8sql__in.html#ac2507a4fc1e34e85c7865ceb7227c180',1,'svm_one_class(text source_table, text model_table, text independent_varname, text kernel_func, text kernel_params):&#160;svm.sql_in'],['../svm_8sql__in.html#a2eb45ccfefacf4a16054a6791e1acc5c',1,'svm_one_class(text source_table, text model_table, text independent_varname, text kernel_func):&#160;svm.sql_in'],['../svm_8sql__in.html#a3d3162c804ea9fd3ba205a7904ee07f7',1,'svm_one_class(text source_table, text model_table, text independent_varname):&#160;svm.sql_in'],['../svm_8sql__in.html#a4f208edc596f2deeb42e5e68bd379e95',1,'svm_one_class(text message):&#160;svm.sql_in'],['../svm_8sql__in.html#a239b651079546f081bd822dbb7da1f4c',1,'svm_one_class():&#160;svm.sql_in']]],
+  ['svm_5fpredict',['svm_predict',['../svm_8sql__in.html#a0a8bc159d9441835dcebd236a0b236fe',1,'svm_predict(text model_table, text new_data_table, text id_col_name, text output_table):&#160;svm.sql_in'],['../svm_8sql__in.html#a994c350eaa174f953d093ac94c8936e6',1,'svm_predict(text message):&#160;svm.sql_in'],['../svm_8sql__in.html#a8626e93e474e17cfe2d209170bd4203f',1,'svm_predict():&#160;svm.sql_in']]],
+  ['svm_5fregression',['svm_regression',['../svm_8sql__in.html#a1bf61091e404ae3eb4a14f034ec96783',1,'svm_regression(text source_table, text model_table, text dependent_varname, text independent_varname, text kernel_func, text kernel_params, text grouping_col, text params, bool verbose):&#160;svm.sql_in'],['../svm_8sql__in.html#ac4bfd11c7673467617815da11331c1d4',1,'svm_regression(text source_table, text model_table, text dependent_varname, text independent_varname, text kernel_func, text kernel_params, text grouping_col, text params):&#160;svm.sql_in'],['../svm_8sql__in.html#abeb319fa8b22a71614acf35cd0ec6ef4',1,'svm_regression(text source_table, text model_table, text dependent_varname, text independent_varname, text kernel_func, text kernel_params, text grouping_col):&#160;svm.sql_in'],['../svm_8sql__in.html#a091894b3be12694418f3ecb7553202cd',1,'svm_regression(text source_table, text model_table, text dependent_varname, text independent_varname, text kernel_func, text kernel_params):&#160;svm.sql_in'],['../svm_8sql__in.html#af6571d3807af4c2de1074cc8ad354d67',1,'svm_regression(text source_table, text model_table, text dependent_varname, text independent_varname, text kernel_func):&#160;svm.sql_in'],['../svm_8sql__in.html#a9c897d813c28d87556894199901714f4',1,'svm_regression(text source_table, text model_table, text dependent_varname, text independent_varname):&#160;svm.sql_in'],['../svm_8sql__in.html#ab52895e0f12df350cef58f9708d98afe',1,'svm_regression(text message):&#160;svm.sql_in'],['../svm_8sql__in.html#ad7485d9eed1d59d0a52e9036df7cbd9d',1,'svm_regression():&#160;svm.sql_in']]]
+];
diff --git a/docs/rc/search/functions_12.html b/docs/rc/search/functions_12.html
new file mode 100644
index 0000000..3df8489
--- /dev/null
+++ b/docs/rc/search/functions_12.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_12.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/functions_12.js b/docs/rc/search/functions_12.js
new file mode 100644
index 0000000..fc21db7
--- /dev/null
+++ b/docs/rc/search/functions_12.js
@@ -0,0 +1,24 @@
+var searchData=
+[
+  ['t_5ftest_5fmerge_5fstates',['t_test_merge_states',['../hypothesis__tests_8sql__in.html#ac97c5f5015790b59645d69858e127645',1,'hypothesis_tests.sql_in']]],
+  ['t_5ftest_5fone',['t_test_one',['../hypothesis__tests_8sql__in.html#a14fdcfa276fd1a7ea2e3adb41ebe7db4',1,'hypothesis_tests.sql_in']]],
+  ['t_5ftest_5fone_5ffinal',['t_test_one_final',['../hypothesis__tests_8sql__in.html#ad570d893565618bcbbcbb01b3bb0a9b9',1,'hypothesis_tests.sql_in']]],
+  ['t_5ftest_5fone_5ftransition',['t_test_one_transition',['../hypothesis__tests_8sql__in.html#a3bd1bcc335a2da73d01b40e06f7d2eea',1,'hypothesis_tests.sql_in']]],
+  ['t_5ftest_5ftwo_5fpooled',['t_test_two_pooled',['../hypothesis__tests_8sql__in.html#a5c306ba8380ce6567831fef4610e515b',1,'hypothesis_tests.sql_in']]],
+  ['t_5ftest_5ftwo_5fpooled_5ffinal',['t_test_two_pooled_final',['../hypothesis__tests_8sql__in.html#a0a0a8a579bbf0f0d1efcbf62223e3431',1,'hypothesis_tests.sql_in']]],
+  ['t_5ftest_5ftwo_5ftransition',['t_test_two_transition',['../hypothesis__tests_8sql__in.html#a1a835d80d1846a10a2c25b91ce81c6d2',1,'hypothesis_tests.sql_in']]],
+  ['t_5ftest_5ftwo_5funpooled',['t_test_two_unpooled',['../hypothesis__tests_8sql__in.html#ac50750a0e0797ce24af1dc479b9699e1',1,'hypothesis_tests.sql_in']]],
+  ['t_5ftest_5ftwo_5funpooled_5ffinal',['t_test_two_unpooled_final',['../hypothesis__tests_8sql__in.html#a8fe7f38d29bf835718adca811e36f15a',1,'hypothesis_tests.sql_in']]],
+  ['tanimoto_5fdistance',['tanimoto_distance',['../svec__util_8sql__in.html#a98222e58bc519865a26643a61611b717',1,'svec_util.sql_in']]],
+  ['term_5ffrequency',['term_frequency',['../text__utilities_8sql__in.html#a8a2caae5bf0b45eb1b4b6bbc531bce46',1,'term_frequency(text input_table, text doc_id_col, text word_vec_col, text output_table, boolean compute_vocab):&#160;text_utilities.sql_in'],['../text__utilities_8sql__in.html#a4d1d32672751005a2a0be881cfd823af',1,'term_frequency(text input_table, text doc_id_col, text word_vec_col, text output_table):&#160;text_utilities.sql_in']]],
+  ['train_5ftest_5fsplit',['train_test_split',['../train__test__split_8sql__in.html#aba17253051cd9d1a256b1ee896fc1cd0',1,'train_test_split(text source_table, text output_table, float8 train_proportion, float8 test_proportion, text grouping_cols, text target_cols, boolean with_replacement, boolean separate_output_tables):&#160;train_test_split.sql_in'],['../train__test__split_8sql__in.html#a90c905afa6f2ce6befeceac788d61962',1,'train_test_split(text source_table, text output_table, float8 train_proportion, float8 test_proportion, text grouping_cols, text target_cols, boolean with_replacement):&#160;train_test_split.sql_in'],['../train__test__split_8sql__in.html#aa8e4a179b48d3fff7c6fe09a3fa44067',1,'train_test_split(text source_table, text output_table, float8 train_proportion, float8 test_proportion, text grouping_cols, text target_cols):&#160;train_test_split.sql_in'],['../train__test__split_8sql__in.html#a310308ef9f1f03eeef1a2f5bbb5b48c6',1,'train_test_split(text source_table, text output_table, float8 train_proportion, float8 test_proportion, text grouping_cols):&#160;train_test_split.sql_in'],['../train__test__split_8sql__in.html#a9eab6a5d1f52dc9d46c9494b725a682a',1,'train_test_split(text source_table, text output_table, float8 train_proportion, float8 test_proportion):&#160;train_test_split.sql_in'],['../train__test__split_8sql__in.html#a6054a02712476003f9012c4dc7c56aa3',1,'train_test_split(text source_table, text output_table, float8 train_proportion):&#160;train_test_split.sql_in'],['../train__test__split_8sql__in.html#af2bfc579fccaf5fd9133d06ad65e8074',1,'train_test_split(varchar message):&#160;train_test_split.sql_in'],['../train__test__split_8sql__in.html#aa0e8ccf4f4aedb34c9d7d4d0361e6228',1,'train_test_split():&#160;train_test_split.sql_in']]],
+  ['training_5fpreprocessor_5fdl',['training_preprocessor_dl',['../input__data__preprocessor_8sql__in.html#a11a26c03a879a4c7e40e3ba07ca39a22',1,'training_preprocessor_dl(varchar source_table, varchar output_table, varchar dependent_varname, varchar independent_varname, integer buffer_size, real normalizing_const, integer num_classes, text distribution_rules):&#160;input_data_preprocessor.sql_in'],['../input__data__preprocessor_8sql__in.html#a75a2de01ab9b86789faa7c41b2c55356',1,'training_preprocessor_dl(varchar source_table, varchar output_table, varchar dependent_varname, varchar independent_varname, integer buffer_size, real normalizing_const, integer num_classes):&#160;input_data_preprocessor.sql_in'],['../input__data__preprocessor_8sql__in.html#ab8bc5ee0db5db0e89da79ba3a0edc608',1,'training_preprocessor_dl(varchar source_table, varchar output_table, varchar dependent_varname, varchar independent_varname, integer buffer_size, real normalizing_const):&#160;input_data_preprocessor.sql_in'],['../input__data__preprocessor_8sql__in.html#a64cd744683e85892bf020cc936f532ed',1,'training_preprocessor_dl(varchar source_table, varchar output_table, varchar dependent_varname, varchar independent_varname, integer buffer_size):&#160;input_data_preprocessor.sql_in'],['../input__data__preprocessor_8sql__in.html#ab60b64f54439fe51608fa2cd2de93a91',1,'training_preprocessor_dl(varchar source_table, varchar output_table, varchar dependent_varname, varchar independent_varname):&#160;input_data_preprocessor.sql_in'],['../input__data__preprocessor_8sql__in.html#a1a999c1227078fa664faed39ee8f836b',1,'training_preprocessor_dl(varchar message):&#160;input_data_preprocessor.sql_in'],['../input__data__preprocessor_8sql__in.html#aed7b34f84c82c898742af1d7878ba42d',1,'training_preprocessor_dl():&#160;input_data_preprocessor.sql_in']]],
+  ['trap_5ferror',['trap_error',['../utilities_8sql__in.html#ad1c36cb57cfddb39b69fd4d46e0c7dcb',1,'utilities.sql_in']]],
+  ['tree_5fdisplay',['tree_display',['../decision__tree_8sql__in.html#ae3e4875107103a092d3ef560b1812ee5',1,'tree_display(text model_table, boolean dot_format, boolean verbose):&#160;decision_tree.sql_in'],['../decision__tree_8sql__in.html#a3c51edcc0fe3de029dc39a3f0306155d',1,'tree_display(text model_table, boolean dot_format):&#160;decision_tree.sql_in'],['../decision__tree_8sql__in.html#a5168f7f604b0ad1c9e581f0e3f52698e',1,'tree_display(text model_table):&#160;decision_tree.sql_in'],['../decision__tree_8sql__in.html#adc9d02213b4d906976805a9681ea13fb',1,'tree_display():&#160;decision_tree.sql_in']]],
+  ['tree_5fpredict',['tree_predict',['../decision__tree_8sql__in.html#ae371963e135c40d8be5b2e342ab3c252',1,'tree_predict(text model, text source, text output, text pred_type):&#160;decision_tree.sql_in'],['../decision__tree_8sql__in.html#ad8afbe21c3b73daff7322c3fe906a804',1,'tree_predict(text model, text source, text output):&#160;decision_tree.sql_in'],['../decision__tree_8sql__in.html#abb6f3ecdd2fdcb7661ee10a65419066e',1,'tree_predict(text message):&#160;decision_tree.sql_in'],['../decision__tree_8sql__in.html#a744d4c5564a3ba18c9774fa040f32d18',1,'tree_predict():&#160;decision_tree.sql_in']]],
+  ['tree_5fsurr_5fdisplay',['tree_surr_display',['../decision__tree_8sql__in.html#a6ba706727adf88f8c07cfe09f71732bb',1,'tree_surr_display(text model_table):&#160;decision_tree.sql_in'],['../decision__tree_8sql__in.html#a97c730e746e1a8ea658efe433c9d1be5',1,'tree_surr_display():&#160;decision_tree.sql_in']]],
+  ['tree_5ftrain',['tree_train',['../decision__tree_8sql__in.html#a66dd4c15469c65676190208ee6853b83',1,'tree_train(text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text split_criterion, text grouping_cols, text weights, integer max_depth, integer min_split, integer min_bucket, integer n_bins, text pruning_params, text null_handling_params, boolean verbose_mode):&#160;decision_tree.sql_in'],['../decision__tree_8sql__in.html#a73a43da31b61ee81d5208860af2d3ab1',1,'tree_train(text message):&#160;decision_tree.sql_in'],['../decision__tree_8sql__in.html#a530812f8c3662705e24f8bf24d4eb3a5',1,'tree_train():&#160;decision_tree.sql_in'],['../decision__tree_8sql__in.html#a7071599a77d6080b2159e3ca167cff6c',1,'tree_train(text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text split_criterion, text grouping_cols, text weights, integer max_depth, integer min_split, integer min_bucket, integer n_bins, text pruning_params, text null_handling_params):&#160;decision_tree.sql_in'],['../decision__tree_8sql__in.html#ab561b3e2a8a66b6ec763d44ea042aeca',1,'tree_train(text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text split_criterion, text grouping_cols, text weights, integer max_depth, integer min_split, integer min_bucket, integer n_bins, text pruning_params):&#160;decision_tree.sql_in'],['../decision__tree_8sql__in.html#add62455af9b9f9a075df8221269a4872',1,'tree_train(text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text split_criterion, text grouping_cols, text weights, integer max_depth, integer min_split, integer min_bucket, integer n_bins):&#160;decision_tree.sql_in'],['../decision__tree_8sql__in.html#a635b82bc9c1fcd63e5a46546d3e2ba70',1,'tree_train(text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text split_criterion, text grouping_cols, text weights, integer max_depth, integer min_split, integer min_bucket):&#160;decision_tree.sql_in'],['../decision__tree_8sql__in.html#a93591ca5193e5ac9f8c3ac52e1dfb1ba',1,'tree_train(text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text split_criterion, text grouping_cols, text weights, integer max_depth, integer min_split):&#160;decision_tree.sql_in'],['../decision__tree_8sql__in.html#a558361a337c93731b856523e20f20e72',1,'tree_train(text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text split_criterion, text grouping_cols, text weights, integer max_depth):&#160;decision_tree.sql_in'],['../decision__tree_8sql__in.html#a10b882e4d6417023ae6b92f79e88ac29',1,'tree_train(text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text split_criterion, text grouping_cols, text weights):&#160;decision_tree.sql_in'],['../decision__tree_8sql__in.html#ac49c038b5668aeb901d22a5a81c8f338',1,'tree_train(text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text split_criterion, text grouping_cols):&#160;decision_tree.sql_in'],['../decision__tree_8sql__in.html#a9cfac8d89b1a13d22a20eb79d4d7e7ce',1,'tree_train(text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text split_criterion):&#160;decision_tree.sql_in'],['../decision__tree_8sql__in.html#af70d0b6bba29f94ebd49acc48b4f9bb1',1,'tree_train(text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude):&#160;decision_tree.sql_in'],['../decision__tree_8sql__in.html#a639431da2553fb86673e82d62cde4458',1,'tree_train(text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features):&#160;decision_tree.sql_in']]],
+  ['triangular_5fcdf',['triangular_cdf',['../prob_8sql__in.html#abf9c7d870bcfe68cacaa421749bbdf35',1,'prob.sql_in']]],
+  ['triangular_5fpdf',['triangular_pdf',['../prob_8sql__in.html#a0c511b9748b2f7a21fe56aaf5f66d188',1,'prob.sql_in']]],
+  ['triangular_5fquantile',['triangular_quantile',['../prob_8sql__in.html#a4777540ab1b003ff92d484c4bc26af27',1,'prob.sql_in']]]
+];
diff --git a/docs/rc/search/functions_13.html b/docs/rc/search/functions_13.html
new file mode 100644
index 0000000..febf8e0
--- /dev/null
+++ b/docs/rc/search/functions_13.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_13.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/functions_13.js b/docs/rc/search/functions_13.js
new file mode 100644
index 0000000..2cbe373
--- /dev/null
+++ b/docs/rc/search/functions_13.js
@@ -0,0 +1,9 @@
+var searchData=
+[
+  ['uniform_5fcdf',['uniform_cdf',['../prob_8sql__in.html#aa3a05f4f2e0ef9eb65e828261ecfbed9',1,'prob.sql_in']]],
+  ['uniform_5fpdf',['uniform_pdf',['../prob_8sql__in.html#ab90fa34d90a9c75747a34c3f210df239',1,'prob.sql_in']]],
+  ['uniform_5fquantile',['uniform_quantile',['../prob_8sql__in.html#a629587a0fdefb588d28b15517ae5cc04',1,'prob.sql_in']]],
+  ['utils_5fnormalize_5fdata',['utils_normalize_data',['../utils__regularization_8sql__in.html#a3dc216dff38a6d033020af2f7440e66d',1,'utils_regularization.sql_in']]],
+  ['utils_5fvar_5fscales',['utils_var_scales',['../utils__regularization_8sql__in.html#aaae98ce639cd126a308ed4604ac364a9',1,'utils_regularization.sql_in']]],
+  ['utils_5fvar_5fscales_5fnon_5fzero_5fstd',['utils_var_scales_non_zero_std',['../utils__regularization_8sql__in.html#ad7a5676b50f9836ecb819992a424d60e',1,'utils_regularization.sql_in']]]
+];
diff --git a/docs/rc/search/functions_14.html b/docs/rc/search/functions_14.html
new file mode 100644
index 0000000..4c814f5
--- /dev/null
+++ b/docs/rc/search/functions_14.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_14.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/functions_14.js b/docs/rc/search/functions_14.js
new file mode 100644
index 0000000..db10c92
--- /dev/null
+++ b/docs/rc/search/functions_14.js
@@ -0,0 +1,12 @@
+var searchData=
+[
+  ['validation_5fpreprocessor_5fdl',['validation_preprocessor_dl',['../input__data__preprocessor_8sql__in.html#a744eb29240e53401353c50635ff60451',1,'validation_preprocessor_dl(varchar source_table, varchar output_table, varchar dependent_varname, varchar independent_varname, varchar training_preprocessor_table, integer buffer_size, text distribution_rules):&#160;input_data_preprocessor.sql_in'],['../input__data__preprocessor_8sql__in.html#a9f219c66cfe4a834148090ee401ff769',1,'validation_preprocessor_dl(varchar source_table, varchar output_table, varchar dependent_varname, varchar independent_varname, varchar training_preprocessor_table, integer buffer_size):&#160;input_data_preprocessor.sql_in'],['../input__data__preprocessor_8sql__in.html#af4105a378bccdf33dafc5bed91c94db4',1,'validation_preprocessor_dl(varchar source_table, varchar output_table, varchar dependent_varname, varchar independent_varname, varchar training_preprocessor_table):&#160;input_data_preprocessor.sql_in'],['../input__data__preprocessor_8sql__in.html#af61c674e283134f2ffe282623befc1b6',1,'validation_preprocessor_dl(varchar message):&#160;input_data_preprocessor.sql_in'],['../input__data__preprocessor_8sql__in.html#ae112de88adf13d59bcf2ed7ef15dd40f',1,'validation_preprocessor_dl():&#160;input_data_preprocessor.sql_in']]],
+  ['vcrf_5flabel',['vcrf_label',['../viterbi_8sql__in.html#a05e8e687442b8f8618738d34010ef68d',1,'viterbi.sql_in']]],
+  ['vcrf_5ftop1_5flabel',['vcrf_top1_label',['../viterbi_8sql__in.html#a77b62d01f74a7bd206f6954c82638ba7',1,'viterbi.sql_in']]],
+  ['vcrf_5ftop1_5ftable',['vcrf_top1_table',['../viterbi_8sql__in.html#a1471ce51491126b282ed8f9a2ac38b25',1,'viterbi.sql_in']]],
+  ['vec2cols',['vec2cols',['../vec2cols_8sql__in.html#a16ccd7c8ea4219f09c21669eec2cfa79',1,'vec2cols(varchar source_table, varchar output_table, varchar vector_col, text[] feature_names, varchar cols_to_output):&#160;vec2cols.sql_in'],['../vec2cols_8sql__in.html#ad5301b7891fce8b67694bff87ddeff8e',1,'vec2cols(varchar source_table, varchar output_table, varchar vector_col, text[] feature_names):&#160;vec2cols.sql_in'],['../vec2cols_8sql__in.html#afc12dfff08f41b69bed5c6e58077740e',1,'vec2cols(varchar source_table, varchar output_table, varchar vector_col):&#160;vec2cols.sql_in'],['../vec2cols_8sql__in.html#adee606a1ca337cb570f3201d73ddadd2',1,'vec2cols(text message):&#160;vec2cols.sql_in'],['../vec2cols_8sql__in.html#a8067109fe47944b49167477577d02be9',1,'vec2cols():&#160;vec2cols.sql_in']]],
+  ['vectorized_5fdistribution_5fagg',['vectorized_distribution_agg',['../distribution_8sql__in.html#aa4608a56578c7e93615e6d5b558d0bf9',1,'distribution.sql_in']]],
+  ['vectorized_5fdistribution_5ffinal',['vectorized_distribution_final',['../distribution_8sql__in.html#a6bca924e0d2a49b101253f3ca9dc4a58',1,'distribution.sql_in']]],
+  ['vectorized_5fdistribution_5ftransition',['vectorized_distribution_transition',['../distribution_8sql__in.html#abc7f8816bbdb1467435e5ba17a7d08f1',1,'distribution.sql_in']]],
+  ['version',['version',['../utilities_8sql__in.html#a9ce7ffa76acc8a0638e9bc48be99f36a',1,'utilities.sql_in']]]
+];
diff --git a/docs/rc/search/functions_15.html b/docs/rc/search/functions_15.html
new file mode 100644
index 0000000..0f002b8
--- /dev/null
+++ b/docs/rc/search/functions_15.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_15.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/functions_15.js b/docs/rc/search/functions_15.js
new file mode 100644
index 0000000..f4f02aa
--- /dev/null
+++ b/docs/rc/search/functions_15.js
@@ -0,0 +1,16 @@
+var searchData=
+[
+  ['weakly_5fconnected_5fcomponents',['weakly_connected_components',['../wcc_8sql__in.html#ae2d66cd44d34032a9dc2490a16a326cf',1,'weakly_connected_components(text vertex_table, text vertex_id, text edge_table, text edge_args, text out_table, text grouping_cols):&#160;wcc.sql_in'],['../wcc_8sql__in.html#ab7053bc632d2787710670c7bfca78342',1,'weakly_connected_components(text vertex_table, text vertex_id, text edge_table, text edge_args, text out_table):&#160;wcc.sql_in'],['../wcc_8sql__in.html#a608342c0de3500047eefa84f4a9b641f',1,'weakly_connected_components(varchar message):&#160;wcc.sql_in'],['../wcc_8sql__in.html#a7332b4233d558fdbd65f8b1f4c229536',1,'weakly_connected_components():&#160;wcc.sql_in']]],
+  ['weibull_5fcdf',['weibull_cdf',['../prob_8sql__in.html#a50e4a1883588cd7a4c1ff1017399e4af',1,'prob.sql_in']]],
+  ['weibull_5fpdf',['weibull_pdf',['../prob_8sql__in.html#a81a876ae2b8598f060dadb179b9324d2',1,'prob.sql_in']]],
+  ['weibull_5fquantile',['weibull_quantile',['../prob_8sql__in.html#aa544631ddeb7a5c06b995b4383c3b612',1,'prob.sql_in']]],
+  ['weighted_5fsample',['weighted_sample',['../sample_8sql__in.html#ab933c8334edc748aa9ef46b9bb50e60e',1,'weighted_sample(bigint value, float8 weight):&#160;sample.sql_in'],['../sample_8sql__in.html#aa650ad075377cec7c6e1ece37c2b55b0',1,'weighted_sample(float8[] value, float8 weight):&#160;sample.sql_in']]],
+  ['weighted_5fsample_5ffinal_5fint64',['weighted_sample_final_int64',['../sample_8sql__in.html#a5c2226995c3ef02cb2320b9829bad5eb',1,'sample.sql_in']]],
+  ['weighted_5fsample_5ffinal_5fvector',['weighted_sample_final_vector',['../sample_8sql__in.html#a8b2b3bb57b01f47bafe44bea73f39f78',1,'sample.sql_in']]],
+  ['weighted_5fsample_5fmerge_5fint64',['weighted_sample_merge_int64',['../sample_8sql__in.html#aa066d40345787e00819963f095f40998',1,'sample.sql_in']]],
+  ['weighted_5fsample_5fmerge_5fvector',['weighted_sample_merge_vector',['../sample_8sql__in.html#ac5d00ff9e30dcae8a1b6b8450df3e95e',1,'sample.sql_in']]],
+  ['weighted_5fsample_5ftransition_5fint64',['weighted_sample_transition_int64',['../sample_8sql__in.html#af933c6e9d6623c62a671dc74e5bd9d51',1,'sample.sql_in']]],
+  ['weighted_5fsample_5ftransition_5fvector',['weighted_sample_transition_vector',['../sample_8sql__in.html#ae7ad8a80a8c2508cc54cf496934017c2',1,'sample.sql_in']]],
+  ['wsr_5ftest_5ffinal',['wsr_test_final',['../hypothesis__tests_8sql__in.html#a8f0431ace27ac78e9e1df9906f1f1c33',1,'hypothesis_tests.sql_in']]],
+  ['wsr_5ftest_5ftransition',['wsr_test_transition',['../hypothesis__tests_8sql__in.html#a0d85654832dfa961cd13526c052642f3',1,'wsr_test_transition(float8[] state, float8 value, float8 precision):&#160;hypothesis_tests.sql_in'],['../hypothesis__tests_8sql__in.html#a4093de00ab033f4900ce186d481fa012',1,'wsr_test_transition(float8[] state, float8 value):&#160;hypothesis_tests.sql_in']]]
+];
diff --git a/docs/rc/search/functions_16.html b/docs/rc/search/functions_16.html
new file mode 100644
index 0000000..28a5025
--- /dev/null
+++ b/docs/rc/search/functions_16.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_16.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/functions_16.js b/docs/rc/search/functions_16.js
new file mode 100644
index 0000000..9437325
--- /dev/null
+++ b/docs/rc/search/functions_16.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['zph_5fagg',['zph_agg',['../cox__prop__hazards_8sql__in.html#a91e1a4b2a2d13454f9e65dd3d40a329b',1,'cox_prop_hazards.sql_in']]]
+];
diff --git a/docs/rc/search/functions_2.html b/docs/rc/search/functions_2.html
new file mode 100644
index 0000000..ecce2f3
--- /dev/null
+++ b/docs/rc/search/functions_2.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_2.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/functions_2.js b/docs/rc/search/functions_2.js
new file mode 100644
index 0000000..667c85a
--- /dev/null
+++ b/docs/rc/search/functions_2.js
@@ -0,0 +1,20 @@
+var searchData=
+[
+  ['balance_5fsample',['balance_sample',['../balance__sample_8sql__in.html#a784a10b3aba906635e6e3b1ec8dd7f78',1,'balance_sample(text source_table, text output_table, text class_col, varchar class_sizes, integer output_table_size, text grouping_cols, boolean with_replacement, boolean keep_null):&#160;balance_sample.sql_in'],['../balance__sample_8sql__in.html#a03241df3f6930c0bc0a784edb3d51e09',1,'balance_sample(text source_table, text output_table, text class_col, varchar class_sizes, integer output_table_size, text grouping_cols, boolean with_replacement):&#160;balance_sample.sql_in'],['../balance__sample_8sql__in.html#a257836db4a9f9f8dbc16f96d80b16218',1,'balance_sample(text source_table, text output_table, text class_col, varchar class_sizes, integer output_table_size, text grouping_cols):&#160;balance_sample.sql_in'],['../balance__sample_8sql__in.html#a5a37e006e61355fa804164a42430dc38',1,'balance_sample(text source_table, text output_table, text class_col, varchar class_sizes, integer output_table_size):&#160;balance_sample.sql_in'],['../balance__sample_8sql__in.html#ae968393f98279747bd1ef13f8359856d',1,'balance_sample(text source_table, text output_table, text class_col, varchar class_sizes):&#160;balance_sample.sql_in'],['../balance__sample_8sql__in.html#ac384701cfb2653e0ce4ac2bcf54a7980',1,'balance_sample(text source_table, text output_table, text class_col):&#160;balance_sample.sql_in'],['../balance__sample_8sql__in.html#a850769c45d8925743edcf4125b148524',1,'balance_sample(varchar message):&#160;balance_sample.sql_in'],['../balance__sample_8sql__in.html#a3836a8987b2d9b4b8a21ce09bb7ef441',1,'balance_sample():&#160;balance_sample.sql_in']]],
+  ['bernoulli_5fcdf',['bernoulli_cdf',['../prob_8sql__in.html#aea21a931dc5578a570e3370af3d8d43a',1,'prob.sql_in']]],
+  ['bernoulli_5fpmf',['bernoulli_pmf',['../prob_8sql__in.html#a434b3ad1f3964835834dc2a942b820ef',1,'prob.sql_in']]],
+  ['bernoulli_5fquantile',['bernoulli_quantile',['../prob_8sql__in.html#a7133c2e86fd2f6384416ee0e4fd3a60b',1,'prob.sql_in']]],
+  ['beta_5fcdf',['beta_cdf',['../prob_8sql__in.html#a72e1cca872da35592075dbcfb18aed3f',1,'prob.sql_in']]],
+  ['beta_5fpdf',['beta_pdf',['../prob_8sql__in.html#aa105049e6e3bb9b3891b0ed1b343e28e',1,'prob.sql_in']]],
+  ['beta_5fquantile',['beta_quantile',['../prob_8sql__in.html#a32433aa742c0504d33e98e28a3e2f190',1,'prob.sql_in']]],
+  ['big_5for',['big_or',['../sketch_8sql__in.html#a335fba86bbb3fb5a3284808cc64b8f16',1,'sketch.sql_in']]],
+  ['binary_5fclassifier',['binary_classifier',['../pred__metrics_8sql__in.html#aedc849fa15c7c788cf17bb74244082a0',1,'binary_classifier(text table_in, text table_out, text prediction_col, text observed_col, text grouping_cols):&#160;pred_metrics.sql_in'],['../pred__metrics_8sql__in.html#a41dff9da82f7a1a421ed58f183eb6651',1,'binary_classifier(text table_in, text table_out, text prediction_col, text observed_col):&#160;pred_metrics.sql_in'],['../pred__metrics_8sql__in.html#afe32ecfa017b25b544654bf3c5836efc',1,'binary_classifier(text message):&#160;pred_metrics.sql_in'],['../pred__metrics_8sql__in.html#a1687dbb9561ff60738a1549a37c1fe73',1,'binary_classifier():&#160;pred_metrics.sql_in']]],
+  ['binomial_5fcdf',['binomial_cdf',['../prob_8sql__in.html#aa5000bad6e2e4af1c8cbfec7ea884476',1,'prob.sql_in']]],
+  ['binomial_5fpmf',['binomial_pmf',['../prob_8sql__in.html#aa0614475b8685bf8e37533d2ac5bb116',1,'prob.sql_in']]],
+  ['binomial_5fquantile',['binomial_quantile',['../prob_8sql__in.html#a49f421c58d2e1abd63b83d71af9edf21',1,'prob.sql_in']]],
+  ['bool_5fto_5ftext',['bool_to_text',['../utilities_8sql__in.html#abc867482053e6692047d051b679953a5',1,'utilities.sql_in']]],
+  ['bytea8in',['bytea8in',['../utilities_8sql__in.html#a60c4765ce8dc639cbb0ad4c389f5f1ad',1,'utilities.sql_in']]],
+  ['bytea8out',['bytea8out',['../utilities_8sql__in.html#adff923d42d4bdb2b631d6cafd5f37a43',1,'utilities.sql_in']]],
+  ['bytea8recv',['bytea8recv',['../utilities_8sql__in.html#a244a7ff30f2788a6f4816417982eb13b',1,'utilities.sql_in']]],
+  ['bytea8send',['bytea8send',['../utilities_8sql__in.html#aeb90c740e8e6b67aa60a11c430fa9050',1,'utilities.sql_in']]]
+];
diff --git a/docs/rc/search/functions_3.html b/docs/rc/search/functions_3.html
new file mode 100644
index 0000000..15f06ab
--- /dev/null
+++ b/docs/rc/search/functions_3.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_3.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/functions_3.js b/docs/rc/search/functions_3.js
new file mode 100644
index 0000000..d63322f
--- /dev/null
+++ b/docs/rc/search/functions_3.js
@@ -0,0 +1,84 @@
+var searchData=
+[
+  ['cauchy_5fcdf',['cauchy_cdf',['../prob_8sql__in.html#a2d8874c2a5679403a473bfedb14467a4',1,'prob.sql_in']]],
+  ['cauchy_5fpdf',['cauchy_pdf',['../prob_8sql__in.html#aebfad9365a7fc7a553c3b5c7931f2450',1,'prob.sql_in']]],
+  ['cauchy_5fquantile',['cauchy_quantile',['../prob_8sql__in.html#ae8aa9b741e89c8d9236a682d218006e0',1,'prob.sql_in']]],
+  ['check_5fif_5fcol_5fexists',['check_if_col_exists',['../utilities_8sql__in.html#ac1f509bd94c6309b59eb4d479fb2a470',1,'utilities.sql_in']]],
+  ['check_5fif_5fraises_5ferror',['check_if_raises_error',['../utilities_8sql__in.html#aa90ffaebb43a5cbcb5c48281cbadd3b0',1,'utilities.sql_in']]],
+  ['chi2_5fgof_5ftest',['chi2_gof_test',['../hypothesis__tests_8sql__in.html#a4c912b329fb103a44253932a653d4e40',1,'chi2_gof_test(bigint observed, float8 expected=1, bigint df=0):&#160;hypothesis_tests.sql_in'],['../hypothesis__tests_8sql__in.html#a09a8ed9d073f8c43d9ade3cf2defb2b0',1,'chi2_gof_test(bigint observed, float8 expected):&#160;hypothesis_tests.sql_in'],['../hypothesis__tests_8sql__in.html#a13730efbff97aa5624a350135a9b83ff',1,'chi2_gof_test(bigint observed):&#160;hypothesis_tests.sql_in']]],
+  ['chi2_5fgof_5ftest_5ffinal',['chi2_gof_test_final',['../hypothesis__tests_8sql__in.html#a61c31dfde998db18afd6552239b872c4',1,'hypothesis_tests.sql_in']]],
+  ['chi2_5fgof_5ftest_5fmerge_5fstates',['chi2_gof_test_merge_states',['../hypothesis__tests_8sql__in.html#a2b8265718a16ec65e89d2ab512f6a3e1',1,'hypothesis_tests.sql_in']]],
+  ['chi2_5fgof_5ftest_5ftransition',['chi2_gof_test_transition',['../hypothesis__tests_8sql__in.html#a7c580537666776f1bd4b9d4a0a6b6438',1,'chi2_gof_test_transition(float8[] state, bigint observed, float8 expected, bigint df):&#160;hypothesis_tests.sql_in'],['../hypothesis__tests_8sql__in.html#ab4b83895c48dd1c1ca2e106b15741868',1,'chi2_gof_test_transition(float8[] state, bigint observed, float8 expected):&#160;hypothesis_tests.sql_in'],['../hypothesis__tests_8sql__in.html#a66d03891a6add6d67f944df5344ed40e',1,'chi2_gof_test_transition(float8[] state, bigint observed):&#160;hypothesis_tests.sql_in']]],
+  ['chi_5fsquared_5fcdf',['chi_squared_cdf',['../prob_8sql__in.html#a230513b6b549d5b445cbacbdbab42c15',1,'prob.sql_in']]],
+  ['chi_5fsquared_5fpdf',['chi_squared_pdf',['../prob_8sql__in.html#a90bccc717d7052e83bafd7f160a783b1',1,'prob.sql_in']]],
+  ['chi_5fsquared_5fquantile',['chi_squared_quantile',['../prob_8sql__in.html#ad125307fe65a33b60f6dd524037d4548',1,'prob.sql_in']]],
+  ['cleanup_5fmadlib_5ftemp_5ftables',['cleanup_madlib_temp_tables',['../utilities_8sql__in.html#aab5ea2cd6201e38e24ca62b0fb91fb7a',1,'utilities.sql_in']]],
+  ['cleanup_5fmadlib_5ftemp_5ftables_5fscript',['cleanup_madlib_temp_tables_script',['../utilities_8sql__in.html#a156eb9d1c814592e59600980977a64eb',1,'utilities.sql_in']]],
+  ['cleanup_5fmadlib_5ftemp_5fviews',['cleanup_madlib_temp_views',['../utilities_8sql__in.html#a0a26602860109f870a82badff95c2fc3',1,'utilities.sql_in']]],
+  ['closest_5fcolumn',['closest_column',['../linalg_8sql__in.html#acf6628dfa4d73dfce65a582aa5c5a3db',1,'closest_column(float8[] m, float8[] x, regproc dist=&quot;squared_dist_norm2&quot;):&#160;linalg.sql_in'],['../linalg_8sql__in.html#a31c8d60f9a631c27f5f91964e0108da9',1,'closest_column(float8[] m, float8[] x):&#160;linalg.sql_in']]],
+  ['closest_5fcolumns',['closest_columns',['../linalg_8sql__in.html#ad864339591086b635d12015db993b5bc',1,'closest_columns(float8[] m, float8[] x, integer num, regproc dist):&#160;linalg.sql_in'],['../linalg_8sql__in.html#aa5da5470cc84963a059714faa238a07d',1,'closest_columns(float8[] m, float8[] x, integer num):&#160;linalg.sql_in']]],
+  ['clustered_5fvariance_5fcoxph',['clustered_variance_coxph',['../clustered__variance__coxph_8sql__in.html#a91f46572f245f34c9fe92d0ec806a998',1,'clustered_variance_coxph():&#160;clustered_variance_coxph.sql_in'],['../clustered__variance__coxph_8sql__in.html#a9e6c0f27cb3ba9ad583055c96c847795',1,'clustered_variance_coxph(varchar message):&#160;clustered_variance_coxph.sql_in'],['../clustered__variance__coxph_8sql__in.html#acc0a2119671931eea54e021a4db6168c',1,'clustered_variance_coxph(text model_table, text output_table, text clustervar):&#160;clustered_variance_coxph.sql_in']]],
+  ['clustered_5fvariance_5flinregr',['clustered_variance_linregr',['../clustered__variance_8sql__in.html#abaa6702a3482f65199ce64b8a14316d7',1,'clustered_variance_linregr(text source_table, text out_table, text depvar, text indvar, text clustervar, text grouping_col):&#160;clustered_variance.sql_in'],['../clustered__variance_8sql__in.html#adb6227023444552a37f3ea52502b1c37',1,'clustered_variance_linregr(text source_table, text out_table, text depvar, text indvar, text clustervar):&#160;clustered_variance.sql_in'],['../clustered__variance_8sql__in.html#a0548d26efc4f0b22c41516dabcd7d32b',1,'clustered_variance_linregr():&#160;clustered_variance.sql_in'],['../clustered__variance_8sql__in.html#ade1843a5cf8c7c72fb1aae07d82d5a4e',1,'clustered_variance_linregr(text msg):&#160;clustered_variance.sql_in']]],
+  ['clustered_5fvariance_5flogregr',['clustered_variance_logregr',['../clustered__variance_8sql__in.html#a0debc923b0494f8259938d9c6f5cdbcd',1,'clustered_variance_logregr(text source_table, text out_table, text depvar, text indvar, text clustervar, text grouping_col, integer max_iter, text optimizer, float8 tolerance, boolean verbose_mode):&#160;clustered_variance.sql_in'],['../clustered__variance_8sql__in.html#a5d526752e92cbe1282bf581c49f9c31c',1,'clustered_variance_logregr(text source_table, text out_table, text depvar, text indvar, text clustervar):&#160;clustered_variance.sql_in'],['../clustered__variance_8sql__in.html#ab060fb03fdcab9e702024eee940ba61c',1,'clustered_variance_logregr(text source_table, text out_table, text depvar, text indvar, text clustervar, text grouping_col):&#160;clustered_variance.sql_in'],['../clustered__variance_8sql__in.html#ab58eebaf13ef21e59e50362fe9ad658f',1,'clustered_variance_logregr(text source_table, text out_table, text depvar, text indvar, text clustervar, text grouping_col, integer max_iter):&#160;clustered_variance.sql_in'],['../clustered__variance_8sql__in.html#a8d8bd2b7d26981e7de10597222d99f7c',1,'clustered_variance_logregr(text source_table, text out_table, text depvar, text indvar, text clustervar, text grouping_col, integer max_iter, text optimizer):&#160;clustered_variance.sql_in'],['../clustered__variance_8sql__in.html#a5c10605246186fc87442274b66948f52',1,'clustered_variance_logregr(text source_table, text out_table, text depvar, text indvar, text clustervar, text grouping_col, integer max_iter, text optimizer, float8 tolerance):&#160;clustered_variance.sql_in'],['../clustered__variance_8sql__in.html#a3d702174c793b0c4afc5453d553f0e29',1,'clustered_variance_logregr():&#160;clustered_variance.sql_in'],['../clustered__variance_8sql__in.html#a4450b02e72471fa85f441b9abdc65ff8',1,'clustered_variance_logregr(text msg):&#160;clustered_variance.sql_in']]],
+  ['clustered_5fvariance_5fmlogregr',['clustered_variance_mlogregr',['../clustered__variance_8sql__in.html#aa72cfa6f9259cceea3e36b6db45a7624',1,'clustered_variance_mlogregr(text source_table, text out_table, text dependent_varname, text independent_varname, text cluster_varname, integer ref_category, text grouping_cols, text optimizer_params, boolean verbose_mode):&#160;clustered_variance.sql_in'],['../clustered__variance_8sql__in.html#ac614f56394b00ad9286c7c83a060b079',1,'clustered_variance_mlogregr(text source_table, text out_table, text dependent_varname, text independent_varname, text cluster_varname, integer ref_category, text grouping_cols, text optimizer_params):&#160;clustered_variance.sql_in'],['../clustered__variance_8sql__in.html#a201adea876fbcf7f0d18685d0ae44ffb',1,'clustered_variance_mlogregr(text source_table, text out_table, text dependent_varname, text independent_varname, text cluster_varname, integer ref_category, text grouping_cols):&#160;clustered_variance.sql_in'],['../clustered__variance_8sql__in.html#a7b2f2f1cc814cecb5b62bf28615fa8fe',1,'clustered_variance_mlogregr(text source_table, text out_table, text dependent_varname, text independent_varname, text cluster_varname, integer ref_category):&#160;clustered_variance.sql_in'],['../clustered__variance_8sql__in.html#a6438de2e98e86468ab741ee3c3b337da',1,'clustered_variance_mlogregr(text source_table, text out_table, text dependent_varname, text independent_varname, text cluster_varname):&#160;clustered_variance.sql_in'],['../clustered__variance_8sql__in.html#a7b55f727b8beea7cf06c1561bbffb6ca',1,'clustered_variance_mlogregr():&#160;clustered_variance.sql_in'],['../clustered__variance_8sql__in.html#a133a97d8eee41ed57ed0b16a592774e4',1,'clustered_variance_mlogregr(text msg):&#160;clustered_variance.sql_in'],['../clustered__variance_8sql__in.html#ab6a6297525bcd589311d7e085b830123',1,'clustered_variance_mlogregr(text source_table, text out_table, text dependent_varname, text independent_varname, text cluster_varname, integer ref_category, text grouping_cols, integer max_iter, varchar optimizer, float8 tolerance, boolean verbose_mode):&#160;clustered_variance.sql_in'],['../clustered__variance_8sql__in.html#aa864a6c22942e33348725c6cf5a79a14',1,'clustered_variance_mlogregr(text source_table, text out_table, text dependent_varname, text independent_varname, text cluster_varname, integer ref_category, text grouping_cols, integer max_iter, varchar optimizer, float8 tolerance):&#160;clustered_variance.sql_in'],['../clustered__variance_8sql__in.html#adec204a306e05ef8506b3b03e8e37ba3',1,'clustered_variance_mlogregr(text source_table, text out_table, text dependent_varname, text independent_varname, text cluster_varname, integer ref_category, text grouping_cols, integer max_iter, varchar optimizer):&#160;clustered_variance.sql_in'],['../clustered__variance_8sql__in.html#a7d90589980d2779a149a81513bab79e9',1,'clustered_variance_mlogregr(text source_table, text out_table, text dependent_varname, text independent_varname, text cluster_varname, integer ref_category, text grouping_cols, integer max_iter):&#160;clustered_variance.sql_in']]],
+  ['cmsketch',['cmsketch',['../sketch_8sql__in.html#ae6671bfb7474db7d8b5c9dada29f36ab',1,'sketch.sql_in']]],
+  ['cmsketch_5fcentile',['cmsketch_centile',['../sketch_8sql__in.html#a2f2ab2fe3244515f5f73d49690e73b39',1,'sketch.sql_in']]],
+  ['cmsketch_5fcount',['cmsketch_count',['../sketch_8sql__in.html#a3498d2c778d1289154f61d34e84c609e',1,'sketch.sql_in']]],
+  ['cmsketch_5fdepth_5fhistogram',['cmsketch_depth_histogram',['../sketch_8sql__in.html#a9e6d30f20b724b96249cc4a0f67a279e',1,'sketch.sql_in']]],
+  ['cmsketch_5fmedian',['cmsketch_median',['../sketch_8sql__in.html#a0ef6428fa7ba4b7f7b1f633e6f8003ea',1,'sketch.sql_in']]],
+  ['cmsketch_5frangecount',['cmsketch_rangecount',['../sketch_8sql__in.html#aeff9e36cfb3338c4e405d4ac77d3968c',1,'sketch.sql_in']]],
+  ['cmsketch_5fwidth_5fhistogram',['cmsketch_width_histogram',['../sketch_8sql__in.html#a8482f62849adf40a2c7df78c23ea33a4',1,'sketch.sql_in']]],
+  ['cols2vec',['cols2vec',['../cols2vec_8sql__in.html#ae8b2fa9bc82ffb1ed0ca970803dca07a',1,'cols2vec(varchar source_table, varchar output_table, varchar list_of_features, varchar list_of_features_to_exclude, varchar cols_to_output):&#160;cols2vec.sql_in'],['../cols2vec_8sql__in.html#aa8faa742795f4084309c9a87bc2e8c83',1,'cols2vec(varchar source_table, varchar output_table, varchar list_of_features, varchar list_of_features_to_exclude):&#160;cols2vec.sql_in'],['../cols2vec_8sql__in.html#a5b9abee9bb093b05b1e4d4c67ad81126',1,'cols2vec(varchar source_table, varchar output_table, varchar list_of_features):&#160;cols2vec.sql_in'],['../cols2vec_8sql__in.html#a68b12d4f57f8ba33643b698c7ccb98c5',1,'cols2vec(text message):&#160;cols2vec.sql_in'],['../cols2vec_8sql__in.html#a116d49e418babfcc6a93e75f79154d66',1,'cols2vec():&#160;cols2vec.sql_in']]],
+  ['compute_5fcoxph_5fresult',['compute_coxph_result',['../cox__prop__hazards_8sql__in.html#a74fe60f99c3808e38421c71286850ea8',1,'cox_prop_hazards.sql_in']]],
+  ['compute_5flincrf',['compute_lincrf',['../crf_8sql__in.html#a20c096420d878cdd66dac6a232483737',1,'crf.sql_in']]],
+  ['confusion_5fmatrix',['confusion_matrix',['../pred__metrics_8sql__in.html#a3a6234adcb53ff4f77620774f0c7c054',1,'confusion_matrix(text table_in, text table_out, text prediction_col, text observed_col):&#160;pred_metrics.sql_in'],['../pred__metrics_8sql__in.html#ad66709b77e74920ee9711cda1617a273',1,'confusion_matrix(text message):&#160;pred_metrics.sql_in'],['../pred__metrics_8sql__in.html#aa70c6d5ca1ac9d4e6504f15f6b19a9e4',1,'confusion_matrix():&#160;pred_metrics.sql_in']]],
+  ['conjugate_5fgradient',['conjugate_gradient',['../conjugate__gradient_8sql__in.html#ab94e8a12cc9c2d0dac35168721ec8585',1,'conjugate_gradient(text matrix, text val_id, text row_id, float[] b, float precision_limit, int verbosity):&#160;conjugate_gradient.sql_in'],['../conjugate__gradient_8sql__in.html#abe53a640e2287e06587eb1541fb6b4a3',1,'conjugate_gradient(text matrix, text val_id, text row_id, float[] b, float precision_limit):&#160;conjugate_gradient.sql_in']]],
+  ['convert_5farray_5fto_5fbytea',['convert_array_to_bytea',['../input__data__preprocessor_8sql__in.html#adddc008fc86a92a0ffa8ce2875fff6e0',1,'convert_array_to_bytea(real[] var):&#160;input_data_preprocessor.sql_in'],['../input__data__preprocessor_8sql__in.html#a81d7da93a6e2ed7cd1c8407b259f7258',1,'convert_array_to_bytea(smallint[] var):&#160;input_data_preprocessor.sql_in']]],
+  ['convert_5fbytea_5fto_5freal_5farray',['convert_bytea_to_real_array',['../input__data__preprocessor_8sql__in.html#a3ce0821912d0e1256816881607d3bfc9',1,'input_data_preprocessor.sql_in']]],
+  ['convert_5fbytea_5fto_5fsmallint_5farray',['convert_bytea_to_smallint_array',['../input__data__preprocessor_8sql__in.html#a38e811354ec1793a7126dfe38e4cd086',1,'input_data_preprocessor.sql_in']]],
+  ['correlation',['correlation',['../correlation_8sql__in.html#a91bb3c218f470e1184a1c16b66307393',1,'correlation(varchar source_table, varchar output_table, varchar target_cols, boolean verbose, varchar grouping_cols, integer n_groups_per_run):&#160;correlation.sql_in'],['../correlation_8sql__in.html#a23198d24ba486323eea49bb2ef97ddb8',1,'correlation(varchar source_table, varchar output_table, varchar target_cols, boolean verbose, varchar grouping_cols):&#160;correlation.sql_in'],['../correlation_8sql__in.html#ada17a10ea8a6c4580e7413c86ae5345e',1,'correlation(varchar source_table, varchar output_table, varchar target_cols, boolean verbose):&#160;correlation.sql_in'],['../correlation_8sql__in.html#a30437d71937df60681be42769d5d3a29',1,'correlation(varchar source_table, varchar output_table, varchar target_cols):&#160;correlation.sql_in'],['../correlation_8sql__in.html#a79c79a64e2145e640e410d8ebae078f7',1,'correlation(varchar source_table, varchar output_table):&#160;correlation.sql_in'],['../correlation_8sql__in.html#a703be245d20fa6ac1cc1ae433f08c4eb',1,'correlation(text input_message):&#160;correlation.sql_in'],['../correlation_8sql__in.html#ad81ac0ea4b9675fe257b2f5c2cee385e',1,'correlation():&#160;correlation.sql_in']]],
+  ['correlation_5fagg',['correlation_agg',['../correlation_8sql__in.html#a1c3081444f6bafc88a9b377f2af32968',1,'correlation.sql_in']]],
+  ['correlation_5ffinal',['correlation_final',['../correlation_8sql__in.html#a85a1a9b0ae5e608fd235f08ae01ff966',1,'correlation.sql_in']]],
+  ['correlation_5fmerge',['correlation_merge',['../correlation_8sql__in.html#ac53cf4dd28185715a1798176bce44b1b',1,'correlation.sql_in']]],
+  ['correlation_5ftransition',['correlation_transition',['../correlation_8sql__in.html#ae6223d0ba3e2b8a2d298ee78a293be6a',1,'correlation.sql_in']]],
+  ['cosine_5fsimilarity',['cosine_similarity',['../linalg_8sql__in.html#a1782f2ba00d9f9fab20894a576079f87',1,'linalg.sql_in']]],
+  ['covariance',['covariance',['../correlation_8sql__in.html#afee4f63248d2030dbc7ee37697e3c7e1',1,'covariance(varchar source_table, varchar output_table, varchar target_cols, boolean verbose, varchar grouping_cols, integer n_groups_per_run):&#160;correlation.sql_in'],['../correlation_8sql__in.html#ab2b75724c8361482265991e13f0f34e9',1,'covariance(varchar source_table, varchar output_table, varchar target_cols, boolean verbose, varchar grouping_cols):&#160;correlation.sql_in'],['../correlation_8sql__in.html#aa962df7076b6a57914e766c8ab4fea78',1,'covariance(varchar source_table, varchar output_table, varchar target_cols, boolean verbose):&#160;correlation.sql_in'],['../correlation_8sql__in.html#a63aaa72fa4a4003a4b92b0b46eb69e00',1,'covariance(varchar source_table, varchar output_table, varchar target_cols):&#160;correlation.sql_in'],['../correlation_8sql__in.html#ada9ca243ead62cda1ec4faf8940e9b52',1,'covariance(varchar source_table, varchar output_table):&#160;correlation.sql_in'],['../correlation_8sql__in.html#a986c54ff5cc92d3d530b494a8ee6f112',1,'covariance(text input_message):&#160;correlation.sql_in'],['../correlation_8sql__in.html#a3ef3717dbd8916187ea111b933a52470',1,'covariance():&#160;correlation.sql_in']]],
+  ['covariance_5fagg',['covariance_agg',['../correlation_8sql__in.html#a5c4f4adaf75fe3406bf1d0a20f8512ac',1,'correlation.sql_in']]],
+  ['cox_5fprop_5fhazards',['cox_prop_hazards',['../cox__prop__hazards_8sql__in.html#ad778b289eb19ae0bb2b7e02a89bab3bc',1,'cox_prop_hazards(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, varchar status):&#160;cox_prop_hazards.sql_in'],['../cox__prop__hazards_8sql__in.html#a5e52f9a98bce4ec74230eb95c95e68c4',1,'cox_prop_hazards(varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable):&#160;cox_prop_hazards.sql_in'],['../cox__prop__hazards_8sql__in.html#a03909f1c14894303fca80ea8503ae7f0',1,'cox_prop_hazards(varchar usage_string):&#160;cox_prop_hazards.sql_in'],['../cox__prop__hazards_8sql__in.html#af92ac384ab346034dc42a4049613a47a',1,'cox_prop_hazards():&#160;cox_prop_hazards.sql_in']]],
+  ['cox_5fprop_5fhazards_5fregr',['cox_prop_hazards_regr',['../cox__prop__hazards_8sql__in.html#a3310cf98478b7c1e400e8fb1b3965d30',1,'cox_prop_hazards_regr(varchar source, varchar indepColumn, varchar depColumn, varchar status, integer maxNumIterations=20, varchar optimizer=&quot;newton&quot;, float8 precision=0.0001):&#160;cox_prop_hazards.sql_in'],['../cox__prop__hazards_8sql__in.html#a79ca0bbf1a3a5c1f83ede9596d4b43cc',1,'cox_prop_hazards_regr(varchar source, varchar indepColumn, varchar depColumn, varchar status):&#160;cox_prop_hazards.sql_in'],['../cox__prop__hazards_8sql__in.html#a217c18984301c16b39a6deffa8c677df',1,'cox_prop_hazards_regr(varchar source, varchar indepColumn, varchar depColumn, varchar status, integer maxNumIterations):&#160;cox_prop_hazards.sql_in'],['../cox__prop__hazards_8sql__in.html#a6508b2b2b8e0b6a0d0027c3d8b487df8',1,'cox_prop_hazards_regr(varchar source, varchar indepColumn, varchar depColumn, varchar status, integer maxNumIterations, varchar optimizer):&#160;cox_prop_hazards.sql_in']]],
+  ['cox_5fzph',['cox_zph',['../cox__prop__hazards_8sql__in.html#a682d95d5475ce33e47937067cadc2766',1,'cox_zph(varchar coxph_model_table, varchar output_table):&#160;cox_prop_hazards.sql_in'],['../cox__prop__hazards_8sql__in.html#aad77f665f0030202444e99f5a0b895d3',1,'cox_zph():&#160;cox_prop_hazards.sql_in'],['../cox__prop__hazards_8sql__in.html#af3aee9274235a9a44511e8cc57f15bcb',1,'cox_zph(varchar message):&#160;cox_prop_hazards.sql_in']]],
+  ['coxph_5fa_5fb',['coxph_a_b',['../clustered__variance__coxph_8sql__in.html#a5f5ca89e3265e170c325125e61ef191d',1,'clustered_variance_coxph.sql_in']]],
+  ['coxph_5fa_5fb_5ffinal',['coxph_a_b_final',['../clustered__variance__coxph_8sql__in.html#a2373d116ad1e2b2090f8c23a0c15edb5',1,'clustered_variance_coxph.sql_in']]],
+  ['coxph_5fa_5fb_5fmerge',['coxph_a_b_merge',['../clustered__variance__coxph_8sql__in.html#a62bff141ced5972df28ceecdfe522888',1,'clustered_variance_coxph.sql_in']]],
+  ['coxph_5fa_5fb_5ftransition',['coxph_a_b_transition',['../clustered__variance__coxph_8sql__in.html#a7081022015c00a14ecca27e017a4458b',1,'clustered_variance_coxph.sql_in']]],
+  ['coxph_5fcompute_5fclustered_5fstats',['coxph_compute_clustered_stats',['../clustered__variance__coxph_8sql__in.html#a713f413fc571244b7cec6c0084a61eb9',1,'clustered_variance_coxph.sql_in']]],
+  ['coxph_5fcompute_5fw',['coxph_compute_w',['../clustered__variance__coxph_8sql__in.html#a523e61b6d56c8ff59fa8ae3121073a49',1,'clustered_variance_coxph.sql_in']]],
+  ['coxph_5fh_5fs',['coxph_h_s',['../robust__variance__coxph_8sql__in.html#a2743e0cecadd7f3fa2a16f9d7d40564b',1,'robust_variance_coxph.sql_in']]],
+  ['coxph_5fh_5fs_5ffinal',['coxph_h_s_final',['../robust__variance__coxph_8sql__in.html#aeb95cacc36c5d6c8cc25c8d37418c71b',1,'robust_variance_coxph.sql_in']]],
+  ['coxph_5fh_5fs_5fmerge',['coxph_h_s_merge',['../robust__variance__coxph_8sql__in.html#ab122003102dd22274a76aa1a830c69dd',1,'robust_variance_coxph.sql_in']]],
+  ['coxph_5fh_5fs_5ftransition',['coxph_h_s_transition',['../robust__variance__coxph_8sql__in.html#a03a39bc1fee64cd9b8b6a373758819da',1,'robust_variance_coxph.sql_in']]],
+  ['coxph_5fimproved_5fstep_5ffinal',['coxph_improved_step_final',['../cox__prop__hazards_8sql__in.html#ac5ae827993064fd6e0ccf13a96262cdc',1,'cox_prop_hazards.sql_in']]],
+  ['coxph_5fimproved_5fstep_5ftransition',['coxph_improved_step_transition',['../cox__prop__hazards_8sql__in.html#a6a9ae1ea761b31e1522c47a9794cc233',1,'cox_prop_hazards.sql_in']]],
+  ['coxph_5fimproved_5fstrata_5fstep_5ffinal',['coxph_improved_strata_step_final',['../cox__prop__hazards_8sql__in.html#a41a415076894d3844475208b2163a267',1,'cox_prop_hazards.sql_in']]],
+  ['coxph_5fimproved_5fstrata_5fstep_5fouter',['coxph_improved_strata_step_outer',['../cox__prop__hazards_8sql__in.html#abb21bacbff7362724d2698568d857555',1,'cox_prop_hazards.sql_in']]],
+  ['coxph_5fpredict',['coxph_predict',['../cox__prop__hazards_8sql__in.html#a0ad613a529ee147565a605d6f443a4bd',1,'coxph_predict(text model_table, text source_table, text id_col_name, text output_table, text pred_type, text reference):&#160;cox_prop_hazards.sql_in'],['../cox__prop__hazards_8sql__in.html#a815961d52fb8ce998071eb92056ee1dd',1,'coxph_predict(text model_table, text source_table, text id_col_name, text output_table, text pred_type):&#160;cox_prop_hazards.sql_in'],['../cox__prop__hazards_8sql__in.html#acd445fe632e93b2c8260b0455478e2e5',1,'coxph_predict(text model_table, text source_table, text id_col_name, text output_table):&#160;cox_prop_hazards.sql_in'],['../cox__prop__hazards_8sql__in.html#a9edc6c578176561159b2ecde7415a751',1,'coxph_predict(varchar message):&#160;cox_prop_hazards.sql_in'],['../cox__prop__hazards_8sql__in.html#a3f1a4a5844c5b2629bcba051e75eee70',1,'coxph_predict():&#160;cox_prop_hazards.sql_in']]],
+  ['coxph_5fstep_5finner_5ffinal',['coxph_step_inner_final',['../cox__prop__hazards_8sql__in.html#a3c96655e41fd17c86dfc9ad37b0959d0',1,'cox_prop_hazards.sql_in']]],
+  ['coxph_5fstep_5fouter_5ftransition',['coxph_step_outer_transition',['../cox__prop__hazards_8sql__in.html#abaf93fc77a284f0b765a64ef827c1bed',1,'cox_prop_hazards.sql_in']]],
+  ['coxph_5ftrain',['coxph_train',['../cox__prop__hazards_8sql__in.html#a737450bbfe0f10204b0074a9d45b0cef',1,'coxph_train(varchar source_table, varchar output_table, varchar dependent_varname, varchar independent_varname, varchar right_censoring_status, varchar strata, varchar optimizer_params):&#160;cox_prop_hazards.sql_in'],['../cox__prop__hazards_8sql__in.html#ae7edb9499e07fdf835c3bbc297a99c01',1,'coxph_train():&#160;cox_prop_hazards.sql_in'],['../cox__prop__hazards_8sql__in.html#a6f527631dc32178716221cc9dfa1fde4',1,'coxph_train(varchar message):&#160;cox_prop_hazards.sql_in'],['../cox__prop__hazards_8sql__in.html#a3fd1cd09fd5de41d6dc8aca0a18eec8b',1,'coxph_train(varchar source_table, varchar output_table, varchar dependent_variable, varchar independent_variable, varchar right_censoring_status, varchar strata):&#160;cox_prop_hazards.sql_in'],['../cox__prop__hazards_8sql__in.html#afd5fb08d419aab4a8b8eb103afa30f29',1,'coxph_train(varchar source_table, varchar output_table, varchar dependent_variable, varchar independent_variable, varchar right_censoring_status):&#160;cox_prop_hazards.sql_in'],['../cox__prop__hazards_8sql__in.html#a76aeb28f6e0fc47fd59c0d6c6c7be063',1,'coxph_train(varchar source_table, varchar output_table, varchar dependent_variable, varchar independent_variable):&#160;cox_prop_hazards.sql_in']]],
+  ['create_5findicator_5fvariables',['create_indicator_variables',['../create__indicators_8sql__in.html#a0add50a6ab76682bde7825fc54f4d64b',1,'create_indicator_variables(text source_table, text out_table, text categorical_cols, boolean keep_null, text distributed_by):&#160;create_indicators.sql_in'],['../create__indicators_8sql__in.html#a05dbb30d8dd8589e75a96b3232cafe65',1,'create_indicator_variables(text source_table, text out_table, text categorical_cols, boolean keep_null):&#160;create_indicators.sql_in'],['../create__indicators_8sql__in.html#a617b67999ab8c9c07fb0d24101a1115d',1,'create_indicator_variables(text source_table, text out_table, text categorical_cols):&#160;create_indicators.sql_in'],['../create__indicators_8sql__in.html#a839b64f47a11a35c5df24ee93e36ba26',1,'create_indicator_variables(varchar message):&#160;create_indicators.sql_in'],['../create__indicators_8sql__in.html#a5d0ef27bc38be2b4b5f063cf7b560d1f',1,'create_indicator_variables():&#160;create_indicators.sql_in']]],
+  ['create_5fnb_5fclassify_5fview',['create_nb_classify_view',['../bayes_8sql__in.html#a798402280fc6db710957ae3ab58767e0',1,'create_nb_classify_view(varchar featureProbsSource, varchar classPriorsSource, varchar classifySource, varchar classifyKeyColumn, varchar classifyAttrColumn, integer numAttrs, varchar destName):&#160;bayes.sql_in'],['../bayes_8sql__in.html#a4e8e24120269be2b58f959ab5473b2cb',1,'create_nb_classify_view(varchar featureProbsSource, varchar classPriorsSource, varchar classifySource, varchar classifyKeyColumn, varchar classifyAttrColumn, integer numAttrs, varchar numericFeatureStatsSource, varchar destName):&#160;bayes.sql_in'],['../bayes_8sql__in.html#a6472f620099368cb8c334e0badb12133',1,'create_nb_classify_view(varchar trainingSource, varchar trainingClassColumn, varchar trainingAttrColumn, varchar classifySource, varchar classifyKeyColumn, varchar classifyAttrColumn, integer numAttrs, varchar destName):&#160;bayes.sql_in'],['../bayes_8sql__in.html#a76a03f1d7ff2b1891cb310668077b386',1,'create_nb_classify_view(varchar trainingSource, varchar trainingClassColumn, varchar trainingAttrColumn, varchar numericAttrsColumnIndices, varchar classifySource, varchar classifyKeyColumn, varchar classifyAttrColumn, integer numAttrs, varchar destName):&#160;bayes.sql_in']]],
+  ['create_5fnb_5fprepared_5fdata_5ftables',['create_nb_prepared_data_tables',['../bayes_8sql__in.html#aeb4eae7843dd789cc38d5fc57f4ccfb2',1,'create_nb_prepared_data_tables(varchar trainingSource, varchar trainingClassColumn, varchar trainingAttrColumn, integer numAttrs, varchar featureProbsDestName, varchar classPriorsDestName):&#160;bayes.sql_in'],['../bayes_8sql__in.html#a3ed5ddbc4cab1013db8604be58a6da3d',1,'create_nb_prepared_data_tables(varchar trainingSource, varchar trainingClassColumn, varchar trainingAttrColumn, varchar numericAttrsColumnIndices, integer numAttrs, varchar featureProbsDestName, varchar numericFeatureStatsDestName, varchar classPriorsDestName):&#160;bayes.sql_in']]],
+  ['create_5fnb_5fprobs_5fview',['create_nb_probs_view',['../bayes_8sql__in.html#a163afffd0c845d325f060f74bcf02243',1,'create_nb_probs_view(varchar featureProbsSource, varchar classPriorsSource, varchar classifySource, varchar classifyKeyColumn, varchar classifyAttrColumn, integer numAttrs, varchar destName):&#160;bayes.sql_in'],['../bayes_8sql__in.html#a2e02b0ebb0b4c2ca77b1748662bae78f',1,'create_nb_probs_view(varchar featureProbsSource, varchar classPriorsSource, varchar classifySource, varchar classifyKeyColumn, varchar classifyAttrColumn, integer numAttrs, varchar numericFeatureStatsSource, varchar destName):&#160;bayes.sql_in'],['../bayes_8sql__in.html#aba5d695641530e55b25c8007b77142b9',1,'create_nb_probs_view(varchar trainingSource, varchar trainingClassColumn, varchar trainingAttrColumn, varchar classifySource, varchar classifyKeyColumn, varchar classifyAttrColumn, integer numAttrs, varchar destName):&#160;bayes.sql_in'],['../bayes_8sql__in.html#a6d1186aa04f4d4e3ac44035467818d3c',1,'create_nb_probs_view(varchar trainingSource, varchar trainingClassColumn, varchar trainingAttrColumn, varchar numericAttrsColumnIndices, varchar classifySource, varchar classifyKeyColumn, varchar classifyAttrColumn, integer numAttrs, varchar destName):&#160;bayes.sql_in']]],
+  ['create_5fschema_5fpg_5ftemp',['create_schema_pg_temp',['../utilities_8sql__in.html#a56501b6f9fabe65d7a6a6beb70a0e000',1,'utilities.sql_in']]],
+  ['crf_5ftest_5fdata',['crf_test_data',['../crf__data__loader_8sql__in.html#abf2a39a0b84a5e7ae215db28b3a87f81',1,'crf_data_loader.sql_in']]],
+  ['crf_5ftest_5ffgen',['crf_test_fgen',['../crf__feature__gen_8sql__in.html#ad9af2c3d1a4f1c937795634ca297dede',1,'crf_feature_gen.sql_in']]],
+  ['crf_5ftrain_5fdata',['crf_train_data',['../crf__data__loader_8sql__in.html#aaa609ec1d1d4cff0f335fa358091d5c3',1,'crf_data_loader.sql_in']]],
+  ['crf_5ftrain_5ffgen',['crf_train_fgen',['../crf__feature__gen_8sql__in.html#a3548bd640c2af456f3755cb24b913ebd',1,'crf_feature_gen.sql_in']]],
+  ['cross_5fvalidation_5fgeneral',['cross_validation_general',['../cross__validation_8sql__in.html#a2a7791b05f51e8748ab7b6ccf328a7e2',1,'cross_validation_general(varchar modelling_func, varchar[] modelling_params, varchar[] modelling_params_type, varchar param_explored, varchar[] explore_values, varchar predict_func, varchar[] predict_params, varchar[] predict_params_type, varchar metric_func, varchar[] metric_params, varchar[] metric_params_type, varchar data_tbl, varchar data_id, boolean id_is_random, varchar validation_result, varchar[] data_cols, integer n_folds):&#160;cross_validation.sql_in'],['../cross__validation_8sql__in.html#a5efbb27898e99f7685816d9d5dfd082c',1,'cross_validation_general(varchar modelling_func, varchar[] modelling_params, varchar[] modelling_params_type, varchar param_explored, varchar[] explore_values, varchar predict_func, varchar[] predict_params, varchar[] predict_params_type, varchar metric_func, varchar[] metric_params, varchar[] metric_params_type, varchar data_tbl, varchar data_id, boolean id_is_random, varchar validation_result, varchar[] data_cols):&#160;cross_validation.sql_in']]],
+  ['crossprod',['crossprod',['../pivotalr__arrayops_8sql__in.html#a588d5855d1673f7bcbc2a1c983081f76',1,'pivotalr_arrayops.sql_in']]],
+  ['crossprod_5fsym',['crossprod_sym',['../pivotalr__arrayops_8sql__in.html#aa1e36bf44b3206314c186bba80179c9c',1,'pivotalr_arrayops.sql_in']]],
+  ['cv_5flinregr_5fpredict',['cv_linregr_predict',['../cross__validation_8sql__in.html#aa572f1f57c0dd106b30948928161d8cc',1,'cross_validation.sql_in']]],
+  ['cv_5flinregr_5ftrain',['cv_linregr_train',['../cross__validation_8sql__in.html#aa151eb3fa9acc7f4cc33236e22ad4362',1,'cross_validation.sql_in']]],
+  ['cv_5flogregr_5faccuracy',['cv_logregr_accuracy',['../cross__validation_8sql__in.html#ac1b5c57473ff672af45191c8d53f46ed',1,'cross_validation.sql_in']]],
+  ['cv_5flogregr_5fpredict',['cv_logregr_predict',['../cross__validation_8sql__in.html#ac7dbc115f0c4624ccbf62b2d5494388d',1,'cross_validation.sql_in']]]
+];
diff --git a/docs/rc/search/functions_4.html b/docs/rc/search/functions_4.html
new file mode 100644
index 0000000..8985ff2
--- /dev/null
+++ b/docs/rc/search/functions_4.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_4.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/functions_4.js b/docs/rc/search/functions_4.js
new file mode 100644
index 0000000..e0b4df9
--- /dev/null
+++ b/docs/rc/search/functions_4.js
@@ -0,0 +1,24 @@
+var searchData=
+[
+  ['deconstruct_5f2d_5farray',['deconstruct_2d_array',['../linalg_8sql__in.html#a21d0a134f1674f71b3e872aacc5f3789',1,'linalg.sql_in']]],
+  ['delete_5fkeras_5fmodel',['delete_keras_model',['../keras__model__arch__table_8sql__in.html#a53fd46319b173ad59a1f21732c23c1f0',1,'delete_keras_model(varchar keras_model_arch_table, integer model_id):&#160;keras_model_arch_table.sql_in'],['../keras__model__arch__table_8sql__in.html#af8840de8b579cc9e0ce826b977cf8d80',1,'delete_keras_model(varchar message):&#160;keras_model_arch_table.sql_in'],['../keras__model__arch__table_8sql__in.html#ab1d0a9b4830f62938129a95f4c7c5d0d',1,'delete_keras_model():&#160;keras_model_arch_table.sql_in']]],
+  ['dense_5fdirect_5flinear_5fsystem',['dense_direct_linear_system',['../dense__linear__systems_8sql__in.html#a379f260d8dfbf5c2be05c60776974188',1,'dense_linear_systems.sql_in']]],
+  ['dense_5fdirect_5flinear_5fsystem_5ffinal',['dense_direct_linear_system_final',['../dense__linear__systems_8sql__in.html#a63a3ed2c811216d3d88c120005a13875',1,'dense_linear_systems.sql_in']]],
+  ['dense_5fdirect_5flinear_5fsystem_5fmerge_5fstates',['dense_direct_linear_system_merge_states',['../dense__linear__systems_8sql__in.html#a607403f90e1921435183d031825e5e54',1,'dense_linear_systems.sql_in']]],
+  ['dense_5fdirect_5flinear_5fsystem_5ftransition',['dense_direct_linear_system_transition',['../dense__linear__systems_8sql__in.html#acbfc47693d0b50ccfc6b7f7c38209b18',1,'dense_linear_systems.sql_in']]],
+  ['dense_5fresidual_5fnorm',['dense_residual_norm',['../dense__linear__systems_8sql__in.html#a52f2bcdd0d038f19e64a44d4bb07fefb',1,'dense_linear_systems.sql_in']]],
+  ['dense_5fresidual_5fnorm_5ffinal',['dense_residual_norm_final',['../dense__linear__systems_8sql__in.html#a01935dd8c4aef8c92e77b7f0f905fa4b',1,'dense_linear_systems.sql_in']]],
+  ['dense_5fresidual_5fnorm_5fmerge_5fstates',['dense_residual_norm_merge_states',['../dense__linear__systems_8sql__in.html#a73ebde08b8395fd7bddbe1dc37b9539f',1,'dense_linear_systems.sql_in']]],
+  ['dense_5fresidual_5fnorm_5ftransition',['dense_residual_norm_transition',['../dense__linear__systems_8sql__in.html#ad34728809ab3121705342cf91b34c6dd',1,'dense_linear_systems.sql_in']]],
+  ['discrete_5fdistribution_5fagg',['discrete_distribution_agg',['../distribution_8sql__in.html#af9418a44cb502919d54c59e909e19606',1,'distribution.sql_in']]],
+  ['discrete_5fdistribution_5ffinal',['discrete_distribution_final',['../distribution_8sql__in.html#a99a03822b9063a37df8641cfcf2e450b',1,'distribution.sql_in']]],
+  ['discrete_5fdistribution_5ftransition',['discrete_distribution_transition',['../distribution_8sql__in.html#aa7e45a9ebd2b5ad656e61aa9276116d3',1,'distribution.sql_in']]],
+  ['dist_5fangle',['dist_angle',['../linalg_8sql__in.html#a8c7b9281a72ff22caf06161701b27e84',1,'linalg.sql_in']]],
+  ['dist_5finf_5fnorm',['dist_inf_norm',['../linalg_8sql__in.html#a31fa9f2f5b45507c09f136464fdad1db',1,'linalg.sql_in']]],
+  ['dist_5fjaccard',['dist_jaccard',['../linalg_8sql__in.html#ac1397ac9f4a35b3b67c3be05b5e1a828',1,'linalg.sql_in']]],
+  ['dist_5fnorm1',['dist_norm1',['../linalg_8sql__in.html#aad193850e79c4b9d811ca9bc53e13476',1,'linalg.sql_in']]],
+  ['dist_5fnorm2',['dist_norm2',['../linalg_8sql__in.html#aa58e51526edea6ea98db30b6f250adb4',1,'linalg.sql_in']]],
+  ['dist_5fpnorm',['dist_pnorm',['../linalg_8sql__in.html#ad9cc156ae57bf7c0a2fe90798259105a',1,'linalg.sql_in']]],
+  ['dist_5ftanimoto',['dist_tanimoto',['../linalg_8sql__in.html#afa13b4c6122b99422d666dedea136c18',1,'linalg.sql_in']]],
+  ['dropcols',['dropcols',['../utilities_8sql__in.html#a244f77f87f2612800b1683033a21dcca',1,'utilities.sql_in']]]
+];
diff --git a/docs/rc/search/functions_5.html b/docs/rc/search/functions_5.html
new file mode 100644
index 0000000..0314918
--- /dev/null
+++ b/docs/rc/search/functions_5.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_5.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/functions_5.js b/docs/rc/search/functions_5.js
new file mode 100644
index 0000000..6a7fd21
--- /dev/null
+++ b/docs/rc/search/functions_5.js
@@ -0,0 +1,15 @@
+var searchData=
+[
+  ['elastic_5fnet_5fbinomial_5fpredict',['elastic_net_binomial_predict',['../elastic__net_8sql__in.html#aa78cde79f1f2caa7c5b38f933001d793',1,'elastic_net.sql_in']]],
+  ['elastic_5fnet_5fbinomial_5fprob',['elastic_net_binomial_prob',['../elastic__net_8sql__in.html#a308718fd5234bc1007b971a639aadf71',1,'elastic_net.sql_in']]],
+  ['elastic_5fnet_5fgaussian_5fpredict',['elastic_net_gaussian_predict',['../elastic__net_8sql__in.html#a96db4ff4ba3ea363fafbf6c036c19fae',1,'elastic_net.sql_in']]],
+  ['elastic_5fnet_5fpredict',['elastic_net_predict',['../elastic__net_8sql__in.html#a3578608204ac9b2d3442ff42977f632b',1,'elastic_net_predict(text tbl_model, text tbl_new_source, text col_id, text tbl_predict):&#160;elastic_net.sql_in'],['../elastic__net_8sql__in.html#aaddbfdfea4207d38ab7e2cd3db876bdc',1,'elastic_net_predict(text regress_family, float8[] coefficients, float8 intercept, float8[] ind_var):&#160;elastic_net.sql_in']]],
+  ['elastic_5fnet_5ftrain',['elastic_net_train',['../elastic__net_8sql__in.html#a735038a5090c112505c740a90a203e83',1,'elastic_net_train(text tbl_source, text tbl_result, text col_dep_var, text col_ind_var, text regress_family, float8 alpha, float8 lambda_value, boolean standardize, text grouping_col, text optimizer, text optimizer_params, text excluded, integer max_iter, float8 tolerance):&#160;elastic_net.sql_in'],['../elastic__net_8sql__in.html#a148de1ad5e1e60b9df3d3af590c06579',1,'elastic_net_train(text tbl_source, text tbl_result, text col_ind_var, text col_dep_var, text regress_family, float8 alpha, float8 lambda_value, boolean standardization, text grouping_columns, text optimizer, text optimizer_params, text excluded, integer max_iter):&#160;elastic_net.sql_in'],['../elastic__net_8sql__in.html#a63c8ed415005cc446a59bdc47a09791d',1,'elastic_net_train(text tbl_source, text tbl_result, text col_ind_var, text col_dep_var, text regress_family, float8 alpha, float8 lambda_value, boolean standardization, text grouping_columns, text optimizer, text optimizer_params, text excluded):&#160;elastic_net.sql_in'],['../elastic__net_8sql__in.html#ac26504e7ac55190207758356d821a01a',1,'elastic_net_train(text tbl_source, text tbl_result, text col_ind_var, text col_dep_var, text regress_family, float8 alpha, float8 lambda_value, boolean standardization, text grouping_columns, text optimizer, text optimizer_params):&#160;elastic_net.sql_in'],['../elastic__net_8sql__in.html#a7e698f9a0c7a1aa43f4bf9e169dc8b35',1,'elastic_net_train(text tbl_source, text tbl_result, text col_ind_var, text col_dep_var, text regress_family, float8 alpha, float8 lambda_value, boolean standardization, text grouping_columns, text optimizer):&#160;elastic_net.sql_in'],['../elastic__net_8sql__in.html#ab54d8862d3ad299aceca4ac2c914437e',1,'elastic_net_train(text tbl_source, text tbl_result, text col_ind_var, text col_dep_var, text regress_family, float8 alpha, float8 lambda_value, boolean standardization, text grouping_columns):&#160;elastic_net.sql_in'],['../elastic__net_8sql__in.html#a0351b7ed17eccb6db2c0bd61b421458b',1,'elastic_net_train(text tbl_source, text tbl_result, text col_ind_var, text col_dep_var, text regress_family, float8 alpha, float8 lambda_value, boolean standardization):&#160;elastic_net.sql_in'],['../elastic__net_8sql__in.html#a1a57491bc6b156d575bb93edb986aaa5',1,'elastic_net_train(text tbl_source, text tbl_result, text col_ind_var, text col_dep_var, text regress_family, float8 alpha, float8 lambda_value):&#160;elastic_net.sql_in'],['../elastic__net_8sql__in.html#add7e2592fb0bd9f2eb1d8b176c80b5d0',1,'elastic_net_train():&#160;elastic_net.sql_in'],['../elastic__net_8sql__in.html#a6f6ee3def49b5e9a1d3375fe41427dc0',1,'elastic_net_train(text family_or_optimizer):&#160;elastic_net.sql_in']]],
+  ['encode_5fcategorical_5fvariables',['encode_categorical_variables',['../encode__categorical_8sql__in.html#ab508855c762d04c77e993e30d655995e',1,'encode_categorical_variables(varchar source_table, varchar output_table, varchar categorical_cols, varchar categorical_cols_to_exclude, varchar row_id, varchar top, varchar value_to_drop, boolean encode_null, varchar output_type, boolean output_dictionary, varchar distributed_by):&#160;encode_categorical.sql_in'],['../encode__categorical_8sql__in.html#a6685fbb11c4f68a25c232a6035c752c4',1,'encode_categorical_variables(varchar source_table, varchar output_table, varchar categorical_cols, varchar categorical_cols_to_exclude, varchar row_id, varchar top, varchar value_to_drop, boolean encode_null, varchar output_type, boolean output_dictionary):&#160;encode_categorical.sql_in'],['../encode__categorical_8sql__in.html#a5ea1ae2dc53c77b047cd1dc186739bc7',1,'encode_categorical_variables(varchar source_table, varchar output_table, varchar categorical_cols, varchar categorical_cols_to_exclude, varchar row_id, varchar top, varchar value_to_drop, boolean encode_null, varchar output_type):&#160;encode_categorical.sql_in'],['../encode__categorical_8sql__in.html#a63e256d5d0aefbcf29d74669276bdf20',1,'encode_categorical_variables(varchar source_table, varchar output_table, varchar categorical_cols, varchar categorical_cols_to_exclude, varchar row_id, varchar top, varchar value_to_drop, boolean encode_null):&#160;encode_categorical.sql_in'],['../encode__categorical_8sql__in.html#ab26bb9de11a426fd1cff17dce24ba98d',1,'encode_categorical_variables(varchar source_table, varchar output_table, varchar categorical_cols, varchar categorical_cols_to_exclude, varchar row_id, varchar top, varchar value_to_drop):&#160;encode_categorical.sql_in'],['../encode__categorical_8sql__in.html#a4a5f5774f0b6aad31427a47064565c82',1,'encode_categorical_variables(varchar source_table, varchar output_table, varchar categorical_cols, varchar categorical_cols_to_exclude, varchar row_id, varchar top):&#160;encode_categorical.sql_in'],['../encode__categorical_8sql__in.html#a31753df1ea819930436ab2d10b996599',1,'encode_categorical_variables(varchar source_table, varchar output_table, varchar categorical_cols, varchar categorical_cols_to_exclude, varchar row_id):&#160;encode_categorical.sql_in'],['../encode__categorical_8sql__in.html#a1f60121c4552a526513561281bf371f3',1,'encode_categorical_variables(varchar source_table, varchar output_table, varchar categorical_cols, varchar categorical_cols_to_exclude):&#160;encode_categorical.sql_in'],['../encode__categorical_8sql__in.html#a6a92afff73eb09fa0b7db489bd009235',1,'encode_categorical_variables(varchar source_table, varchar output_table, varchar categorical_cols):&#160;encode_categorical.sql_in'],['../encode__categorical_8sql__in.html#ab5c44316240bb072316870e43ff2d715',1,'encode_categorical_variables(varchar message):&#160;encode_categorical.sql_in'],['../encode__categorical_8sql__in.html#a8fea222d67f69c73255dbdee2746bed5',1,'encode_categorical_variables():&#160;encode_categorical.sql_in']]],
+  ['exponential_5fcdf',['exponential_cdf',['../prob_8sql__in.html#a6d1bf6816f56b8e5ba6bf6ca94752f46',1,'prob.sql_in']]],
+  ['exponential_5fpdf',['exponential_pdf',['../prob_8sql__in.html#a18a5458c4bc85f0c4ea321317f90bdbb',1,'prob.sql_in']]],
+  ['exponential_5fquantile',['exponential_quantile',['../prob_8sql__in.html#ae3687b8e69a402154b829a6531b1b279',1,'prob.sql_in']]],
+  ['extreme_5fvalue_5fcdf',['extreme_value_cdf',['../prob_8sql__in.html#acffffe04c15eccd2e88cdac250bccc68',1,'prob.sql_in']]],
+  ['extreme_5fvalue_5fpdf',['extreme_value_pdf',['../prob_8sql__in.html#a03a3494462f4cb8c9fb6212e72b0b2e9',1,'prob.sql_in']]],
+  ['extreme_5fvalue_5fquantile',['extreme_value_quantile',['../prob_8sql__in.html#aeb5a7d295b83a891774a4fb0ef27c458',1,'prob.sql_in']]]
+];
diff --git a/docs/rc/search/functions_6.html b/docs/rc/search/functions_6.html
new file mode 100644
index 0000000..c506123
--- /dev/null
+++ b/docs/rc/search/functions_6.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_6.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/functions_6.js b/docs/rc/search/functions_6.js
new file mode 100644
index 0000000..0ebdf6f
--- /dev/null
+++ b/docs/rc/search/functions_6.js
@@ -0,0 +1,32 @@
+var searchData=
+[
+  ['f_5ftest',['f_test',['../hypothesis__tests_8sql__in.html#a5a946aa469ff6ddf8d276db16fa26ad4',1,'hypothesis_tests.sql_in']]],
+  ['f_5ftest_5ffinal',['f_test_final',['../hypothesis__tests_8sql__in.html#abc6006e8da028dd93ac48b8fd9ae8786',1,'hypothesis_tests.sql_in']]],
+  ['fisher_5ff_5fcdf',['fisher_f_cdf',['../prob_8sql__in.html#a6c5b3e35531e44098f9d0cbef14cb8a6',1,'prob.sql_in']]],
+  ['fisher_5ff_5fpdf',['fisher_f_pdf',['../prob_8sql__in.html#a1c7937426379a8913519a6abc5a38ac2',1,'prob.sql_in']]],
+  ['fisher_5ff_5fquantile',['fisher_f_quantile',['../prob_8sql__in.html#ab6ed888a5338a0bee9c55edf4d33847f',1,'prob.sql_in']]],
+  ['fit_5ffinal',['fit_final',['../madlib__keras_8sql__in.html#afed0955ca706593416484f91c9248c3c',1,'madlib_keras.sql_in']]],
+  ['fit_5fmerge',['fit_merge',['../madlib__keras_8sql__in.html#acb0ec519bd8ee5ed964d092ca1654e6a',1,'madlib_keras.sql_in']]],
+  ['fit_5fstep',['fit_step',['../madlib__keras_8sql__in.html#ae1f24820d99f9536085b2c20bc0bfd58',1,'madlib_keras.sql_in']]],
+  ['fit_5fstep_5fmultiple_5fmodel',['fit_step_multiple_model',['../madlib__keras__fit__multiple__model_8sql__in.html#a99721919cc2d29c4caf92a73c2c00790',1,'madlib_keras_fit_multiple_model.sql_in']]],
+  ['fit_5ftransition',['fit_transition',['../madlib__keras_8sql__in.html#a850f8c8fcfe7b4999aebee849252f703',1,'madlib_keras.sql_in']]],
+  ['fit_5ftransition_5fmultiple_5fmodel',['fit_transition_multiple_model',['../madlib__keras__fit__multiple__model_8sql__in.html#ac2b3f256c5cefe8e2760d93a586fcd95',1,'madlib_keras_fit_multiple_model.sql_in']]],
+  ['float8arr_5fcast_5ffloat4',['float8arr_cast_float4',['../svec_8sql__in.html#a2a6e17fd9dafc349c7cfa070486e6ad1',1,'svec.sql_in']]],
+  ['float8arr_5fcast_5ffloat8',['float8arr_cast_float8',['../svec_8sql__in.html#af8db439cf1a73749052f06fc30c7d282',1,'svec.sql_in']]],
+  ['float8arr_5fcast_5fint2',['float8arr_cast_int2',['../svec_8sql__in.html#a5e38a27f556a6ac88549efec37da786f',1,'svec.sql_in']]],
+  ['float8arr_5fcast_5fint4',['float8arr_cast_int4',['../svec_8sql__in.html#a9c05d02233680a2e96dc6058155e4483',1,'svec.sql_in']]],
+  ['float8arr_5fcast_5fint8',['float8arr_cast_int8',['../svec_8sql__in.html#a4862b4e281323db16e9be4dfd681db2e',1,'svec.sql_in']]],
+  ['float8arr_5fcast_5fnumeric',['float8arr_cast_numeric',['../svec_8sql__in.html#a0bc8ef7e7b8e37b784c81a940bd817f0',1,'svec.sql_in']]],
+  ['float8arr_5fdiv_5ffloat8arr',['float8arr_div_float8arr',['../svec_8sql__in.html#a20d4a7b907e967351f6439640482e0f9',1,'svec.sql_in']]],
+  ['float8arr_5fdiv_5fsvec',['float8arr_div_svec',['../svec_8sql__in.html#a5c4ac1cc9a2ee3057958070b8e7bffcc',1,'svec.sql_in']]],
+  ['float8arr_5feq',['float8arr_eq',['../svec_8sql__in.html#a0684988340d533c00523951f9a95107e',1,'svec.sql_in']]],
+  ['float8arr_5fminus_5ffloat8arr',['float8arr_minus_float8arr',['../svec_8sql__in.html#a4c82ac5de8e026c85e83aae4e0f06220',1,'svec.sql_in']]],
+  ['float8arr_5fminus_5fsvec',['float8arr_minus_svec',['../svec_8sql__in.html#a457f2f9210baba1c13820801c42cd06a',1,'svec.sql_in']]],
+  ['float8arr_5fmult_5ffloat8arr',['float8arr_mult_float8arr',['../svec_8sql__in.html#abb0b3f155c45bb370ef7adac49096835',1,'svec.sql_in']]],
+  ['float8arr_5fmult_5fsvec',['float8arr_mult_svec',['../svec_8sql__in.html#a0e7dd7a82b41f4b8344efa21208e1637',1,'svec.sql_in']]],
+  ['float8arr_5fplus_5ffloat8arr',['float8arr_plus_float8arr',['../svec_8sql__in.html#a6bb068ab6ba775619fe787ed845f5a0d',1,'svec.sql_in']]],
+  ['float8arr_5fplus_5fsvec',['float8arr_plus_svec',['../svec_8sql__in.html#a98aa60ec0c58c828b0a72c75d604322e',1,'svec.sql_in']]],
+  ['fmsketch_5fdcount',['fmsketch_dcount',['../sketch_8sql__in.html#ae27d5aaa5e4b426bcfe55e05a89c8e0b',1,'sketch.sql_in']]],
+  ['forest_5fpredict',['forest_predict',['../random__forest_8sql__in.html#a21d04e51fb54f374bbdc9810f3386b11',1,'forest_predict(text model, text source, text output, text pred_type):&#160;random_forest.sql_in'],['../random__forest_8sql__in.html#aef268338ffa67f54ca1371326bb25fa0',1,'forest_predict(text model, text source, text output):&#160;random_forest.sql_in'],['../random__forest_8sql__in.html#a072cf9e76a6c9351a6089a3989f7e859',1,'forest_predict(text message):&#160;random_forest.sql_in'],['../random__forest_8sql__in.html#a2f1d729cd2f2f3b8102a97f9063dae40',1,'forest_predict():&#160;random_forest.sql_in']]],
+  ['forest_5ftrain',['forest_train',['../random__forest_8sql__in.html#a449144c760063041399eaed682d17af4',1,'forest_train(text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text grouping_cols, integer num_trees, integer num_random_features, boolean importance, integer num_permutations, integer max_tree_depth, integer min_split, integer min_bucket, integer num_splits, text null_handling_params, boolean verbose, float8 sample_ratio):&#160;random_forest.sql_in'],['../random__forest_8sql__in.html#a5d5622998b4e3ab4ee0b22de9c436960',1,'forest_train(text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text grouping_cols, integer num_trees, integer num_random_features, boolean importance, integer num_permutations, integer max_tree_depth, integer min_split, integer min_bucket, integer num_splits, text null_handling_params, boolean verbose):&#160;random_forest.sql_in'],['../random__forest_8sql__in.html#ae0786fea458787a914e9711ee167750d',1,'forest_train(text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text grouping_cols, integer num_trees, integer num_random_features, boolean importance, integer num_permutations, integer max_tree_depth, integer min_split, integer min_bucket, integer num_splits, text null_handling_params):&#160;random_forest.sql_in'],['../random__forest_8sql__in.html#af2e84b0cdcd87adbabbc5fa8caba9467',1,'forest_train(text message):&#160;random_forest.sql_in'],['../random__forest_8sql__in.html#aae56e36fc47ff539b9155180c8c0abb3',1,'forest_train():&#160;random_forest.sql_in'],['../random__forest_8sql__in.html#a77c66aa21874aa49cb6a236b8c91cef4',1,'forest_train(text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text grouping_cols, integer num_trees, integer num_random_features, boolean importance, integer num_permutations, integer max_tree_depth, integer min_split, integer min_bucket, integer num_splits):&#160;random_forest.sql_in'],['../random__forest_8sql__in.html#a58a8ac26acb60396b15dabaaa3c4b742',1,'forest_train(text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text grouping_cols, integer num_trees, integer num_random_features, boolean importance, integer num_permutations, integer max_tree_depth, integer min_split, integer min_bucket):&#160;random_forest.sql_in'],['../random__forest_8sql__in.html#af7314fae3406399700ba75a6f385fda7',1,'forest_train(text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text grouping_cols, integer num_trees, integer num_random_features, boolean importance, integer num_permutations, integer max_tree_depth, integer min_split):&#160;random_forest.sql_in'],['../random__forest_8sql__in.html#aa2b0e1092f8a0e789a1c8c50a88e966b',1,'forest_train(text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text grouping_cols, integer num_trees, integer num_random_features, boolean importance, integer num_permutations, integer max_tree_depth):&#160;random_forest.sql_in'],['../random__forest_8sql__in.html#abdab5d1051736a984eb483a0a84d10a4',1,'forest_train(text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text grouping_cols, integer num_trees, integer num_random_features, boolean importance, integer num_permutations):&#160;random_forest.sql_in'],['../random__forest_8sql__in.html#a741417bcd9541f4d12f45ee70082f4cb',1,'forest_train(text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text grouping_cols, integer num_trees, integer num_random_features, boolean importance):&#160;random_forest.sql_in'],['../random__forest_8sql__in.html#ae577213f72707260dee6f143c319090b',1,'forest_train(text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text grouping_cols, integer num_trees, integer num_random_features):&#160;random_forest.sql_in'],['../random__forest_8sql__in.html#a926e116171a0f794e1eff344de1f4935',1,'forest_train(text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text grouping_cols, integer num_trees):&#160;random_forest.sql_in'],['../random__forest_8sql__in.html#a6f1a5cae6cbb9cbc756e11bf34da5572',1,'forest_train(text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude, text grouping_cols):&#160;random_forest.sql_in'],['../random__forest_8sql__in.html#a04cbc760f3790bcf69fe48e008cfba3d',1,'forest_train(text training_table_name, text output_table_name, text id_col_name, text dependent_variable, text list_of_features, text list_of_features_to_exclude):&#160;random_forest.sql_in']]]
+];
diff --git a/docs/rc/search/functions_7.html b/docs/rc/search/functions_7.html
new file mode 100644
index 0000000..83a7b84
--- /dev/null
+++ b/docs/rc/search/functions_7.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_7.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/functions_7.js b/docs/rc/search/functions_7.js
new file mode 100644
index 0000000..167076f
--- /dev/null
+++ b/docs/rc/search/functions_7.js
@@ -0,0 +1,38 @@
+var searchData=
+[
+  ['gamma_5fcdf',['gamma_cdf',['../prob_8sql__in.html#ab6760b0486bad2f1ab0635eb59404e7c',1,'prob.sql_in']]],
+  ['gamma_5fpdf',['gamma_pdf',['../prob_8sql__in.html#a6c37e3bda2596accbb46525321a328c4',1,'prob.sql_in']]],
+  ['gamma_5fquantile',['gamma_quantile',['../prob_8sql__in.html#ac48bbd491bd34831415705c3a0b7bf29',1,'prob.sql_in']]],
+  ['gamma_5frandom',['gamma_random',['../sample_8sql__in.html#afc523f72e64820329acb8874c2a759d3',1,'sample.sql_in']]],
+  ['gen_5fdoc_5fsvecs',['gen_doc_svecs',['../svec__util_8sql__in.html#a6136c83e9c419d783d1ec6db061f8d6e',1,'gen_doc_svecs(text output_tbl, text dictionary_tbl, text dict_id_col, text dict_term_col, text documents_tbl, text doc_id_col, text doc_term_col, text doc_term_info_col):&#160;svec_util.sql_in'],['../svec__util_8sql__in.html#a0c8cd9f0be54a6e739f9ec0bdcbe2d8d',1,'gen_doc_svecs():&#160;svec_util.sql_in']]],
+  ['gen_5frules_5ffrom_5fcfp',['gen_rules_from_cfp',['../assoc__rules_8sql__in.html#a6af43dbd2fe9400f96c1ebf486e8ea40',1,'assoc_rules.sql_in']]],
+  ['geometric_5fcdf',['geometric_cdf',['../prob_8sql__in.html#a00879bdf7d48ceddedb3b4cc33511497',1,'prob.sql_in']]],
+  ['geometric_5fpmf',['geometric_pmf',['../prob_8sql__in.html#a5e08db93bd448a1e2164e106ce5781a4',1,'prob.sql_in']]],
+  ['geometric_5fquantile',['geometric_quantile',['../prob_8sql__in.html#a62674ca958aec0533cdf0a74a1dadea9',1,'prob.sql_in']]],
+  ['get_5fcol',['get_col',['../linalg_8sql__in.html#a20f34c9e661191e5225cca7bc23252c5',1,'linalg.sql_in']]],
+  ['get_5frow',['get_row',['../linalg_8sql__in.html#af6b905fcac7746ef0ed0c36df4a1e070',1,'linalg.sql_in']]],
+  ['get_5ftree',['get_tree',['../random__forest_8sql__in.html#a513524a87a38b2d6a50ac74c5d073a14',1,'get_tree(text model_table, integer gid, integer sample_id, boolean dot_format, boolean verbose):&#160;random_forest.sql_in'],['../random__forest_8sql__in.html#af22b14c3da4f64b544b6c333a8e97070',1,'get_tree(text model_table, integer gid, integer sample_id, boolean dot_format):&#160;random_forest.sql_in'],['../random__forest_8sql__in.html#af2abc993cde32a08278a411c28439bb6',1,'get_tree(text model_table, integer gid, integer sample_id):&#160;random_forest.sql_in'],['../random__forest_8sql__in.html#a6796f6dc96ce0f8b75c75061c348a6bb',1,'get_tree():&#160;random_forest.sql_in']]],
+  ['get_5ftree_5fsurr',['get_tree_surr',['../random__forest_8sql__in.html#a3ba1911b340a431982189e3e1f8c0111',1,'get_tree_surr(text model_table, integer gid, integer sample_id):&#160;random_forest.sql_in'],['../random__forest_8sql__in.html#ab761f190afe9420e791ce6d1a3c3c719',1,'get_tree_surr():&#160;random_forest.sql_in']]],
+  ['get_5fvar_5fimportance',['get_var_importance',['../random__forest_8sql__in.html#aea5ca2b827a4ee552a8c0f4d4d947725',1,'get_var_importance(model_table TEXT, output_table TEXT) RETURNS VOID AS $$ PythonFunction(recursive_partitioning:&#160;random_forest.sql_in'],['../random__forest_8sql__in.html#a02aabd66a900f6cd233274c7d16268ac',1,'get_var_importance(message TEXT) RETURNS TEXT AS $$ PythonFunction(recursive_partitioning:&#160;random_forest.sql_in'],['../random__forest_8sql__in.html#a8a375b28fa555fb9a24dd8177902a7d5',1,'get_var_importance() RETURNS TEXT AS $$ BEGIN RETURN madlib.get_var_importance(&apos;&apos;):&#160;random_forest.sql_in']]],
+  ['glm',['glm',['../glm_8sql__in.html#a3f8eb219013e05675626acb8cf4612cc',1,'glm(varchar source_table, varchar model_table, varchar dependent_varname, varchar independent_varname, varchar family_params, varchar grouping_col, varchar optim_params, boolean verbose):&#160;glm.sql_in'],['../glm_8sql__in.html#a79c8b3660f49977fd3537de1db2e60ba',1,'glm(varchar source_table, varchar model_table, varchar dependent_varname, varchar independent_varname, varchar family_params, varchar grouping_col, varchar optim_params):&#160;glm.sql_in'],['../glm_8sql__in.html#a98f75815c048dd6ec06842f00ef08f2a',1,'glm(varchar source_table, varchar model_table, varchar dependent_varname, varchar independent_varname, varchar family_params, varchar grouping_col):&#160;glm.sql_in'],['../glm_8sql__in.html#a4938524efbef7684ce8a8e2646f126ef',1,'glm(varchar source_table, varchar model_table, varchar dependent_varname, varchar independent_varname, varchar family_params):&#160;glm.sql_in'],['../glm_8sql__in.html#a5887e1ae0feabbbfc93e67ab4447f4bd',1,'glm(text message):&#160;glm.sql_in'],['../glm_8sql__in.html#ac70223628f2b8fc5e86e295f9d6512ae',1,'glm():&#160;glm.sql_in']]],
+  ['glm_5fpredict',['glm_predict',['../glm_8sql__in.html#a93d7d8b202654b86917bf9e997d0ad6f',1,'glm_predict(float8[] coef, float8[] col_ind_var, text link):&#160;glm.sql_in'],['../glm_8sql__in.html#add7c22acc8eaaa3eace7089eadc5f367',1,'glm_predict(text message):&#160;glm.sql_in'],['../glm_8sql__in.html#aa42b3ee4e9c39132154dfa81f96ed4ff',1,'glm_predict():&#160;glm.sql_in']]],
+  ['glm_5fpredict_5fbinomial',['glm_predict_binomial',['../glm_8sql__in.html#ac645a2cc2aa22eac90dee923593eb72d',1,'glm_predict_binomial(float8[] coef, float8[] col_ind_var, text link):&#160;glm.sql_in'],['../glm_8sql__in.html#a9a468186034a936c3997cad22b03cafe',1,'glm_predict_binomial(text message):&#160;glm.sql_in']]],
+  ['glm_5fpredict_5fpoisson',['glm_predict_poisson',['../glm_8sql__in.html#a941d49196e573048852def804c5ce4c4',1,'glm_predict_poisson(float8[] coef, float8[] col_ind_var, text link):&#160;glm.sql_in'],['../glm_8sql__in.html#aeb1962c5b1bdd12ae3111bc93fa2967e',1,'glm_predict_poisson(text message):&#160;glm.sql_in']]],
+  ['gpu_5fconfiguration',['gpu_configuration',['../madlib__keras__gpu__info_8sql__in.html#a6137bdc8ae8450e34402b2284e433163',1,'gpu_configuration(text output_table, text source):&#160;madlib_keras_gpu_info.sql_in'],['../madlib__keras__gpu__info_8sql__in.html#a496956346dde3d405321002d57029032',1,'gpu_configuration(text output_table):&#160;madlib_keras_gpu_info.sql_in'],['../madlib__keras__gpu__info_8sql__in.html#a8d7384850308ee00dcd099d78a6b0ce0',1,'gpu_configuration():&#160;madlib_keras_gpu_info.sql_in']]],
+  ['gpu_5finfo_5fnvidia',['gpu_info_nvidia',['../madlib__keras__gpu__info_8sql__in.html#a0e7a037e393213b2cad2c0ea8f620454',1,'madlib_keras_gpu_info.sql_in']]],
+  ['gpu_5finfo_5ftensorflow',['gpu_info_tensorflow',['../madlib__keras__gpu__info_8sql__in.html#a7b7f9bc2d5da543f271d55372d4f6aa8',1,'madlib_keras_gpu_info.sql_in']]],
+  ['graph_5fapsp',['graph_apsp',['../apsp_8sql__in.html#ad68f09e5e53e08e36e1a35078ff557db',1,'graph_apsp(text vertex_table, text vertex_id, text edge_table, text edge_args, text out_table, text grouping_cols):&#160;apsp.sql_in'],['../apsp_8sql__in.html#ae96a0c74959a789f8a1497167b75431e',1,'graph_apsp(text vertex_table, text vertex_id, text edge_table, text edge_args, text out_table):&#160;apsp.sql_in'],['../apsp_8sql__in.html#a1fa9c66ee7eed15a997fb590bee6e8bf',1,'graph_apsp(varchar message):&#160;apsp.sql_in'],['../apsp_8sql__in.html#af271eb7d4c7f8d8d4c3a20873af99c6f',1,'graph_apsp():&#160;apsp.sql_in']]],
+  ['graph_5fapsp_5fget_5fpath',['graph_apsp_get_path',['../apsp_8sql__in.html#aac90be82123f8e2029d4579a6f4f52f1',1,'apsp.sql_in']]],
+  ['graph_5favg_5fpath_5flength',['graph_avg_path_length',['../measures_8sql__in.html#ab7dace0acc3660325313d677e354881a',1,'graph_avg_path_length(text apsp_table, text out_table):&#160;measures.sql_in'],['../measures_8sql__in.html#aec97c2b8bc79f58ef29a217f5bce355c',1,'graph_avg_path_length(varchar message):&#160;measures.sql_in'],['../measures_8sql__in.html#aa25fae8b5b6c0626f081e7e2ec8eb805',1,'graph_avg_path_length():&#160;measures.sql_in']]],
+  ['graph_5fbfs',['graph_bfs',['../bfs_8sql__in.html#adf1cdb7c2211062fba08c3d3a67ff5fb',1,'graph_bfs(text vertex_table, text vertex_id, text edge_table, text edge_args, int source_vertex, text out_table, int max_distance, boolean directed, text grouping_cols):&#160;bfs.sql_in'],['../bfs_8sql__in.html#a8e4e39648537cbf3cb97b4b5e2096130',1,'graph_bfs(text vertex_table, text vertex_id, text edge_table, text edge_args, int source_vertex, text out_table, int max_distance, boolean directed):&#160;bfs.sql_in'],['../bfs_8sql__in.html#a8da98efc5bdf8bb0884b5e9f7fe0e6c2',1,'graph_bfs(text vertex_table, text vertex_id, text edge_table, text edge_args, int source_vertex, text out_table, int max_distance):&#160;bfs.sql_in'],['../bfs_8sql__in.html#a4646561abd4554b14e677549ec39b1df',1,'graph_bfs(text vertex_table, text vertex_id, text edge_table, text edge_args, int source_vertex, text out_table):&#160;bfs.sql_in'],['../bfs_8sql__in.html#a8f48e07f319931c8614067271910950e',1,'graph_bfs(varchar message):&#160;bfs.sql_in'],['../bfs_8sql__in.html#aa2f42b689595986506a18a2478924d51',1,'graph_bfs():&#160;bfs.sql_in']]],
+  ['graph_5fcloseness',['graph_closeness',['../measures_8sql__in.html#a92ea2637ec03b501b42c70a0b4e7830d',1,'graph_closeness(text apsp_table, text out_table, text vertex_filter_expr):&#160;measures.sql_in'],['../measures_8sql__in.html#af9804adc2dff812797d14ed247645cc4',1,'graph_closeness(text apsp_table, text out_table):&#160;measures.sql_in'],['../measures_8sql__in.html#af4a8178a71cdf3118b6b2959362e2b78',1,'graph_closeness(varchar message):&#160;measures.sql_in'],['../measures_8sql__in.html#a38e7bc842a07bd950ed6c1e7f9d9db6b',1,'graph_closeness():&#160;measures.sql_in']]],
+  ['graph_5fdiameter',['graph_diameter',['../measures_8sql__in.html#a1c43ead98a50b6fc88326c3ad8a55233',1,'graph_diameter(text apsp_table, text out_table):&#160;measures.sql_in'],['../measures_8sql__in.html#a5e53de2a59a2af332a6c87535b1a109b',1,'graph_diameter(varchar message):&#160;measures.sql_in'],['../measures_8sql__in.html#a771f73ee5656089ade4f90a1a87c4c21',1,'graph_diameter():&#160;measures.sql_in']]],
+  ['graph_5fsssp',['graph_sssp',['../sssp_8sql__in.html#a3d544f93104e341b03f5c70c89211bcb',1,'graph_sssp(text vertex_table, text vertex_id, text edge_table, text edge_args, bigint source_vertex, text out_table, text grouping_cols):&#160;sssp.sql_in'],['../sssp_8sql__in.html#a6dc0542cf7ddf9664144f4b0614fa270',1,'graph_sssp(text vertex_table, text vertex_id, text edge_table, text edge_args, bigint source_vertex, text out_table):&#160;sssp.sql_in'],['../sssp_8sql__in.html#ab66bf023a28ef36282034c3c4486efb7',1,'graph_sssp(varchar message):&#160;sssp.sql_in'],['../sssp_8sql__in.html#a8f7317dc5d811e45be43452cbc347d49',1,'graph_sssp():&#160;sssp.sql_in']]],
+  ['graph_5fsssp_5fget_5fpath',['graph_sssp_get_path',['../sssp_8sql__in.html#a3c959487e058244e1cc799653510d154',1,'sssp.sql_in']]],
+  ['graph_5fvertex_5fdegrees',['graph_vertex_degrees',['../measures_8sql__in.html#afca698e3642d08cc7d44f179a568e0f1',1,'graph_vertex_degrees(text vertex_table, text vertex_id, text edge_table, text edge_args, text out_table, text grouping_cols):&#160;measures.sql_in'],['../measures_8sql__in.html#afbfd5dac93dbf429ed609f843e4b9dff',1,'graph_vertex_degrees(text vertex_table, text vertex_id, text edge_table, text edge_args, text out_table):&#160;measures.sql_in'],['../measures_8sql__in.html#a1bd8dac9ed72c3f41d96f1d1da1b9346',1,'graph_vertex_degrees(varchar message):&#160;measures.sql_in'],['../measures_8sql__in.html#a7a504e6eeebc7bdbe82d4dd7e0b82d0a',1,'graph_vertex_degrees():&#160;measures.sql_in']]],
+  ['graph_5fwcc_5fhistogram',['graph_wcc_histogram',['../wcc_8sql__in.html#adbe3bf8145a298a8ab1ee460e19efa67',1,'wcc.sql_in']]],
+  ['graph_5fwcc_5flargest_5fcpt',['graph_wcc_largest_cpt',['../wcc_8sql__in.html#a8d2a296a69d390d6a342ee4654c29295',1,'wcc.sql_in']]],
+  ['graph_5fwcc_5fnum_5fcpts',['graph_wcc_num_cpts',['../wcc_8sql__in.html#a1d15b21a3c05f5d14bf436e8b2e03729',1,'wcc.sql_in']]],
+  ['graph_5fwcc_5freachable_5fvertices',['graph_wcc_reachable_vertices',['../wcc_8sql__in.html#aa7e564797133e5c08a9b95f41ef3cae6',1,'wcc.sql_in']]],
+  ['graph_5fwcc_5fvertex_5fcheck',['graph_wcc_vertex_check',['../wcc_8sql__in.html#aabd0447cf6910a077cf90a1a4cce52c8',1,'wcc.sql_in']]]
+];
diff --git a/docs/rc/search/functions_8.html b/docs/rc/search/functions_8.html
new file mode 100644
index 0000000..b55f0e6
--- /dev/null
+++ b/docs/rc/search/functions_8.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_8.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/functions_8.js b/docs/rc/search/functions_8.js
new file mode 100644
index 0000000..f1db670
--- /dev/null
+++ b/docs/rc/search/functions_8.js
@@ -0,0 +1,11 @@
+var searchData=
+[
+  ['hetero_5flinregr_5ffinal',['hetero_linregr_final',['../linear_8sql__in.html#a4b2e38f45a8e519af5947fcc2eb02829',1,'linear.sql_in']]],
+  ['hetero_5flinregr_5fmerge_5fstates',['hetero_linregr_merge_states',['../linear_8sql__in.html#ad10649c8460c337a285cf20f2b87d0c5',1,'linear.sql_in']]],
+  ['hetero_5flinregr_5ftransition',['hetero_linregr_transition',['../linear_8sql__in.html#a4a583204053716bbece6321f5d9332b1',1,'linear.sql_in']]],
+  ['heteroskedasticity_5ftest_5flinregr',['heteroskedasticity_test_linregr',['../linear_8sql__in.html#a6d36a88e06a31753f4045a6c4539ca10',1,'linear.sql_in']]],
+  ['hits',['hits',['../hits_8sql__in.html#a8b627c2d93594ba5c4963a91bd89c702',1,'hits(text vertex_table, text vertex_id, text edge_table, text edge_args, text out_table, integer max_iter, float8 threshold, varchar grouping_cols):&#160;hits.sql_in'],['../hits_8sql__in.html#ae4965e9ad3dde6bf32393371f98ede7b',1,'hits(text vertex_table, text vertex_id, text edge_table, text edge_args, text out_table, integer max_iter, float8 threshold):&#160;hits.sql_in'],['../hits_8sql__in.html#acef1d74fb74333a9868bb8edee001d75',1,'hits(text vertex_table, text vertex_id, text edge_table, text edge_args, text out_table, integer max_iter):&#160;hits.sql_in'],['../hits_8sql__in.html#a67b3744cbd2995e6c5021420a0299562',1,'hits(text vertex_table, text vertex_id, text edge_table, text edge_args, text out_table):&#160;hits.sql_in'],['../hits_8sql__in.html#a7068f61698c2e76763cd06758ac0fbac',1,'hits(varchar message):&#160;hits.sql_in'],['../hits_8sql__in.html#a6c13c19b2e0db69af3d14e381b948e65',1,'hits():&#160;hits.sql_in']]],
+  ['hypergeometric_5fcdf',['hypergeometric_cdf',['../prob_8sql__in.html#a5c48e7fa2fc7bcbc69c7f4da663d457f',1,'prob.sql_in']]],
+  ['hypergeometric_5fpmf',['hypergeometric_pmf',['../prob_8sql__in.html#afbd2f8d9fb30fb179f59cc14f1fd8d6d',1,'prob.sql_in']]],
+  ['hypergeometric_5fquantile',['hypergeometric_quantile',['../prob_8sql__in.html#a813cc27fe097e797ed0fb6022c7bb79a',1,'prob.sql_in']]]
+];
diff --git a/docs/rc/search/functions_9.html b/docs/rc/search/functions_9.html
new file mode 100644
index 0000000..c73f07b
--- /dev/null
+++ b/docs/rc/search/functions_9.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_9.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/functions_9.js b/docs/rc/search/functions_9.js
new file mode 100644
index 0000000..eca34a1
--- /dev/null
+++ b/docs/rc/search/functions_9.js
@@ -0,0 +1,31 @@
+var searchData=
+[
+  ['index_5f2d_5farray',['index_2d_array',['../linalg_8sql__in.html#abe23dd6c6963093863c2a107425f6384',1,'linalg.sql_in']]],
+  ['index_5fweighted_5fsample',['index_weighted_sample',['../sample_8sql__in.html#af0bfa324d198f8059566757f38fe5c93',1,'sample.sql_in']]],
+  ['internal_5fcompute_5fkmeans',['internal_compute_kmeans',['../kmeans_8sql__in.html#a4a1b8fc3dd6da4d4491927888d70e7b9',1,'kmeans.sql_in']]],
+  ['internal_5fcompute_5flmf_5figd',['internal_compute_lmf_igd',['../lmf_8sql__in.html#aae221f5f5b2f670a93c00202b251857d',1,'lmf.sql_in']]],
+  ['internal_5fexecute_5fusing_5fkmeans_5fargs',['internal_execute_using_kmeans_args',['../kmeans_8sql__in.html#abcbeb5878d5a31f600764fbb1fbe5578',1,'kmeans.sql_in']]],
+  ['internal_5fexecute_5fusing_5flmf_5figd_5fargs',['internal_execute_using_lmf_igd_args',['../lmf_8sql__in.html#aea3df2d68e7a289da928b8a584ac719e',1,'lmf.sql_in']]],
+  ['internal_5fkeras_5feval_5ffinal',['internal_keras_eval_final',['../madlib__keras_8sql__in.html#a43bdec57230522681fb6d39cc826f7ba',1,'madlib_keras.sql_in']]],
+  ['internal_5fkeras_5feval_5fmerge',['internal_keras_eval_merge',['../madlib__keras_8sql__in.html#aba484f65a2ecdf6005e441cc27e8da09',1,'madlib_keras.sql_in']]],
+  ['internal_5fkeras_5feval_5ftransition',['internal_keras_eval_transition',['../madlib__keras_8sql__in.html#a05ede18786181c1673176940e79e4dce',1,'madlib_keras.sql_in']]],
+  ['internal_5fkeras_5fevaluate',['internal_keras_evaluate',['../madlib__keras_8sql__in.html#ad2d44bbeae0b0a466853228a740c2599',1,'madlib_keras.sql_in']]],
+  ['internal_5fkeras_5fpredict',['internal_keras_predict',['../madlib__keras_8sql__in.html#a96f46662a481884788f6b33f522136ba',1,'madlib_keras.sql_in']]],
+  ['internal_5flincrf_5flbfgs_5fconverge',['internal_lincrf_lbfgs_converge',['../crf_8sql__in.html#a47ef6b30d54ac4ef89cb664a681d1067',1,'crf.sql_in']]],
+  ['internal_5flincrf_5flbfgs_5fresult',['internal_lincrf_lbfgs_result',['../crf_8sql__in.html#aff63c9a56bebf501a2f40971271605c2',1,'crf.sql_in']]],
+  ['internal_5flinear_5fsvm_5figd_5fdistance',['internal_linear_svm_igd_distance',['../svm_8sql__in.html#a81b1bdf8278bf77439ac9e101ae2ae7a',1,'svm.sql_in']]],
+  ['internal_5flinear_5fsvm_5figd_5fresult',['internal_linear_svm_igd_result',['../svm_8sql__in.html#a21dc69a5bcf6e08f6c0d6cb9c4461091',1,'svm.sql_in']]],
+  ['internal_5flmf_5figd_5fdistance',['internal_lmf_igd_distance',['../lmf_8sql__in.html#a05860ded070a214128e0b4e64c9c989e',1,'lmf.sql_in']]],
+  ['internal_5flmf_5figd_5fresult',['internal_lmf_igd_result',['../lmf_8sql__in.html#a8dede6aa8d024f0bb9acca9a83dfd579',1,'lmf.sql_in']]],
+  ['internal_5fmlp_5figd_5fdistance',['internal_mlp_igd_distance',['../mlp_8sql__in.html#ae14405393c46de803ff1c0e11e85fdfb',1,'mlp.sql_in']]],
+  ['internal_5fmlp_5figd_5fresult',['internal_mlp_igd_result',['../mlp_8sql__in.html#a06a6308d58b039b6ae316fdfb9478a46',1,'mlp.sql_in']]],
+  ['internal_5fmlp_5fminibatch_5fresult',['internal_mlp_minibatch_result',['../mlp_8sql__in.html#a603a8dd9a3129e7c959453d6a01cee5b',1,'mlp.sql_in']]],
+  ['internal_5fpredict_5fmlp',['internal_predict_mlp',['../mlp_8sql__in.html#aa90ab3d6f541a7d5eb8cb7c8a0083c3a',1,'mlp.sql_in']]],
+  ['inverse_5fgamma_5fcdf',['inverse_gamma_cdf',['../prob_8sql__in.html#a85e9c16aa2c6973ddeb7883a5f153d93',1,'prob.sql_in']]],
+  ['inverse_5fgamma_5fpdf',['inverse_gamma_pdf',['../prob_8sql__in.html#a126211c2172a43a654288fa72a2349f9',1,'prob.sql_in']]],
+  ['inverse_5fgamma_5fquantile',['inverse_gamma_quantile',['../prob_8sql__in.html#a5876aae01f14729866d4fd52918a65ba',1,'prob.sql_in']]],
+  ['is_5fpg_5fmajor_5fversion_5fless_5fthan',['is_pg_major_version_less_than',['../utilities_8sql__in.html#af4627d77d237aeadaa4b43ff168ae322',1,'utilities.sql_in']]],
+  ['is_5ftable_5funlogged',['is_table_unlogged',['../utilities_8sql__in.html#aaaf5ac0d3f6416b4bb093fd17c5c2a14',1,'utilities.sql_in']]],
+  ['is_5fver_5fgreater_5fthan_5fgp_5f640_5for_5fpg_5f11',['is_ver_greater_than_gp_640_or_pg_11',['../utilities_8sql__in.html#a4df02278e7bba3e42a6eab87597e4ea8',1,'utilities.sql_in']]],
+  ['isnan',['isnan',['../utilities_8sql__in.html#a48bed63cab78a5446fa4c122eaae3a40',1,'utilities.sql_in']]]
+];
diff --git a/docs/rc/search/functions_a.html b/docs/rc/search/functions_a.html
new file mode 100644
index 0000000..f10ad63
--- /dev/null
+++ b/docs/rc/search/functions_a.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_a.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/functions_a.js b/docs/rc/search/functions_a.js
new file mode 100644
index 0000000..e5d2127
--- /dev/null
+++ b/docs/rc/search/functions_a.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+  ['knn',['knn',['../knn_8sql__in.html#a687c300ef3aa00fe938a9b13fd143792',1,'knn(varchar point_source, varchar point_column_name, varchar point_id, varchar label_column_name, varchar test_source, varchar test_column_name, varchar test_id, varchar output_table, integer k, boolean output_neighbors, text fn_dist, boolean weighted_avg, varchar algorithm, varchar algorithm_params):&#160;knn.sql_in'],['../knn_8sql__in.html#ac42acf0f15846a4f899b6a187c58e331',1,'knn(varchar point_source, varchar point_column_name, varchar point_id, varchar label_column_name, varchar test_source, varchar test_column_name, varchar test_id, varchar output_table, integer k, boolean output_neighbors, text fn_dist, boolean weighted_avg, varchar algorithm):&#160;knn.sql_in'],['../knn_8sql__in.html#a620b4ece3bc259eb442783f2de32aef0',1,'knn(varchar point_source, varchar point_column_name, varchar point_id, varchar label_column_name, varchar test_source, varchar test_column_name, varchar test_id, varchar output_table, integer k, boolean output_neighbors, text fn_dist, boolean weighted_avg):&#160;knn.sql_in'],['../knn_8sql__in.html#a8a9a0295a71263ffb66e0775e8e95d18',1,'knn(varchar point_source, varchar point_column_name, varchar point_id, varchar label_column_name, varchar test_source, varchar test_column_name, varchar test_id, varchar output_table, integer k, boolean output_neighbors, text fn_dist):&#160;knn.sql_in'],['../knn_8sql__in.html#adc1c9019d0460726b18fd165ac990a7a',1,'knn(varchar point_source, varchar point_column_name, varchar point_id, varchar label_column_name, varchar test_source, varchar test_column_name, varchar test_id, varchar output_table, integer k, boolean output_neighbors):&#160;knn.sql_in'],['../knn_8sql__in.html#a51549fc4079c186114a7698ecc765358',1,'knn(varchar point_source, varchar point_column_name, varchar point_id, varchar label_column_name, varchar test_source, varchar test_column_name, varchar test_id, varchar output_table, integer k):&#160;knn.sql_in'],['../knn_8sql__in.html#a42cc837c6bb36c1a6131f27cd11ebe98',1,'knn(varchar point_source, varchar point_column_name, varchar point_id, varchar label_column_name, varchar test_source, varchar test_column_name, varchar test_id, varchar output_table):&#160;knn.sql_in'],['../knn_8sql__in.html#aa50ce144a6da9dcf99730be0b91e02e3',1,'knn(varchar message):&#160;knn.sql_in'],['../knn_8sql__in.html#a9b92399768011dbbffe7d08d2f96ff1d',1,'knn():&#160;knn.sql_in']]],
+  ['kolmogorov_5fcdf',['kolmogorov_cdf',['../prob_8sql__in.html#aeef43f74f583bdff17bd074d9c0d9607',1,'prob.sql_in']]],
+  ['ks_5ftest_5ffinal',['ks_test_final',['../hypothesis__tests_8sql__in.html#abd3f6d1d6dc4203cab3bcc980ec8ed8d',1,'hypothesis_tests.sql_in']]],
+  ['ks_5ftest_5ftransition',['ks_test_transition',['../hypothesis__tests_8sql__in.html#a58ffb5b2b8392e005f4f3e21560df93f',1,'hypothesis_tests.sql_in']]]
+];
diff --git a/docs/rc/search/functions_b.html b/docs/rc/search/functions_b.html
new file mode 100644
index 0000000..172ea1b
--- /dev/null
+++ b/docs/rc/search/functions_b.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_b.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/functions_b.js b/docs/rc/search/functions_b.js
new file mode 100644
index 0000000..3549618
--- /dev/null
+++ b/docs/rc/search/functions_b.js
@@ -0,0 +1,51 @@
+var searchData=
+[
+  ['l1norm',['l1norm',['../svec__util_8sql__in.html#a9e9b64c93b29c19adfb670f0171f14bf',1,'svec_util.sql_in']]],
+  ['l2norm',['l2norm',['../svec__util_8sql__in.html#a1b6bb42a5176b020aed12734df23aca9',1,'svec_util.sql_in']]],
+  ['laplace_5fcdf',['laplace_cdf',['../prob_8sql__in.html#a64e197de8da3761acdeec9db7e211703',1,'prob.sql_in']]],
+  ['laplace_5fpdf',['laplace_pdf',['../prob_8sql__in.html#a750278ad29d514793f76e159b773f410',1,'prob.sql_in']]],
+  ['laplace_5fquantile',['laplace_quantile',['../prob_8sql__in.html#a77f94fc43d4777fc4f68d18e29454a81',1,'prob.sql_in']]],
+  ['lda_5fget_5fperplexity',['lda_get_perplexity',['../lda_8sql__in.html#a25c3ef12d9808d8a38c5fd2630f3b5a9',1,'lda.sql_in']]],
+  ['lda_5fget_5ftopic_5fdesc',['lda_get_topic_desc',['../lda_8sql__in.html#a4ac16d87d50821aadcab0d75d65b3f1b',1,'lda.sql_in']]],
+  ['lda_5fget_5ftopic_5fword_5fcount',['lda_get_topic_word_count',['../lda_8sql__in.html#ace20b6314e5b4e98929a98a6f05d925d',1,'lda.sql_in']]],
+  ['lda_5fget_5fword_5ftopic_5fcount',['lda_get_word_topic_count',['../lda_8sql__in.html#a455699e72328d6b105c61a3c9e7ae5dc',1,'lda.sql_in']]],
+  ['lda_5fget_5fword_5ftopic_5fmapping',['lda_get_word_topic_mapping',['../lda_8sql__in.html#afa13f3db33ee5ef4fef17f5daafa866e',1,'lda.sql_in']]],
+  ['lda_5fparse_5fmodel',['lda_parse_model',['../lda_8sql__in.html#a3ea35eb8ae6670a07948a56b85c1710c',1,'lda.sql_in']]],
+  ['lda_5fpredict',['lda_predict',['../lda_8sql__in.html#af1fde06c39dd12bb9e5544997f815323',1,'lda_predict(text data_table, text model_table, text output_table):&#160;lda.sql_in'],['../lda_8sql__in.html#aaa89e30c8fd0ba41b6feee01ee195330',1,'lda_predict(text data_table, text model_table, text output_table, int4 iter_num):&#160;lda.sql_in']]],
+  ['lda_5ftrain',['lda_train',['../lda_8sql__in.html#aeb7593251a4dedb695494f65dc2d1f80',1,'lda_train(text data_table, text model_table, text output_data_table, int4 voc_size, int4 topic_num, int4 iter_num, float8 alpha, float8 beta):&#160;lda.sql_in'],['../lda_8sql__in.html#ac154c2e71664bdc81f7d6c9d0d491ca1',1,'lda_train(text data_table, text model_table, text output_data_table, int4 voc_size, int4 topic_num, int4 iter_num, float8 alpha, float8 beta, int4 evaluate_every, float8 perplexity_tol):&#160;lda.sql_in'],['../lda_8sql__in.html#a006d5a0963cc300a81b9fd1d0fdd98da',1,'lda_train(text data_table, text model_table, text output_data_table, int4 voc_size, int4 topic_num, int4 iter_num, float8 alpha, float8 beta, int4 evaluate_every):&#160;lda.sql_in']]],
+  ['lincrf_5flbfgs_5fstep',['lincrf_lbfgs_step',['../crf_8sql__in.html#a590cd748d8e18055d851e7d4f4a3ca00',1,'crf.sql_in']]],
+  ['lincrf_5flbfgs_5fstep_5ffinal',['lincrf_lbfgs_step_final',['../crf_8sql__in.html#a5bf4b2738003096f4eeeccd0eb5e98f0',1,'crf.sql_in']]],
+  ['lincrf_5flbfgs_5fstep_5fmerge_5fstates',['lincrf_lbfgs_step_merge_states',['../crf_8sql__in.html#a45f3eaf0c80cdfa99872cd071020d5c7',1,'crf.sql_in']]],
+  ['lincrf_5flbfgs_5fstep_5ftransition',['lincrf_lbfgs_step_transition',['../crf_8sql__in.html#a2e7104fea95ca76587e7fae9bcb0d7ed',1,'crf.sql_in']]],
+  ['lincrf_5ftrain',['lincrf_train',['../crf_8sql__in.html#a336ac57ae3d07e331646d397c7651d3d',1,'lincrf_train(text train_feature_tbl, text train_featureset_tbl, text label_tbl, text crf_stats_tbl, text crf_weights_tbl, integer max_iterations):&#160;crf.sql_in'],['../crf_8sql__in.html#a6b7059a5e22e40eae252c718217bf574',1,'lincrf_train(text train_feature_tbl, text train_featureset_tbl, text label_tbl, text crf_stats_tbl, text crf_weights_tbl):&#160;crf.sql_in']]],
+  ['linear_5fsolver_5fdense',['linear_solver_dense',['../dense__linear__systems_8sql__in.html#a885d6a36c07dc2c048948cb5287a3b92',1,'linear_solver_dense(varchar input_string):&#160;dense_linear_systems.sql_in'],['../dense__linear__systems_8sql__in.html#a2272a21f30096a79cd543fe66a0aee19',1,'linear_solver_dense():&#160;dense_linear_systems.sql_in'],['../dense__linear__systems_8sql__in.html#ab7de234e67060a4fc48978e430642baa',1,'linear_solver_dense(varchar source_table, varchar out_table, varchar row_id, varchar left_hand_side, varchar right_hand_side, varchar grouping_cols, varchar optimizer, varchar optimizer_options):&#160;dense_linear_systems.sql_in'],['../dense__linear__systems_8sql__in.html#a003b5a21cffde500fa808f1c6e9c14ae',1,'linear_solver_dense(varchar source_table, varchar out_table, varchar row_id, varchar left_hand_side, varchar right_hand_side):&#160;dense_linear_systems.sql_in']]],
+  ['linear_5fsolver_5fsparse',['linear_solver_sparse',['../sparse__linear__systems_8sql__in.html#a3b3b7eea8b91c0a16ede3e7a9c6b17ef',1,'linear_solver_sparse(varchar input_string):&#160;sparse_linear_systems.sql_in'],['../sparse__linear__systems_8sql__in.html#afe32393baf3e20ce6906c9307aab6bea',1,'linear_solver_sparse():&#160;sparse_linear_systems.sql_in'],['../sparse__linear__systems_8sql__in.html#a03a7296e0a44c42584d2faea62e4fdc1',1,'linear_solver_sparse(varchar lhs_table, varchar rhs_table, varchar out_table, varchar lhs_row_id, varchar lhs_col_id, varchar lhs_value, varchar rhs_row_id, varchar rhs_value, integer num_vars, varchar grouping_cols, varchar optimizer, varchar optimizer_options):&#160;sparse_linear_systems.sql_in'],['../sparse__linear__systems_8sql__in.html#a3f6259c7cf82dc93b31694e1a12231e8',1,'linear_solver_sparse(varchar lhs_table, varchar rhs_table, varchar out_table, varchar lhs_row_id, varchar lhs_col_id, varchar lhs_value, varchar rhs_row_id, varchar rhs_value, integer num_vars):&#160;sparse_linear_systems.sql_in'],['../sparse__linear__systems_8sql__in.html#a01d5270cb0badbbd7a581588bfeff98f',1,'linear_solver_sparse(varchar lhs_table, varchar rhs_table, varchar out_table, varchar lhs_row_id, varchar lhs_col_id, varchar lhs_value, varchar rhs_row_id, varchar rhs_value, integer num_vars, varchar grouping_cols):&#160;sparse_linear_systems.sql_in'],['../sparse__linear__systems_8sql__in.html#acc9e20ee876b43f82e5f98dc2b4c88ea',1,'linear_solver_sparse(varchar lhs_table, varchar rhs_table, varchar out_table, varchar lhs_row_id, varchar lhs_col_id, varchar lhs_value, varchar rhs_row_id, varchar rhs_value, integer num_vars, varchar grouping_cols, varchar optimizer):&#160;sparse_linear_systems.sql_in']]],
+  ['linear_5fsvm_5figd_5ffinal',['linear_svm_igd_final',['../svm_8sql__in.html#a614936d27848149eead4581db57a9236',1,'svm.sql_in']]],
+  ['linear_5fsvm_5figd_5fmerge',['linear_svm_igd_merge',['../svm_8sql__in.html#a241eea31c78737ecbb5da6639debec3b',1,'svm.sql_in']]],
+  ['linear_5fsvm_5figd_5fstep',['linear_svm_igd_step',['../svm_8sql__in.html#a3f2ae27d1c7b0ed79e4acbb55c1a859d',1,'svm.sql_in']]],
+  ['linear_5fsvm_5figd_5ftransition',['linear_svm_igd_transition',['../svm_8sql__in.html#a5e01d222a48efa864e94023cdad2cd0d',1,'svm.sql_in']]],
+  ['linregr',['linregr',['../linear_8sql__in.html#a5fcd1daa9796dccf5430929c37ea0ee9',1,'linear.sql_in']]],
+  ['linregr_5ffinal',['linregr_final',['../linear_8sql__in.html#a28b69254ba5cd513b35ba6b17efd2c35',1,'linear.sql_in']]],
+  ['linregr_5fmerge_5fstates',['linregr_merge_states',['../linear_8sql__in.html#a042536820ffbad498a4e1c410f949e35',1,'linear.sql_in']]],
+  ['linregr_5fpredict',['linregr_predict',['../linear_8sql__in.html#a8da0030683d5931b93e5f2bee3fd0544',1,'linregr_predict(float8[] coef, float8[] col_ind_var):&#160;linear.sql_in'],['../linear_8sql__in.html#a98442804f12e5489dedf0ada2d8c273e',1,'linregr_predict(text message):&#160;linear.sql_in'],['../linear_8sql__in.html#a1cf80cdbcabf4ba83b128c08bc804ca5',1,'linregr_predict():&#160;linear.sql_in']]],
+  ['linregr_5ftrain',['linregr_train',['../linear_8sql__in.html#ad0175a9ecc455d9679f7d251af264848',1,'linregr_train(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, varchar grouping_cols, boolean heteroskedasticity_option):&#160;linear.sql_in'],['../linear_8sql__in.html#ac807cf4749db37b6fc7be24c2db10d96',1,'linregr_train(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, varchar grouping_cols):&#160;linear.sql_in'],['../linear_8sql__in.html#a71fb4a634f3145d0369879c931e0f16e',1,'linregr_train(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname):&#160;linear.sql_in'],['../linear_8sql__in.html#a1469685d518752784080c0b2811c9a81',1,'linregr_train():&#160;linear.sql_in'],['../linear_8sql__in.html#a5f8e25203a2b3a9d0fd332a539972292',1,'linregr_train(varchar message):&#160;linear.sql_in']]],
+  ['linregr_5ftransition',['linregr_transition',['../linear_8sql__in.html#aa2b87a3e60272176bfa2fb859f99461a',1,'linear.sql_in']]],
+  ['lmf_5figd_5ffinal',['lmf_igd_final',['../lmf_8sql__in.html#a298f46c944cd6813b0360514bf8c9ed1',1,'lmf.sql_in']]],
+  ['lmf_5figd_5fmerge',['lmf_igd_merge',['../lmf_8sql__in.html#ae3bb16a76a927e1e59420d4a8e13012f',1,'lmf.sql_in']]],
+  ['lmf_5figd_5frun',['lmf_igd_run',['../lmf_8sql__in.html#ac1acb1f0e1f7008118f21c83546a4602',1,'lmf_igd_run(varchar rel_output, regclass rel_source, varchar col_row, varchar col_column, varchar col_value, integer row_dim=&quot;SELECT max(col_row) FROM rel_source&quot;, integer column_dim=&quot;SELECT max(col_col) FROM rel_source&quot;, integer max_rank=20, float8 stepsize=0.01, float8 scale_factor=0.1, integer num_iterations=10, float8 tolerance=0.0001):&#160;lmf.sql_in'],['../lmf_8sql__in.html#a917cb41e439c6786f91a27463dca0732',1,'lmf_igd_run(varchar rel_output, regclass rel_source, varchar col_row, varchar col_column, varchar col_value, integer row_dim, integer column_dim, integer max_rank, float8 stepsize, float8 scale_factor):&#160;lmf.sql_in'],['../lmf_8sql__in.html#a9b18ea9dd016d109a5c001762394e788',1,'lmf_igd_run(varchar rel_output, regclass rel_source, varchar col_row, varchar col_column, varchar col_value, integer row_dim, integer column_dim, integer max_rank, float8 stepsize):&#160;lmf.sql_in'],['../lmf_8sql__in.html#a0c5c2d04936ac341e8c054237266938b',1,'lmf_igd_run(varchar rel_output, regclass rel_source, varchar col_row, varchar col_column, varchar col_value, integer row_dim, integer column_dim, integer max_rank):&#160;lmf.sql_in'],['../lmf_8sql__in.html#acaeef70cbcad01aadbad6fbce81d42fb',1,'lmf_igd_run(varchar rel_output, regclass rel_source, varchar col_row, varchar col_column, text col_value):&#160;lmf.sql_in']]],
+  ['lmf_5figd_5fstep',['lmf_igd_step',['../lmf_8sql__in.html#a54d2ca2048d9a0c29d5593530b932a23',1,'lmf.sql_in']]],
+  ['lmf_5figd_5ftransition',['lmf_igd_transition',['../lmf_8sql__in.html#a187574cfe85888b29d6b1658554e7507',1,'lmf.sql_in']]],
+  ['load_5fkeras_5fmodel',['load_keras_model',['../keras__model__arch__table_8sql__in.html#abe844bd378708abc2077326972057504',1,'load_keras_model(varchar keras_model_arch_table, json model_arch, bytea model_weights, text name, text description):&#160;keras_model_arch_table.sql_in'],['../keras__model__arch__table_8sql__in.html#a3c05aee1361fb9f590f1590e86ecdb66',1,'load_keras_model(varchar keras_model_arch_table, json model_arch):&#160;keras_model_arch_table.sql_in'],['../keras__model__arch__table_8sql__in.html#a0498e740cd1cd2712b20e878c6f9d0f3',1,'load_keras_model(varchar keras_model_arch_table, json model_arch, bytea model_weights):&#160;keras_model_arch_table.sql_in'],['../keras__model__arch__table_8sql__in.html#ac919b3c142e996acd71848338194aa02',1,'load_keras_model(varchar keras_model_arch_table, json model_arch, bytea model_weights, text name):&#160;keras_model_arch_table.sql_in'],['../keras__model__arch__table_8sql__in.html#a51327e5814450c3c5991a2b885cf1ab2',1,'load_keras_model(varchar message):&#160;keras_model_arch_table.sql_in'],['../keras__model__arch__table_8sql__in.html#a024b71018a508cb2773a52240c7af121',1,'load_keras_model():&#160;keras_model_arch_table.sql_in']]],
+  ['load_5fmodel_5fselection_5ftable',['load_model_selection_table',['../madlib__keras__model__selection_8sql__in.html#a34e35b3e0adcac558b422d9483421065',1,'madlib_keras_model_selection.sql_in']]],
+  ['logistic',['logistic',['../logistic_8sql__in.html#a4ded9be5c8b111dbb3109efaad83d69e',1,'logistic.sql_in']]],
+  ['logistic_5fcdf',['logistic_cdf',['../prob_8sql__in.html#a140f674876813d5e786a4d8ba8d75c87',1,'prob.sql_in']]],
+  ['logistic_5fpdf',['logistic_pdf',['../prob_8sql__in.html#afa38eb6c61d3c9825d5c172e6c17dbf7',1,'prob.sql_in']]],
+  ['logistic_5fquantile',['logistic_quantile',['../prob_8sql__in.html#a5a77a0bc5884af2a914a955174892ae2',1,'prob.sql_in']]],
+  ['lognormal_5fcdf',['lognormal_cdf',['../prob_8sql__in.html#a4c05b347f8feb64e1236d21b850af61e',1,'prob.sql_in']]],
+  ['lognormal_5fpdf',['lognormal_pdf',['../prob_8sql__in.html#a7370b797bf450f9aa54d4fea4d64d611',1,'prob.sql_in']]],
+  ['lognormal_5fquantile',['lognormal_quantile',['../prob_8sql__in.html#aab3a6de990ae5a81834274a1cf9cad8f',1,'prob.sql_in']]],
+  ['logregr_5faccuracy',['logregr_accuracy',['../cross__validation_8sql__in.html#a2d1571ffa794176a5dfed9d35e70fed7',1,'cross_validation.sql_in']]],
+  ['logregr_5fpredict',['logregr_predict',['../logistic_8sql__in.html#abb60fcbfa7f13c4b62950b3ae5ee46b2',1,'logregr_predict(float8[] coef, float8[] col_ind_var):&#160;logistic.sql_in'],['../logistic_8sql__in.html#acc8af7a39e7b0d604c2760d9d6bd0b5e',1,'logregr_predict(text message):&#160;logistic.sql_in'],['../logistic_8sql__in.html#af3eae2b8acd75d4c6c4db8c79489c58f',1,'logregr_predict():&#160;logistic.sql_in']]],
+  ['logregr_5fpredict_5fprob',['logregr_predict_prob',['../logistic_8sql__in.html#acb8bcffac549a0968f6ee7c2d7f34d5e',1,'logregr_predict_prob(float8[] coef, float8[] col_ind_var):&#160;logistic.sql_in'],['../logistic_8sql__in.html#a4db4a78e264cc4868c931f5b5cf8b414',1,'logregr_predict_prob(text message):&#160;logistic.sql_in'],['../logistic_8sql__in.html#a75dba5248d75cd6c5d2fb69f944ce479',1,'logregr_predict_prob():&#160;logistic.sql_in']]],
+  ['logregr_5ftrain',['logregr_train',['../logistic_8sql__in.html#a74210a7ef513dfcbdfdd9f3b37bfe428',1,'logregr_train(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, varchar grouping_cols, integer max_iter, varchar optimizer, float8 tolerance, boolean verbose):&#160;logistic.sql_in'],['../logistic_8sql__in.html#a58dfa3dc74518179c584ae535e331a7d',1,'logregr_train(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname):&#160;logistic.sql_in'],['../logistic_8sql__in.html#a327660873183347c9e00bdbd01983a63',1,'logregr_train(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, varchar grouping_cols):&#160;logistic.sql_in'],['../logistic_8sql__in.html#a3c217840f2fbe1dcd53ba15c4111b86a',1,'logregr_train(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, varchar grouping_cols, integer max_iter):&#160;logistic.sql_in'],['../logistic_8sql__in.html#aa321fe6cffa263b1eb612b15e8fb9a6d',1,'logregr_train(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, varchar grouping_cols, integer max_iter, varchar optimizer):&#160;logistic.sql_in'],['../logistic_8sql__in.html#a6b5ffd41b8b00e4c4417653250a265fb',1,'logregr_train(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, varchar grouping_cols, integer max_iter, varchar optimizer, float8 tolerance):&#160;logistic.sql_in'],['../logistic_8sql__in.html#a3fbbdd2e6633816136d2958db9b4b6a3',1,'logregr_train(text message):&#160;logistic.sql_in'],['../logistic_8sql__in.html#ada5fbc0833e802e7e6c1b489330ca15f',1,'logregr_train():&#160;logistic.sql_in']]]
+];
diff --git a/docs/rc/search/functions_c.html b/docs/rc/search/functions_c.html
new file mode 100644
index 0000000..99492ba
--- /dev/null
+++ b/docs/rc/search/functions_c.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_c.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/functions_c.js b/docs/rc/search/functions_c.js
new file mode 100644
index 0000000..598275d
--- /dev/null
+++ b/docs/rc/search/functions_c.js
@@ -0,0 +1,94 @@
+var searchData=
+[
+  ['madlib_5fkeras_5fevaluate',['madlib_keras_evaluate',['../madlib__keras_8sql__in.html#adfd96adf2b42c0fda3d7fcbde3c980de',1,'madlib_keras_evaluate(varchar model_table, varchar test_table, varchar output_table, boolean use_gpus, integer mst_key):&#160;madlib_keras.sql_in'],['../madlib__keras_8sql__in.html#acc8a3dd6d66f2ee42051bff16fdbb6f2',1,'madlib_keras_evaluate(varchar model_table, varchar test_table, varchar output_table, boolean use_gpus):&#160;madlib_keras.sql_in'],['../madlib__keras_8sql__in.html#a379574acd7e9ac62900ae24322934554',1,'madlib_keras_evaluate(varchar model_table, varchar test_table, varchar output_table):&#160;madlib_keras.sql_in'],['../madlib__keras_8sql__in.html#a43d52c0c82dd7a5f484077e1f8226bad',1,'madlib_keras_evaluate(varchar message):&#160;madlib_keras.sql_in'],['../madlib__keras_8sql__in.html#a60d92087e0229cc5ac4ce38dd3f0c754',1,'madlib_keras_evaluate():&#160;madlib_keras.sql_in']]],
+  ['madlib_5fkeras_5ffit',['madlib_keras_fit',['../madlib__keras_8sql__in.html#a2277a353d16623515fe4488b43fadaaa',1,'madlib_keras_fit(varchar source_table, varchar model, varchar model_arch_table, integer model_id, varchar compile_params, varchar fit_params, integer num_iterations, boolean use_gpus, varchar validation_table, integer metrics_compute_frequency, boolean warm_start, varchar name, varchar description):&#160;madlib_keras.sql_in'],['../madlib__keras_8sql__in.html#a7348b5bba0f2873350ed3d59a740ed12',1,'madlib_keras_fit(varchar source_table, varchar model, varchar model_arch_table, integer model_id, varchar compile_params, varchar fit_params, integer num_iterations, boolean use_gpus, varchar validation_table, integer metrics_compute_frequency, boolean warm_start, varchar name):&#160;madlib_keras.sql_in'],['../madlib__keras_8sql__in.html#a1ef596b705f1531d3863fbe3d7cbd9ab',1,'madlib_keras_fit(varchar source_table, varchar model, varchar model_arch_table, integer model_id, varchar compile_params, varchar fit_params, integer num_iterations, boolean use_gpus, varchar validation_table, integer metrics_compute_frequency, boolean warm_start):&#160;madlib_keras.sql_in'],['../madlib__keras_8sql__in.html#a8c2226dd73ed52ae99b20b1599458c52',1,'madlib_keras_fit(varchar source_table, varchar model, varchar model_arch_table, integer model_id, varchar compile_params, varchar fit_params, integer num_iterations, boolean use_gpus, varchar validation_table, integer metrics_compute_frequency):&#160;madlib_keras.sql_in'],['../madlib__keras_8sql__in.html#a4b7dae7a619db29d119cd416352d5242',1,'madlib_keras_fit(varchar source_table, varchar model, varchar model_arch_table, integer model_id, varchar compile_params, varchar fit_params, integer num_iterations, boolean use_gpus, varchar validation_table):&#160;madlib_keras.sql_in'],['../madlib__keras_8sql__in.html#a02b249fc761d06858544368f73ad4552',1,'madlib_keras_fit(varchar source_table, varchar model, varchar model_arch_table, integer model_id, varchar compile_params, varchar fit_params, integer num_iterations, boolean use_gpus):&#160;madlib_keras.sql_in'],['../madlib__keras_8sql__in.html#ade193e83d63f5f55a2aa3c01ca203dea',1,'madlib_keras_fit(varchar source_table, varchar model, varchar model_arch_table, integer model_id, varchar compile_params, varchar fit_params, integer num_iterations):&#160;madlib_keras.sql_in'],['../madlib__keras_8sql__in.html#a255b2d1c5c446ee47162b8ba5cb3f834',1,'madlib_keras_fit(varchar message):&#160;madlib_keras.sql_in'],['../madlib__keras_8sql__in.html#a28e4824dd3daf1a0e6187517dd97b73f',1,'madlib_keras_fit():&#160;madlib_keras.sql_in']]],
+  ['madlib_5fkeras_5ffit_5fmultiple_5fmodel',['madlib_keras_fit_multiple_model',['../madlib__keras__fit__multiple__model_8sql__in.html#ab62d8e8a4e8d221b7baa4da6a214c286',1,'madlib_keras_fit_multiple_model(varchar source_table, varchar model_output_table, varchar model_selection_table, integer num_iterations, boolean use_gpus, varchar validation_table, integer metrics_compute_frequency, boolean warm_start, varchar name, varchar description):&#160;madlib_keras_fit_multiple_model.sql_in'],['../madlib__keras__fit__multiple__model_8sql__in.html#a3c71501e03430c229df4c47e2ad5c318',1,'madlib_keras_fit_multiple_model(varchar source_table, varchar model_output_table, varchar model_selection_table, integer num_iterations, boolean use_gpus, varchar validation_table, integer metrics_compute_frequency, boolean warm_start, varchar name):&#160;madlib_keras_fit_multiple_model.sql_in'],['../madlib__keras__fit__multiple__model_8sql__in.html#a5d9f7b628c0caead39bc511ed04e470b',1,'madlib_keras_fit_multiple_model(varchar source_table, varchar model_output_table, varchar model_selection_table, integer num_iterations, boolean use_gpus, varchar validation_table, integer metrics_compute_frequency, boolean warm_start):&#160;madlib_keras_fit_multiple_model.sql_in'],['../madlib__keras__fit__multiple__model_8sql__in.html#a9d9b5dfa99c0d20cfbd1f04c0ecb05b9',1,'madlib_keras_fit_multiple_model(varchar source_table, varchar model_output_table, varchar model_selection_table, integer num_iterations, boolean use_gpus, varchar validation_table, integer metrics_compute_frequency):&#160;madlib_keras_fit_multiple_model.sql_in'],['../madlib__keras__fit__multiple__model_8sql__in.html#a422a56ee0e279690699651f01124b131',1,'madlib_keras_fit_multiple_model(varchar source_table, varchar model_output_table, varchar model_selection_table, integer num_iterations, boolean use_gpus, varchar validation_table):&#160;madlib_keras_fit_multiple_model.sql_in'],['../madlib__keras__fit__multiple__model_8sql__in.html#adde872404cf7683bd78d64399f65013b',1,'madlib_keras_fit_multiple_model(varchar source_table, varchar model_output_table, varchar model_selection_table, integer num_iterations, boolean use_gpus):&#160;madlib_keras_fit_multiple_model.sql_in']]],
+  ['madlib_5fkeras_5fpredict',['madlib_keras_predict',['../madlib__keras_8sql__in.html#adcc77d0ebdd3164d57745713ae47419c',1,'madlib_keras_predict(varchar model_table, varchar test_table, varchar id_col, varchar independent_varname, varchar output_table, varchar pred_type, boolean use_gpus, integer mst_key):&#160;madlib_keras.sql_in'],['../madlib__keras_8sql__in.html#a98620f248df8129f83bbcc1df0f47780',1,'madlib_keras_predict(varchar model_table, varchar test_table, varchar id_col, varchar independent_varname, varchar output_table, varchar pred_type, boolean use_gpus):&#160;madlib_keras.sql_in'],['../madlib__keras_8sql__in.html#ac45dd3c88be4d8e6b7fdfd6548918a7c',1,'madlib_keras_predict(varchar model_table, varchar test_table, varchar id_col, varchar independent_varname, varchar output_table, varchar pred_type):&#160;madlib_keras.sql_in'],['../madlib__keras_8sql__in.html#a93155e5285e2f1b2b095b90d370fea42',1,'madlib_keras_predict(varchar model_table, varchar test_table, varchar id_col, varchar independent_varname, varchar output_table):&#160;madlib_keras.sql_in'],['../madlib__keras_8sql__in.html#a37ff677efafc788a222aceca98fefa10',1,'madlib_keras_predict(varchar message):&#160;madlib_keras.sql_in'],['../madlib__keras_8sql__in.html#a855673cb0170e2d71fd95c627bdd35ba',1,'madlib_keras_predict():&#160;madlib_keras.sql_in']]],
+  ['madlib_5fkeras_5fpredict_5fbyom',['madlib_keras_predict_byom',['../madlib__keras_8sql__in.html#a20dfc5a72a13e7647b69c7b21fe37f8d',1,'madlib_keras_predict_byom(varchar model_arch_table, integer model_id, varchar test_table, varchar id_col, varchar independent_varname, varchar output_table, varchar pred_type, boolean use_gpus, text[] class_values, float8 normalizing_const):&#160;madlib_keras.sql_in'],['../madlib__keras_8sql__in.html#a0d01c29f03a76f9bb71c7dc9f3a15cf1',1,'madlib_keras_predict_byom(varchar model_arch_table, integer model_id, varchar test_table, varchar id_col, varchar independent_varname, varchar output_table, varchar pred_type, boolean use_gpus, text[] class_values):&#160;madlib_keras.sql_in'],['../madlib__keras_8sql__in.html#a7066fd8ef56abcb8bb058e4aaa9f5722',1,'madlib_keras_predict_byom(varchar model_arch_table, integer model_id, varchar test_table, varchar id_col, varchar independent_varname, varchar output_table, varchar pred_type, boolean use_gpus):&#160;madlib_keras.sql_in'],['../madlib__keras_8sql__in.html#a1785160cada96aa687dde8cce118ebb3',1,'madlib_keras_predict_byom(varchar model_arch_table, integer model_id, varchar test_table, varchar id_col, varchar independent_varname, varchar output_table, varchar pred_type):&#160;madlib_keras.sql_in'],['../madlib__keras_8sql__in.html#acc0251a671b2b9b2e597428ebc41253f',1,'madlib_keras_predict_byom(varchar model_arch_table, integer model_id, varchar test_table, varchar id_col, varchar independent_varname, varchar output_table):&#160;madlib_keras.sql_in']]],
+  ['marginal_5flogregr',['marginal_logregr',['../marginal_8sql__in.html#a3286b644d2d51a8f2874896dc1b5d925',1,'marginal.sql_in']]],
+  ['marginal_5flogregr_5fstep_5ffinal',['marginal_logregr_step_final',['../marginal_8sql__in.html#ac4e06a28a76651de70768457575bb9e0',1,'marginal.sql_in']]],
+  ['marginal_5flogregr_5fstep_5fmerge_5fstates',['marginal_logregr_step_merge_states',['../marginal_8sql__in.html#ae44a992f8bd650b5c1f0c2ffae7bb542',1,'marginal.sql_in']]],
+  ['marginal_5flogregr_5fstep_5ftransition',['marginal_logregr_step_transition',['../marginal_8sql__in.html#a2115a795562bc2928c3858fc55104c4b',1,'marginal.sql_in']]],
+  ['marginal_5fmlogregr',['marginal_mlogregr',['../marginal_8sql__in.html#aaf0b3cc34b99d4b47334bdde2d139b81',1,'marginal.sql_in']]],
+  ['margins',['margins',['../marginal_8sql__in.html#a36fcae5245ca31517723fce38b183c90',1,'margins(varchar model_table, varchar out_table, varchar x_design, varchar source_table, varchar marginal_vars):&#160;marginal.sql_in'],['../marginal_8sql__in.html#a632bc9f9bf73c40fe6bf3b1778eee91a',1,'margins(varchar model_table, varchar out_table, varchar x_design, varchar source_table):&#160;marginal.sql_in'],['../marginal_8sql__in.html#a6d002a5934d6bc614925ffcf67f24a99',1,'margins(varchar model_table, varchar out_table, varchar x_design):&#160;marginal.sql_in'],['../marginal_8sql__in.html#abd29ce2c3931dfbe5fc7e882114b8c68',1,'margins(varchar model_table, varchar out_table):&#160;marginal.sql_in'],['../marginal_8sql__in.html#a14c96eee91746c4693d1775ff3ee8158',1,'margins(varchar message):&#160;marginal.sql_in'],['../marginal_8sql__in.html#a9c7042e5a4dca342e745c89f72f4a650',1,'margins():&#160;marginal.sql_in']]],
+  ['margins_5flogregr',['margins_logregr',['../marginal_8sql__in.html#a9517d679ee4209126895445cbed51fe3',1,'margins_logregr(varchar message):&#160;marginal.sql_in'],['../marginal_8sql__in.html#a63aba4148ce9bfcafea81d08e3797a1f',1,'margins_logregr():&#160;marginal.sql_in'],['../marginal_8sql__in.html#a99dd17e30e4fcc2f39da4e671406bcea',1,'margins_logregr(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, varchar grouping_cols, integer[] marginal_vars, integer max_iter, varchar optimizer, float8 tolerance, boolean verbose_mode):&#160;marginal.sql_in'],['../marginal_8sql__in.html#a4e0b284b130524ff36b44281fa9e3fb9',1,'margins_logregr(varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable):&#160;marginal.sql_in'],['../marginal_8sql__in.html#af520629d3624d30cdcdbce247d89ac7d',1,'margins_logregr(varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable, varchar grouping_cols):&#160;marginal.sql_in'],['../marginal_8sql__in.html#ae84af4141c1730d7299210ad5005ffe6',1,'margins_logregr(varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable, varchar grouping_cols, integer[] marginal_vars):&#160;marginal.sql_in'],['../marginal_8sql__in.html#a7ad0356ba6d3edec11d4ee6904ff8588',1,'margins_logregr(varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable, varchar grouping_cols, integer[] marginal_vars, integer max_iter):&#160;marginal.sql_in'],['../marginal_8sql__in.html#a9a9ff25e0ce2220f14e6514a84e71d8a',1,'margins_logregr(varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable, varchar grouping_cols, integer[] marginal_vars, integer max_iter, varchar optimizer):&#160;marginal.sql_in'],['../marginal_8sql__in.html#a2018fd008c71953a32057d34de54acfc',1,'margins_logregr(varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable, varchar grouping_cols, integer[] marginal_vars, integer max_iter, varchar optimizer, float8 tolerance):&#160;marginal.sql_in']]],
+  ['margins_5fmlogregr',['margins_mlogregr',['../marginal_8sql__in.html#ae39ad0e1beca060fd153dba35901a4e7',1,'margins_mlogregr(varchar message):&#160;marginal.sql_in'],['../marginal_8sql__in.html#a1e152bdb5c5ac347b5621350a396a33f',1,'margins_mlogregr():&#160;marginal.sql_in'],['../marginal_8sql__in.html#aedeea68ce9db3c1ad1ce90219bb02fa0',1,'margins_mlogregr(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, integer ref_category, varchar grouping_cols, integer[] marginal_vars, varchar optimizer_params, boolean verbose_mode):&#160;marginal.sql_in'],['../marginal_8sql__in.html#a2837cc6b3ea201682db76102cace3d0e',1,'margins_mlogregr(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, integer ref_category, varchar grouping_cols, integer[] marginal_vars, varchar optimizer_params):&#160;marginal.sql_in'],['../marginal_8sql__in.html#a79e7c2ad06348e95afea81d4b6c6c9f7',1,'margins_mlogregr(varchar source_table, varchar out_table, varchar dependent_varname, varchar independent_varname, integer ref_category, varchar grouping_cols, integer[] marginal_vars, integer max_iter, varchar optimizer, float8 tolerance, boolean verbose_mode):&#160;marginal.sql_in'],['../marginal_8sql__in.html#a0827f2605803847a34e26f31b24529ca',1,'margins_mlogregr(varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable, integer ref_category, varchar grouping_cols, integer[] marginal_vars, integer max_iter):&#160;marginal.sql_in'],['../marginal_8sql__in.html#a80368510f0bcf8633b017b82c9744ce7',1,'margins_mlogregr(varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable, integer ref_category, varchar grouping_cols, integer[] marginal_vars, integer max_iter, varchar optimizer):&#160;marginal.sql_in'],['../marginal_8sql__in.html#afaa380d3b7ce111d6a81b5b0fa7483f3',1,'margins_mlogregr(varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable, integer ref_category, varchar grouping_cols, integer[] marginal_vars, integer max_iter, varchar optimizer, float8 tolerance):&#160;marginal.sql_in'],['../marginal_8sql__in.html#a90bd35d3bb7a3f94feeeb08f9ead8a55',1,'margins_mlogregr(varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable):&#160;marginal.sql_in'],['../marginal_8sql__in.html#af0ef176b7f0d0c518d3a16182ac6117d',1,'margins_mlogregr(varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable, integer ref_category):&#160;marginal.sql_in'],['../marginal_8sql__in.html#a7e66918e0fcd02f8492347604474a29a',1,'margins_mlogregr(varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable, integer ref_category, varchar grouping_cols):&#160;marginal.sql_in'],['../marginal_8sql__in.html#a8311df1f591cff8d30ca8df816c0cfca',1,'margins_mlogregr(varchar source_table, varchar out_table, varchar dependent_variable, varchar independent_variable, integer ref_category, varchar grouping_cols, integer[] marginal_vars):&#160;marginal.sql_in']]],
+  ['matrix_5fadd',['matrix_add',['../matrix__ops_8sql__in.html#a1cbb83dad451e7c36033c0f3df0a22e0',1,'matrix_add(text matrix_a, text a_args, text matrix_b, text b_args, text matrix_out, text out_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a41caa30da3fe15625e33782884ca6060',1,'matrix_add(text matrix_a, text a_args, text matrix_b, text b_args, text matrix_out):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#af305d7f198954d3dabf1b47578ad8d81',1,'matrix_add(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a68b950ef082b7f0545ba1a926c9afe35',1,'matrix_add():&#160;matrix_ops.sql_in']]],
+  ['matrix_5fagg',['matrix_agg',['../linalg_8sql__in.html#a9c439706f35d6cac89f151d553a5f111',1,'linalg.sql_in']]],
+  ['matrix_5fagg_5ffinal',['matrix_agg_final',['../linalg_8sql__in.html#adb012de82ecdc71ac54f3498e88e59d0',1,'linalg.sql_in']]],
+  ['matrix_5fagg_5ftransition',['matrix_agg_transition',['../linalg_8sql__in.html#ac2d98e204b4fccab518aa20edef4ec41',1,'linalg.sql_in']]],
+  ['matrix_5fblock_5fmult',['matrix_block_mult',['../matrix__ops_8sql__in.html#a0cb243e18397fb101f1cf48d9872f805',1,'matrix_ops.sql_in']]],
+  ['matrix_5fblock_5fsquare',['matrix_block_square',['../matrix__ops_8sql__in.html#af84a929ab1558a06a5f8e9e500bf9051',1,'matrix_ops.sql_in']]],
+  ['matrix_5fblock_5ftrans',['matrix_block_trans',['../matrix__ops_8sql__in.html#a5f096c3062218d0a6848ab1a22f3d5bb',1,'matrix_ops.sql_in']]],
+  ['matrix_5fblockize',['matrix_blockize',['../matrix__ops_8sql__in.html#aa63cfd84aa33c87ad16f52dc7f642848',1,'matrix_blockize(text matrix_in, text in_args, integer rsize, integer csize, text matrix_out, text out_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a8f5cd60132d738f440dffef007476b91',1,'matrix_blockize(text matrix_in, text in_args, integer rsize, integer csize, text matrix_out):&#160;matrix_ops.sql_in']]],
+  ['matrix_5fcholesky',['matrix_cholesky',['../matrix__ops_8sql__in.html#a4e4aeeb2f56f59f89fffe3049089ed23',1,'matrix_cholesky(text matrix_in, text in_args, text matrix_out_prefix, text out_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a13be8579794a2460c8727b116c73163c',1,'matrix_cholesky(text matrix_in, text in_args, text matrix_out_prefix):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#ac9cfb05c9ab8e4daf35ba65b06f85d8d',1,'matrix_cholesky(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a2d1154d0e461d7e45b936b15d192ecb0',1,'matrix_cholesky():&#160;matrix_ops.sql_in']]],
+  ['matrix_5fcolumn',['matrix_column',['../linalg_8sql__in.html#aed3a33f3d3d43a056c5ec591661d34d8',1,'linalg.sql_in']]],
+  ['matrix_5fdensify',['matrix_densify',['../matrix__ops_8sql__in.html#a7df10b8c7cf6a26cc297a6c39482d084',1,'matrix_densify(text matrix_in, text in_args, text matrix_out, text out_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a6d47b253d9f4a966c06bc011b52762ef',1,'matrix_densify(text matrix_in, text in_args, text matrix_out):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a2440a8a698a41e31afd7517edba19a17',1,'matrix_densify(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#adda0815232229bce7f88cfca9c99c2fb',1,'matrix_densify():&#160;matrix_ops.sql_in']]],
+  ['matrix_5fdiag',['matrix_diag',['../matrix__ops_8sql__in.html#a642932bc5d60ee0ee29068e2c0438d19',1,'matrix_diag(float8[] diag_elements, text matrix_out, text out_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#ae3b60dc30259b5526c7be0d1a6a95c20',1,'matrix_diag(float8[] diag_elements, text matrix_out):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#af05e66bbc871c4c24f569bf1b16f684b',1,'matrix_diag(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a888d9ab690fed966da3722886e1c0ff7',1,'matrix_diag():&#160;matrix_ops.sql_in']]],
+  ['matrix_5feigen',['matrix_eigen',['../matrix__ops_8sql__in.html#a1905e1b687e45dacbef1e82097b538de',1,'matrix_eigen(text matrix_in, text in_args, text matrix_out, text out_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#ae2ad35c91364d5ce4a94f7fd2aa6ce4b',1,'matrix_eigen(text matrix_in, text in_args, text matrix_out):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#ac1d4021eccdee42c7a3d8fa953900f1e',1,'matrix_eigen(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#ae25eb4b085772e283250ae1f3ace2cc6',1,'matrix_eigen():&#160;matrix_ops.sql_in']]],
+  ['matrix_5felem_5fmult',['matrix_elem_mult',['../matrix__ops_8sql__in.html#aa93181583456a1f23c3665c051742173',1,'matrix_elem_mult(text matrix_a, text a_args, text matrix_b, text b_args, text matrix_out, text out_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a282716431d27998bebf44d496ccd82df',1,'matrix_elem_mult(text matrix_a, text a_args, text matrix_b, text b_args, text matrix_out):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#ad0ff6a550b1941ce0cc3057343ce6eef',1,'matrix_elem_mult(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a78e64fe103c3f22288445ae6dfe0c3a2',1,'matrix_elem_mult():&#160;matrix_ops.sql_in']]],
+  ['matrix_5fextract_5fcol',['matrix_extract_col',['../matrix__ops_8sql__in.html#a1f3b0f7a3bbbab7b22f8ae545cf46255',1,'matrix_extract_col(text matrix_in, text in_args, integer index):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a1c5371cb5bc60dc48ba4a6cee805c30d',1,'matrix_extract_col(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a98a695c4cf03ae60c654013ec08fdfe8',1,'matrix_extract_col():&#160;matrix_ops.sql_in']]],
+  ['matrix_5fextract_5fdiag',['matrix_extract_diag',['../matrix__ops_8sql__in.html#a7f85d65a21f193f5e77409a3dcd34b06',1,'matrix_extract_diag(text matrix_in, text in_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a8415b48d92a0523ebc4a3df4144fdd48',1,'matrix_extract_diag(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#adce984af4adbd3ed1864c9427002ce93',1,'matrix_extract_diag():&#160;matrix_ops.sql_in']]],
+  ['matrix_5fextract_5frow',['matrix_extract_row',['../matrix__ops_8sql__in.html#a61fef136d511ac92153223f590ee596f',1,'matrix_extract_row(text matrix_in, text in_args, integer index):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a0b8c0815933d4d39a6ea7bc7fe951552',1,'matrix_extract_row(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a65963c0f5721af6f785f65083152c64c',1,'matrix_extract_row():&#160;matrix_ops.sql_in']]],
+  ['matrix_5fidentity',['matrix_identity',['../matrix__ops_8sql__in.html#af4ce5b8872d28bd1d0e2e72af41db173',1,'matrix_identity(integer row_dim, text matrix_out, text out_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a9284b89b9c13e43c2492aa6c9a9a17c0',1,'matrix_identity(integer row_dim, text matrix_out):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#ac5e003d0385e3be5858529e592fa8aef',1,'matrix_identity(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#ab82476872e84430e9abc7a5485b4de9a',1,'matrix_identity():&#160;matrix_ops.sql_in']]],
+  ['matrix_5finfo',['matrix_info',['../matrix__ops_8sql__in.html#a0535b01f414f5d61153abca8b3cd94fa',1,'matrix_info(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a94c1c4f3fb88bb80344d53ee2cc3c981',1,'matrix_info():&#160;matrix_ops.sql_in']]],
+  ['matrix_5finverse',['matrix_inverse',['../matrix__ops_8sql__in.html#a0176dd860f866c5e0899b32f471bc953',1,'matrix_inverse(text matrix_in, text in_args, text matrix_out, text out_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#afee5dbac4040688e33f4bedb87af2d9e',1,'matrix_inverse(text matrix_in, text in_args, text matrix_out):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#aa344aec551796b20f22a276f5d8492f0',1,'matrix_inverse(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a2725d030fc03dcfa3a9271940d800e7a',1,'matrix_inverse():&#160;matrix_ops.sql_in']]],
+  ['matrix_5flu',['matrix_lu',['../matrix__ops_8sql__in.html#a21a96e5933fd1094befc20051b0fb7b7',1,'matrix_lu(text matrix_in, text in_args, text matrix_out_prefix, text out_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#ac0cfa9628072628259b2a50fef12ef9c',1,'matrix_lu(text matrix_in, text in_args, text matrix_out_prefix):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#acdb62ad5d8fcfaf80bcb553df4c57bcf',1,'matrix_lu(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#aa1609dc673ccae19bae8493030490f76',1,'matrix_lu():&#160;matrix_ops.sql_in']]],
+  ['matrix_5fmax',['matrix_max',['../matrix__ops_8sql__in.html#a6aefe99d73608495150c1ac46cc9bcd6',1,'matrix_max(text matrix_in, text in_args, integer dim, text matrix_out, boolean fetch_index):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a738a759b0397a3a652ba76c5e2aea9a9',1,'matrix_max(text matrix_in, text in_args, integer dim, text matrix_out):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#ad5101b99f8112074e95c76f008081741',1,'matrix_max(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a3f47e137a229cc32670461dee5fa3c7a',1,'matrix_max():&#160;matrix_ops.sql_in']]],
+  ['matrix_5fmean',['matrix_mean',['../matrix__ops_8sql__in.html#aff618caaa8e3edc1b3f2465d04598a9d',1,'matrix_mean(text matrix_in, text in_args, integer dim):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a21d94d92c4545bccb58234e8ee0bed2a',1,'matrix_mean(text matrix_in, text in_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#ae703f1bf36c4ff0771253db03d2cd7d2',1,'matrix_mean(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#aef727e104b1c64c790bf0913caf78152',1,'matrix_mean():&#160;matrix_ops.sql_in']]],
+  ['matrix_5fmem_5fmult',['matrix_mem_mult',['../matrix__ops_8sql__in.html#ad16c824212e369760b9fb8ea658eac8c',1,'matrix_mem_mult(float[] matrix_a, float[] matrix_b, boolean trans_b):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a91383f59dcb8b7ca2fba89ea350d113b',1,'matrix_mem_mult(float[] matrix_a, float[] matrix_b):&#160;matrix_ops.sql_in']]],
+  ['matrix_5fmem_5ftrans',['matrix_mem_trans',['../matrix__ops_8sql__in.html#a0731901b985a90c3aa2f686a7ce95978',1,'matrix_ops.sql_in']]],
+  ['matrix_5fmin',['matrix_min',['../matrix__ops_8sql__in.html#aa27d69d09f5eb456eb326d4b5eda1a2a',1,'matrix_min(text matrix_in, text in_args, integer dim, text matrix_out, boolean fetch_index):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a6647bd00e4b853c2d7fbc9175f087ab9',1,'matrix_min(text matrix_in, text in_args, integer dim, text matrix_out):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a7d2aee81366873b11104a5d4fe1e4c36',1,'matrix_min(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#ad777bc84ac4691172a90133825ce5301',1,'matrix_min():&#160;matrix_ops.sql_in']]],
+  ['matrix_5fmult',['matrix_mult',['../matrix__ops_8sql__in.html#a83e1d5e2c8cd598084c6d21fdce83ae7',1,'matrix_mult(text matrix_a, text a_args, text matrix_b, text b_args, text matrix_out, text out_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#aea1f8c6538b189a29c24b56f5af496b8',1,'matrix_mult(text matrix_a, text a_args, text matrix_b, text b_args, text matrix_out):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a43a2702360817f94ecf9b3ba9a984548',1,'matrix_mult(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#ad89a88acce449ee27ba9d3a73950c2d7',1,'matrix_mult():&#160;matrix_ops.sql_in']]],
+  ['matrix_5fndims',['matrix_ndims',['../matrix__ops_8sql__in.html#aad615ae2da39bf15c8032eacb8330a74',1,'matrix_ndims(text matrix_in, text in_args, boolean is_block):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a563239e2948ed428ae62df73912c8cda',1,'matrix_ndims(text matrix_in, text in_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a198a59b704931cbe35edd1ffdccf025b',1,'matrix_ndims(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#ac502592b54ed6d09d8e16eb7993672fb',1,'matrix_ndims():&#160;matrix_ops.sql_in']]],
+  ['matrix_5fnorm',['matrix_norm',['../matrix__ops_8sql__in.html#aa5eb2864180eb276a786d9b2172aef5f',1,'matrix_norm(text matrix_in, text in_args, text norm_type):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a8ebac230a8a23e27125fd6b324484a30',1,'matrix_norm(text matrix_in, text in_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a4d3873b96aa8d7ec3288ba1e6c275f65',1,'matrix_norm(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#aed19bdcfe46eb2645d85a9e71895719b',1,'matrix_norm():&#160;matrix_ops.sql_in']]],
+  ['matrix_5fnuclear_5fnorm',['matrix_nuclear_norm',['../matrix__ops_8sql__in.html#ad87178a3e1721ee05589817cb598d6ec',1,'matrix_nuclear_norm(text matrix_in, text in_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#af37ef69921ecb4d667ebf65a3901ad4c',1,'matrix_nuclear_norm(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#ae90888a1b50fa901966ca2b9975f4ada',1,'matrix_nuclear_norm():&#160;matrix_ops.sql_in']]],
+  ['matrix_5fones',['matrix_ones',['../matrix__ops_8sql__in.html#a1f59138935fe638eca1f15588aa76ac1',1,'matrix_ones(integer row_dim, integer col_dim, text matrix_out, text out_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a14b7d6ad206764d48dfbaa0cc9978e32',1,'matrix_ones(integer row_id, integer col_id, text matrix_out):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#ac9e608ad657246ace0bf0b4235d3a07d',1,'matrix_ones(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a7df4dbdc3b0a7105c644c787daadf666',1,'matrix_ones():&#160;matrix_ops.sql_in']]],
+  ['matrix_5fpinv',['matrix_pinv',['../matrix__ops_8sql__in.html#a929ded138fb0a953c8126ee8e20d793f',1,'matrix_pinv(text matrix_in, text in_args, text matrix_out, text out_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a39c21ffb83c184a21b481ad12056af13',1,'matrix_pinv(text matrix_in, text in_args, text matrix_out):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#adc992cc64ae6c2537b417f5c9693d93c',1,'matrix_pinv(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a85193210d3fd55cba9d983a8cf71a34b',1,'matrix_pinv():&#160;matrix_ops.sql_in']]],
+  ['matrix_5fqr',['matrix_qr',['../matrix__ops_8sql__in.html#ac656a3a1e0008af89af9d4af44467407',1,'matrix_qr(text matrix_in, text in_args, text matrix_out_prefix, text out_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#ad7b68aacf626bed0c5f2a37be63848e4',1,'matrix_qr(text matrix_in, text in_args, text matrix_out_prefix):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a58a87beb5600e5a06f36ae1e083fe4cc',1,'matrix_qr(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#ae66de066dfdafaba16575f58ab58376c',1,'matrix_qr():&#160;matrix_ops.sql_in']]],
+  ['matrix_5frandom',['matrix_random',['../matrix__ops_8sql__in.html#ad5df0edded7b5db4b9bdd29ff3e39ec3',1,'matrix_random(integer row_dim, integer col_dim, text in_args, text distribution, text matrix_out, text out_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#af2dec2ccb01c2ba4b3d1293a032ff08f',1,'matrix_random(integer row_id, integer col_id, text distribution, text matrix_out):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#ae86e6f65ef75ed13a1de8b8e0c537bfc',1,'matrix_random(integer row_id, integer col_id, text matrix_out):&#160;matrix_ops.sql_in']]],
+  ['matrix_5frank',['matrix_rank',['../matrix__ops_8sql__in.html#a3906a54d945b19672641ca08bef11e69',1,'matrix_rank(text matrix_in, text in_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#aef438cede80c62cdd8126a77b7bd86c7',1,'matrix_rank(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a8613f342735ddb02a8b1d3585a569f26',1,'matrix_rank():&#160;matrix_ops.sql_in']]],
+  ['matrix_5fscalar_5fmult',['matrix_scalar_mult',['../matrix__ops_8sql__in.html#aa41d97528365f8e161e5e821165a6e0d',1,'matrix_scalar_mult(text matrix_in, text in_args, float8 scalar, text matrix_out, text out_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a0c8518f032d9f6af692dabde9f4e2051',1,'matrix_scalar_mult(text matrix_in, text in_args, float8 scalar, text matrix_out):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a6993220fd6f4d2c85514a05c966c0334',1,'matrix_scalar_mult(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a48baae4d5938c7afdf160a84d43de399',1,'matrix_scalar_mult():&#160;matrix_ops.sql_in']]],
+  ['matrix_5fscale_5fand_5fadd',['matrix_scale_and_add',['../matrix__ops_8sql__in.html#a68c05ce6379f28d5e30dd0144fe50565',1,'matrix_scale_and_add(text matrix_a, text a_args, text matrix_b, text b_args, float8 scale, text matrix_out, text out_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a31de2056018ac96ba01125c0e131f21e',1,'matrix_scale_and_add(text matrix_a, text a_args, text matrix_b, text b_args, float8 scale, text matrix_out):&#160;matrix_ops.sql_in']]],
+  ['matrix_5fsparsify',['matrix_sparsify',['../matrix__ops_8sql__in.html#a390fb7234f49e17c780e961184873759',1,'matrix_sparsify(text matrix_in, text in_args, text matrix_out, text out_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a07be86160c55d50fe8277e8bdd3bab38',1,'matrix_sparsify(text matrix_in, text in_args, text matrix_out):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a32bf4abd829dfc1b28d684af10d6b2d8',1,'matrix_sparsify(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a0cdd245c633ccb63fc1067ed121a8a4d',1,'matrix_sparsify():&#160;matrix_ops.sql_in']]],
+  ['matrix_5fsquare',['matrix_square',['../matrix__ops_8sql__in.html#ae4082533d1943e20660dee4c951edf22',1,'matrix_square(text matrix_in, text in_args, text matrix_out, text out_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#ac27837c0e5196168e51ddd870c34205e',1,'matrix_square(text matrix_in, text in_args, text matrix_out):&#160;matrix_ops.sql_in']]],
+  ['matrix_5fsub',['matrix_sub',['../matrix__ops_8sql__in.html#aa9b1f1554e98d3ab8f04d203f99fd651',1,'matrix_sub(text matrix_a, text a_args, text matrix_b, text b_args, text matrix_out, text out_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a2a8806e11141e8cc5a3fa0c6b1b9e62a',1,'matrix_sub(text matrix_a, text a_args, text matrix_b, text b_args, text matrix_out):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a66d586c0126a95e43ecad7d3efbcce69',1,'matrix_sub(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a41d7286b1a57206f999e064bf3745407',1,'matrix_sub():&#160;matrix_ops.sql_in']]],
+  ['matrix_5fsum',['matrix_sum',['../matrix__ops_8sql__in.html#af03096b43d66e3a3448885e8d6643244',1,'matrix_sum(text matrix_in, text in_args, integer dim):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a6006396999fd192910197e40a0655179',1,'matrix_sum(text matrix_in, text in_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a2ce9cf659cd15d6c765ff8cd11b26a2f',1,'matrix_sum(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a73a54a0e80047b8b9e5df2c4b635c155',1,'matrix_sum():&#160;matrix_ops.sql_in']]],
+  ['matrix_5ftrans',['matrix_trans',['../matrix__ops_8sql__in.html#aa8089cdaf2b66d668f2f15fe3d457d06',1,'matrix_trans(text matrix_in, text in_args, text matrix_out, text out_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#af29ba2a78c6fc0efe0560882853514e7',1,'matrix_trans(text matrix_in, text in_args, text matrix_out):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a84deae83650034337bbec470786573ba',1,'matrix_trans(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a7b37a26e5a301338305992bae6e35230',1,'matrix_trans():&#160;matrix_ops.sql_in']]],
+  ['matrix_5funblockize',['matrix_unblockize',['../matrix__ops_8sql__in.html#a0a199e7cf9e56acd6a7f3fd78e73fa22',1,'matrix_ops.sql_in']]],
+  ['matrix_5fvec_5fmult',['matrix_vec_mult',['../matrix__ops_8sql__in.html#a5060836ec7418a8ec7141740d709db5a',1,'matrix_vec_mult(text matrix_in, text in_args, float8[] vector):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a43ac21377c0932229f36fd4f11cedb2a',1,'matrix_vec_mult(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a738b55e4fa41b7b8ef650e47ba85fad7',1,'matrix_vec_mult():&#160;matrix_ops.sql_in']]],
+  ['matrix_5fzeros',['matrix_zeros',['../matrix__ops_8sql__in.html#a2f88aa4f4a8e479276c927048e1814f2',1,'matrix_zeros(integer row_dim, integer col_dim, text matrix_out, text out_args):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a94d6e419cbf5a1809e7c4cd788adf025',1,'matrix_zeros(integer row_dim, integer col_dim, text matrix_out):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#a733fd716b4b996f1a6ffca967496d899',1,'matrix_zeros(text message):&#160;matrix_ops.sql_in'],['../matrix__ops_8sql__in.html#aaed270402933fd463479858f893b4357',1,'matrix_zeros():&#160;matrix_ops.sql_in']]],
+  ['mean',['mean',['../svec__util_8sql__in.html#a546b947319c9f48237120a31929bdfd9',1,'svec_util.sql_in']]],
+  ['mean_5fabs_5ferror',['mean_abs_error',['../pred__metrics_8sql__in.html#a62b746073072a8a7ab2e8b10189b3b8f',1,'mean_abs_error(text table_in, text table_out, text prediction_col, text observed_col, text grouping_cols):&#160;pred_metrics.sql_in'],['../pred__metrics_8sql__in.html#a5640dad3c1daee2ae20234cd6281e1f9',1,'mean_abs_error(text table_in, text table_out, text prediction_col, text observed_col):&#160;pred_metrics.sql_in'],['../pred__metrics_8sql__in.html#ad9bcfc60fa213b640b6892609cda87ef',1,'mean_abs_error(text message):&#160;pred_metrics.sql_in'],['../pred__metrics_8sql__in.html#a7b7cb1726f0c0630f6275f003a8b3c1f',1,'mean_abs_error():&#160;pred_metrics.sql_in']]],
+  ['mean_5fabs_5fperc_5ferror',['mean_abs_perc_error',['../pred__metrics_8sql__in.html#ac065af35e165ee070488e52ae6defeb4',1,'mean_abs_perc_error(text table_in, text table_out, text prediction_col, text observed_col, text grouping_cols):&#160;pred_metrics.sql_in'],['../pred__metrics_8sql__in.html#a27125644edf424100624332dcc119458',1,'mean_abs_perc_error(text table_in, text table_out, text prediction_col, text observed_col):&#160;pred_metrics.sql_in'],['../pred__metrics_8sql__in.html#a6a88be3e0b687fa54390f74897432f35',1,'mean_abs_perc_error(text message):&#160;pred_metrics.sql_in'],['../pred__metrics_8sql__in.html#a358ac764059e162baa03b3786328ef03',1,'mean_abs_perc_error():&#160;pred_metrics.sql_in']]],
+  ['mean_5fperc_5ferror',['mean_perc_error',['../pred__metrics_8sql__in.html#a000a818f3463898be8cb439ab12de657',1,'mean_perc_error(text table_in, text table_out, text prediction_col, text observed_col, text grouping_cols):&#160;pred_metrics.sql_in'],['../pred__metrics_8sql__in.html#adcd1cee1d1abc41c4c8404e3dfe1e128',1,'mean_perc_error(text table_in, text table_out, text prediction_col, text observed_col):&#160;pred_metrics.sql_in'],['../pred__metrics_8sql__in.html#a3011fb3e57a5606959da30aac0abd801',1,'mean_perc_error(text message):&#160;pred_metrics.sql_in'],['../pred__metrics_8sql__in.html#ae5b776a2b671403b62a2b94a8de76574',1,'mean_perc_error():&#160;pred_metrics.sql_in']]],
+  ['mean_5fsquared_5ferror',['mean_squared_error',['../pred__metrics_8sql__in.html#ac171ed21c9230f7ac42fe5d0108362d6',1,'mean_squared_error(text table_in, text table_out, text prediction_col, text observed_col, text grouping_cols):&#160;pred_metrics.sql_in'],['../pred__metrics_8sql__in.html#ada2f6933ef0f9ecc6e40e0cdd48a2ff4',1,'mean_squared_error(text table_in, text table_out, text prediction_col, text observed_col):&#160;pred_metrics.sql_in'],['../pred__metrics_8sql__in.html#a9233da7d17f5a09bd345dcedabd5e509',1,'mean_squared_error(text message):&#160;pred_metrics.sql_in'],['../pred__metrics_8sql__in.html#a335747f3e5c611fb426b693aa270d340',1,'mean_squared_error():&#160;pred_metrics.sql_in']]],
+  ['mfvsketch_5fquick_5fhistogram',['mfvsketch_quick_histogram',['../sketch_8sql__in.html#aa2d4c0af50b242731f841c2dd355fc72',1,'sketch.sql_in']]],
+  ['mfvsketch_5ftop_5fhistogram',['mfvsketch_top_histogram',['../sketch_8sql__in.html#ab915f092b747e3a955cbb699afc9c70c',1,'sketch.sql_in']]],
+  ['minibatch_5fpreprocessor',['minibatch_preprocessor',['../minibatch__preprocessing_8sql__in.html#a240a7074bf43145a5a0a034d4b417907',1,'minibatch_preprocessor(varchar source_table, varchar output_table, varchar dependent_varname, varchar independent_varname, varchar grouping_cols, integer buffer_size, boolean one_hot_encode_int_dep_var):&#160;minibatch_preprocessing.sql_in'],['../minibatch__preprocessing_8sql__in.html#a92b64147fde6f2d7f9914357c7059950',1,'minibatch_preprocessor(varchar source_table, varchar output_table, varchar dependent_varname, varchar independent_varname, varchar grouping_cols, integer buffer_size):&#160;minibatch_preprocessing.sql_in'],['../minibatch__preprocessing_8sql__in.html#a65e4a7785a85fd75d3d3be455cb5b922',1,'minibatch_preprocessor(varchar source_table, varchar output_table, varchar dependent_varname, varchar independent_varname, varchar grouping_cols):&#160;minibatch_preprocessing.sql_in'],['../minibatch__preprocessing_8sql__in.html#a1727d5439a8a73eb42c4b2a9bd29a3c2',1,'minibatch_preprocessor(varchar source_table, varchar output_table, varchar dependent_varname, varchar independent_varname):&#160;minibatch_preprocessing.sql_in'],['../minibatch__preprocessing_8sql__in.html#a3ea00bd7444fe9d2969e6a82e093091c',1,'minibatch_preprocessor(varchar message):&#160;minibatch_preprocessing.sql_in'],['../minibatch__preprocessing_8sql__in.html#abf3ab6567c5b5f64402b7412c74c7451',1,'minibatch_preprocessor():&#160;minibatch_preprocessing.sql_in']]],
+  ['misclassification_5favg',['misclassification_avg',['../cross__validation_8sql__in.html#ad01cd1c97ae1be0ac7cd6c42abb75bb2',1,'cross_validation.sql_in']]],
+  ['mlogregr',['mlogregr',['../multilogistic_8sql__in.html#a7be20ccb465d47808e18149140fc666f',1,'mlogregr(varchar source, varchar depvar, varchar indepvar, integer max_num_iterations=20, varchar optimizer=&quot;irls&quot;, float8 precision=0.0001, integer ref_category):&#160;multilogistic.sql_in'],['../multilogistic_8sql__in.html#a116c95de21b112dedf99035a9b243fd7',1,'mlogregr(varchar source, varchar depvar, varchar indepvar):&#160;multilogistic.sql_in'],['../multilogistic_8sql__in.html#a1ab68f7396f53ae3e32362240d077cbf',1,'mlogregr(varchar source, varchar depvar, varchar indepvar, integer max_num_iterations):&#160;multilogistic.sql_in'],['../multilogistic_8sql__in.html#ae1b5954340a0c98a6ed06eb5f3bb43b8',1,'mlogregr(varchar source, varchar depvar, varchar indepvar, integer max_num_iterations, varchar optimizer):&#160;multilogistic.sql_in']]],
+  ['mlogregr_5fmarginal_5fstep_5ffinal',['mlogregr_marginal_step_final',['../marginal_8sql__in.html#ad80d7df29226a2529f9f80607f2a983e',1,'marginal.sql_in']]],
+  ['mlogregr_5fmarginal_5fstep_5fmerge_5fstates',['mlogregr_marginal_step_merge_states',['../marginal_8sql__in.html#a82ac74fd7aec70b7596bc2b4776742fa',1,'marginal.sql_in']]],
+  ['mlogregr_5fmarginal_5fstep_5ftransition',['mlogregr_marginal_step_transition',['../marginal_8sql__in.html#a7b8a7cf298ea51fc16de975e2503615a',1,'marginal.sql_in']]],
+  ['mlogregr_5fpredict',['mlogregr_predict',['../multilogistic_8sql__in.html#a00f0c988e1b2b2fee9e4021450840061',1,'mlogregr_predict(text model, text source, text id_col_name, text output, text pred_type):&#160;multilogistic.sql_in'],['../multilogistic_8sql__in.html#a4c61f2fd5a67a7babb700fdfbd4d146f',1,'mlogregr_predict(text model, text source, text id_col_name, text output):&#160;multilogistic.sql_in'],['../multilogistic_8sql__in.html#a0fdfed54d63cefe260a0b74b9c7bbad5',1,'mlogregr_predict(text message):&#160;multilogistic.sql_in']]],
+  ['mlogregr_5frobust_5fstep_5ffinal',['mlogregr_robust_step_final',['../robust_8sql__in.html#a6bfc968b23887a0a8ddd69a5c3350ba9',1,'robust.sql_in']]],
+  ['mlogregr_5frobust_5fstep_5fmerge_5fstates',['mlogregr_robust_step_merge_states',['../robust_8sql__in.html#a123149abbf366743e04ecb6fc7f8b9d9',1,'robust.sql_in']]],
+  ['mlogregr_5frobust_5fstep_5ftransition',['mlogregr_robust_step_transition',['../robust_8sql__in.html#a3928ec1e3935e8dc4dbcb9e705805660',1,'robust.sql_in']]],
+  ['mlogregr_5ftrain',['mlogregr_train',['../multilogistic_8sql__in.html#aedc13474e6abbc88451d120ad97e44d4',1,'mlogregr_train(varchar source_table, varchar output_table, varchar dependent_varname, varchar independent_varname, integer ref_category, varchar optimizer_params):&#160;multilogistic.sql_in'],['../multilogistic_8sql__in.html#afea8bd51ec241fa7a749a7c74ae0f580',1,'mlogregr_train(varchar source_table, varchar output_table, varchar dependent_varname, varchar independent_varname, integer ref_category):&#160;multilogistic.sql_in'],['../multilogistic_8sql__in.html#aa596f23c7bcfcd47b051d78de0b99c36',1,'mlogregr_train(varchar source_table, varchar output_table, varchar dependent_varname, varchar independent_varname):&#160;multilogistic.sql_in'],['../multilogistic_8sql__in.html#a0b4643da1ecfcfaf3a1563c820b3347d',1,'mlogregr_train(varchar message):&#160;multilogistic.sql_in'],['../multilogistic_8sql__in.html#ab8b5a7eb69a945435cba5a068576f2e4',1,'mlogregr_train():&#160;multilogistic.sql_in']]],
+  ['mlp_5fclassification',['mlp_classification',['../mlp_8sql__in.html#a73d39f7b6dd12112d080e5ab851e5f53',1,'mlp_classification(varchar source_table, varchar output_table, varchar independent_varname, varchar dependent_varname, integer[] hidden_layer_sizes, varchar optimizer_params, varchar activation, varchar weights, boolean warm_start, boolean verbose, varchar grouping_col):&#160;mlp.sql_in'],['../mlp_8sql__in.html#a4f787c902c3a5e656b387a688f262acb',1,'mlp_classification(varchar source_table, varchar output_table, varchar independent_varname, varchar dependent_varname, integer[] hidden_layer_sizes, varchar optimizer_params, varchar activation, varchar weights, boolean warm_start, boolean verbose):&#160;mlp.sql_in'],['../mlp_8sql__in.html#af520b5c8c8c737fc23ceb529610dd86b',1,'mlp_classification(varchar source_table, varchar output_table, varchar independent_varname, varchar dependent_varname, integer[] hidden_layer_sizes, varchar optimizer_params, varchar activation, varchar weights, boolean warm_start):&#160;mlp.sql_in'],['../mlp_8sql__in.html#a0daa7903ff719803b581aad045101344',1,'mlp_classification(varchar source_table, varchar output_table, varchar independent_varname, varchar dependent_varname, integer[] hidden_layer_sizes, varchar optimizer_params, varchar activation, varchar weights):&#160;mlp.sql_in'],['../mlp_8sql__in.html#a15c117bcf75101b7aec2fbecf7f851b5',1,'mlp_classification(varchar source_table, varchar output_table, varchar independent_varname, varchar dependent_varname, integer[] hidden_layer_sizes, varchar optimizer_params, varchar activation):&#160;mlp.sql_in'],['../mlp_8sql__in.html#a5d28bb79f649ab9e3d376bcbdf65f024',1,'mlp_classification(varchar source_table, varchar output_table, varchar independent_varname, varchar dependent_varname, integer[] hidden_layer_sizes, varchar optimizer_params):&#160;mlp.sql_in'],['../mlp_8sql__in.html#aa5ae594dad6af4eee8aa2e89fc1fc63c',1,'mlp_classification(varchar source_table, varchar output_table, varchar independent_varname, varchar dependent_varname, integer[] hidden_layer_sizes):&#160;mlp.sql_in'],['../mlp_8sql__in.html#aa576fa10b9b5c7e555d8037b07f49d07',1,'mlp_classification(text message):&#160;mlp.sql_in'],['../mlp_8sql__in.html#a0e264a5be29f84c6dd2ab74cafa821e6',1,'mlp_classification():&#160;mlp.sql_in']]],
+  ['mlp_5figd_5ffinal',['mlp_igd_final',['../mlp_8sql__in.html#ab0f74b98d0fe97d8c89a7777f40fc9f2',1,'mlp.sql_in']]],
+  ['mlp_5figd_5fmerge',['mlp_igd_merge',['../mlp_8sql__in.html#ab131a5383e05cc40207874a586394323',1,'mlp.sql_in']]],
+  ['mlp_5figd_5fstep',['mlp_igd_step',['../mlp_8sql__in.html#a01b8c82aaec038e0bd9d5bd208e23f9f',1,'mlp.sql_in']]],
+  ['mlp_5figd_5ftransition',['mlp_igd_transition',['../mlp_8sql__in.html#a591b8f7eb778fc57000ff2618fb90b6b',1,'mlp.sql_in']]],
+  ['mlp_5fminibatch_5ffinal',['mlp_minibatch_final',['../mlp_8sql__in.html#a78190aceb28796d29e3dffc6241b3f55',1,'mlp.sql_in']]],
+  ['mlp_5fminibatch_5fmerge',['mlp_minibatch_merge',['../mlp_8sql__in.html#a4ee983290b6936743645df606ce0b8ba',1,'mlp.sql_in']]],
+  ['mlp_5fminibatch_5fstep',['mlp_minibatch_step',['../mlp_8sql__in.html#a5933f1c1f2c41ce92578f67426f69456',1,'mlp.sql_in']]],
+  ['mlp_5fminibatch_5ftransition',['mlp_minibatch_transition',['../mlp_8sql__in.html#aba6da28d2565175ea81f50e735239eaa',1,'mlp.sql_in']]],
+  ['mlp_5fpredict',['mlp_predict',['../mlp_8sql__in.html#a98a7cda6f3fb5ed9734f4838e1c42488',1,'mlp_predict(varchar model_table, varchar data_table, varchar id_col_name, varchar output_table, varchar pred_type):&#160;mlp.sql_in'],['../mlp_8sql__in.html#a08142d48d68b51e0d5e8408f4bc2adf8',1,'mlp_predict(text message):&#160;mlp.sql_in'],['../mlp_8sql__in.html#abd5aaa58d22cc31fdbca80f70b018b70',1,'mlp_predict():&#160;mlp.sql_in']]],
+  ['mlp_5fregression',['mlp_regression',['../mlp_8sql__in.html#a0745971ef78379d5e0a6f59a1e084d3b',1,'mlp_regression(varchar source_table, varchar output_table, varchar independent_varname, varchar dependent_varname, integer[] hidden_layer_sizes, varchar optimizer_params, varchar activation, varchar weights, boolean warm_start, boolean verbose, varchar grouping_col):&#160;mlp.sql_in'],['../mlp_8sql__in.html#ae5043f0cfce81a69ae0db7f2c8c4a230',1,'mlp_regression(varchar source_table, varchar output_table, varchar independent_varname, varchar dependent_varname, integer[] hidden_layer_sizes, varchar optimizer_params, varchar activation, varchar weights, boolean warm_start, boolean verbose):&#160;mlp.sql_in'],['../mlp_8sql__in.html#aa22e20ac82a36d5c8f34d1687500cc47',1,'mlp_regression(varchar source_table, varchar output_table, varchar independent_varname, varchar dependent_varname, integer[] hidden_layer_sizes, varchar optimizer_params, varchar activation, varchar weights, boolean warm_start):&#160;mlp.sql_in'],['../mlp_8sql__in.html#a9732da677f1cfd6d1997c3a786e578f3',1,'mlp_regression(varchar source_table, varchar output_table, varchar independent_varname, varchar dependent_varname, integer[] hidden_layer_sizes, varchar optimizer_params, varchar activation, varchar weights):&#160;mlp.sql_in'],['../mlp_8sql__in.html#a47b00ac83ea4849f984d9f71bce288f1',1,'mlp_regression(varchar source_table, varchar output_table, varchar independent_varname, varchar dependent_varname, integer[] hidden_layer_sizes, varchar optimizer_params, varchar activation):&#160;mlp.sql_in'],['../mlp_8sql__in.html#a4f96e5b5b480023923db16bbd3a7c158',1,'mlp_regression(varchar source_table, varchar output_table, varchar independent_varname, varchar dependent_varname, integer[] hidden_layer_sizes, varchar optimizer_params):&#160;mlp.sql_in'],['../mlp_8sql__in.html#afa76bcdc0ea92342f65f9428dc1c51f6',1,'mlp_regression(varchar source_table, varchar output_table, varchar independent_varname, varchar dependent_varname, integer[] hidden_layer_sizes):&#160;mlp.sql_in'],['../mlp_8sql__in.html#af3b4c5961aee9cbd73fb3659a6e71a6c',1,'mlp_regression(text message):&#160;mlp.sql_in'],['../mlp_8sql__in.html#a35b3d56f14169bab8a9b93ad4234786b',1,'mlp_regression():&#160;mlp.sql_in']]],
+  ['mode',['mode',['../utilities_8sql__in.html#ac25ef90f8a8e2f9b2244a57d92086c91',1,'utilities.sql_in']]],
+  ['mse_5ferror',['mse_error',['../cross__validation_8sql__in.html#a2cd71e756f90b0c4fa46f508a1ca261e',1,'cross_validation.sql_in']]],
+  ['mw_5ftest_5ffinal',['mw_test_final',['../hypothesis__tests_8sql__in.html#ac18e666088117997da2d22236e982f5e',1,'hypothesis_tests.sql_in']]],
+  ['mw_5ftest_5ftransition',['mw_test_transition',['../hypothesis__tests_8sql__in.html#a4e324c82b069ebf7b498012aa83931c5',1,'hypothesis_tests.sql_in']]]
+];
diff --git a/docs/rc/search/functions_d.html b/docs/rc/search/functions_d.html
new file mode 100644
index 0000000..5be9ecc
--- /dev/null
+++ b/docs/rc/search/functions_d.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_d.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/functions_d.js b/docs/rc/search/functions_d.js
new file mode 100644
index 0000000..c82b90b
--- /dev/null
+++ b/docs/rc/search/functions_d.js
@@ -0,0 +1,29 @@
+var searchData=
+[
+  ['negative_5fbinomial_5fcdf',['negative_binomial_cdf',['../prob_8sql__in.html#ad0a7e4474f828869fb90e62f8e6f04d7',1,'prob.sql_in']]],
+  ['negative_5fbinomial_5fpmf',['negative_binomial_pmf',['../prob_8sql__in.html#ab9cbc30424eba30f2df2a32a7e45f138',1,'prob.sql_in']]],
+  ['negative_5fbinomial_5fquantile',['negative_binomial_quantile',['../prob_8sql__in.html#ad9e541de8b41da2e7b7434f862db4845',1,'prob.sql_in']]],
+  ['non_5fcentral_5fbeta_5fcdf',['non_central_beta_cdf',['../prob_8sql__in.html#a1361569bd86e41f796c70f8cb277010e',1,'prob.sql_in']]],
+  ['non_5fcentral_5fbeta_5fpdf',['non_central_beta_pdf',['../prob_8sql__in.html#ad4a12c083054f0e2d316ae76c9aaeef7',1,'prob.sql_in']]],
+  ['non_5fcentral_5fbeta_5fquantile',['non_central_beta_quantile',['../prob_8sql__in.html#a3073b409eaee3faa6d43df014662c279',1,'prob.sql_in']]],
+  ['non_5fcentral_5fchi_5fsquared_5fcdf',['non_central_chi_squared_cdf',['../prob_8sql__in.html#ab4b7d2cf10bb031328dcc34c6ff494ad',1,'prob.sql_in']]],
+  ['non_5fcentral_5fchi_5fsquared_5fpdf',['non_central_chi_squared_pdf',['../prob_8sql__in.html#aa7a563183224593d1e0d623a3c5489d8',1,'prob.sql_in']]],
+  ['non_5fcentral_5fchi_5fsquared_5fquantile',['non_central_chi_squared_quantile',['../prob_8sql__in.html#ad694e29187b629ae683ef1235d2b9270',1,'prob.sql_in']]],
+  ['non_5fcentral_5ff_5fcdf',['non_central_f_cdf',['../prob_8sql__in.html#a00051df630007b530ce86b4ab44a0434',1,'prob.sql_in']]],
+  ['non_5fcentral_5ff_5fpdf',['non_central_f_pdf',['../prob_8sql__in.html#a3d94edcf90fca1fa52671293a9ea9c2f',1,'prob.sql_in']]],
+  ['non_5fcentral_5ff_5fquantile',['non_central_f_quantile',['../prob_8sql__in.html#a92b2a978db480a6c78cfb708107ecb92',1,'prob.sql_in']]],
+  ['non_5fcentral_5ft_5fcdf',['non_central_t_cdf',['../prob_8sql__in.html#afaf4374d2720b230a54713e21ecb1955',1,'prob.sql_in']]],
+  ['non_5fcentral_5ft_5fpdf',['non_central_t_pdf',['../prob_8sql__in.html#a4799e3bb68a496d9bc1ef1ea85265409',1,'prob.sql_in']]],
+  ['non_5fcentral_5ft_5fquantile',['non_central_t_quantile',['../prob_8sql__in.html#af50865aba2ece2e23b2af461a02f7d12',1,'prob.sql_in']]],
+  ['noop',['noop',['../utilities_8sql__in.html#ab194d6a1222672c314ea39b78aad8fd0',1,'utilities.sql_in']]],
+  ['norm1',['norm1',['../linalg_8sql__in.html#a300300fe4b8576ba0b97b95d8dea3057',1,'linalg.sql_in']]],
+  ['norm2',['norm2',['../linalg_8sql__in.html#a50fdfe30cc0edc6888a909dbb4b4c239',1,'linalg.sql_in']]],
+  ['normal_5fcdf',['normal_cdf',['../prob_8sql__in.html#aebcd34ad7b1ca4b31d9699112c9a3b90',1,'normal_cdf(float8 x, float8 mean=0, float8 sd=1):&#160;prob.sql_in'],['../prob_8sql__in.html#a370e31a46781ed8832b31625a683d053',1,'normal_cdf(float8 x, float8 mean):&#160;prob.sql_in'],['../prob_8sql__in.html#a6c0a499faa80db26c0178f1e69cf7a50',1,'normal_cdf(float8 x):&#160;prob.sql_in']]],
+  ['normal_5fpdf',['normal_pdf',['../prob_8sql__in.html#a63f555f36385d86e229cdca223e39567',1,'normal_pdf(float8 x, float8 mean=0, float8 sd=1):&#160;prob.sql_in'],['../prob_8sql__in.html#a4ee303e56677465989c30230c7f55004',1,'normal_pdf(float8 x, float8 mean):&#160;prob.sql_in'],['../prob_8sql__in.html#a2836483a456c4bf2c9886763b270317e',1,'normal_pdf(float8 x):&#160;prob.sql_in']]],
+  ['normal_5fquantile',['normal_quantile',['../prob_8sql__in.html#a53d56b672fe4cd1277cb5eac5de5118f',1,'normal_quantile(float8 p, float8 mean=0, float8 sd=1):&#160;prob.sql_in'],['../prob_8sql__in.html#a1b1f9d685f262ade8863ab3a1632b8d6',1,'normal_quantile(float8 p, float8 mean):&#160;prob.sql_in'],['../prob_8sql__in.html#a643bb4b6b880b96cf924c16e08b015d3',1,'normal_quantile(float8 p):&#160;prob.sql_in']]],
+  ['normalize',['normalize',['../array__ops_8sql__in.html#acb57ea4521dcb717f9e3148e0acccc74',1,'normalize(anyarray x):&#160;array_ops.sql_in'],['../svec__util_8sql__in.html#aace16abea7c63f136520fde6c28f1f28',1,'normalize(svec):&#160;svec_util.sql_in']]],
+  ['normalize_5fsum_5farray',['normalize_sum_array',['../random__forest_8sql__in.html#a33a268c5561595aa0efe6508bfaf6d47',1,'random_forest.sql_in']]],
+  ['normalized_5favg',['normalized_avg',['../linalg_8sql__in.html#a0b04663ca206f03e66aed5ea2b4cc461',1,'linalg.sql_in']]],
+  ['normalized_5favg_5fvector_5ffinal',['normalized_avg_vector_final',['../linalg_8sql__in.html#a1c22ee0672d6c550f5bb966f78ce738a',1,'linalg.sql_in']]],
+  ['normalized_5favg_5fvector_5ftransition',['normalized_avg_vector_transition',['../linalg_8sql__in.html#ad5863fed5eb4813ba0044abc268d03ce',1,'linalg.sql_in']]]
+];
diff --git a/docs/rc/search/functions_e.html b/docs/rc/search/functions_e.html
new file mode 100644
index 0000000..e256cb6
--- /dev/null
+++ b/docs/rc/search/functions_e.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_e.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/functions_e.js b/docs/rc/search/functions_e.js
new file mode 100644
index 0000000..32a7852
--- /dev/null
+++ b/docs/rc/search/functions_e.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+  ['one_5fway_5fanova',['one_way_anova',['../hypothesis__tests_8sql__in.html#abd5c80afd954294de268030ee73e88cc',1,'hypothesis_tests.sql_in']]],
+  ['one_5fway_5fanova_5ffinal',['one_way_anova_final',['../hypothesis__tests_8sql__in.html#a5ac28bec7ff670a7da8b9eae4a8ed4cb',1,'hypothesis_tests.sql_in']]],
+  ['one_5fway_5fanova_5fmerge_5fstates',['one_way_anova_merge_states',['../hypothesis__tests_8sql__in.html#ad6c05d07183c961961f171b0a925ad93',1,'hypothesis_tests.sql_in']]],
+  ['one_5fway_5fanova_5ftransition',['one_way_anova_transition',['../hypothesis__tests_8sql__in.html#aa694f4ce95280210a3887773bb3f417b',1,'hypothesis_tests.sql_in']]]
+];
diff --git a/docs/rc/search/functions_f.html b/docs/rc/search/functions_f.html
new file mode 100644
index 0000000..424126c
--- /dev/null
+++ b/docs/rc/search/functions_f.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_f.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/functions_f.js b/docs/rc/search/functions_f.js
new file mode 100644
index 0000000..a9d66fa
--- /dev/null
+++ b/docs/rc/search/functions_f.js
@@ -0,0 +1,19 @@
+var searchData=
+[
+  ['pagerank',['pagerank',['../pagerank_8sql__in.html#ae13d4e007bbfc6629f8cf5e938e9c306',1,'pagerank(text vertex_table, text vertex_id, text edge_table, text edge_args, text out_table, float8 damping_factor, integer max_iter, float8 threshold, varchar grouping_cols, integer[] personalization_vertices):&#160;pagerank.sql_in'],['../pagerank_8sql__in.html#ac85f61143b581cd969530cea7a5311cc',1,'pagerank(text vertex_table, text vertex_id, text edge_table, text edge_args, text out_table, float8 damping_factor, integer max_iter, float8 threshold, varchar grouping_cols):&#160;pagerank.sql_in'],['../pagerank_8sql__in.html#afef4de2968cdf226c8c866ea74439569',1,'pagerank(text vertex_table, text vertex_id, text edge_table, text edge_args, text out_table, float8 damping_factor, integer max_iter, float8 threshold):&#160;pagerank.sql_in'],['../pagerank_8sql__in.html#a89e65d85e3f29c4659257a817c1bceb1',1,'pagerank(text vertex_table, text vertex_id, text edge_table, text edge_args, text out_table, float8 damping_factor, integer max_iter):&#160;pagerank.sql_in'],['../pagerank_8sql__in.html#ad5b0fd743404c42dce6a9fc0e35f7645',1,'pagerank(text vertex_table, text vertex_id, text edge_table, text edge_args, text out_table, float8 damping_factor):&#160;pagerank.sql_in'],['../pagerank_8sql__in.html#aae888a524d7fbb9fd3e94c1ee9a4dd42',1,'pagerank(text vertex_table, text vertex_id, text edge_table, text edge_args, text out_table):&#160;pagerank.sql_in'],['../pagerank_8sql__in.html#a5a240ada11e9de64e4b9930a81b81cd6',1,'pagerank(varchar message):&#160;pagerank.sql_in'],['../pagerank_8sql__in.html#a2e7d15ac323613c4e2a3275b75f85f6e',1,'pagerank():&#160;pagerank.sql_in']]],
+  ['pareto_5fcdf',['pareto_cdf',['../prob_8sql__in.html#aa1a42ebd68f20f65bc1784b427721b5d',1,'prob.sql_in']]],
+  ['pareto_5fpdf',['pareto_pdf',['../prob_8sql__in.html#a22c56a6e48bc442435b13afac2a1eb37',1,'prob.sql_in']]],
+  ['pareto_5fquantile',['pareto_quantile',['../prob_8sql__in.html#a77779e2b5fa951189ccba6806c503c4d',1,'prob.sql_in']]],
+  ['path',['path',['../path_8sql__in.html#a8de69ef8c9e00f5e27d4de16ad2f157a',1,'path(varchar source_table, varchar output_table, varchar partition_expr, varchar order_expr, varchar symbol_expr, varchar pattern_expr, varchar agg_func, boolean persist_rows, boolean overlapping_patterns):&#160;path.sql_in'],['../path_8sql__in.html#adb47d7f926d4800bd443d041fb42c3d0',1,'path(varchar source_table, varchar output_table, varchar partition_expr, varchar order_expr, varchar symbol_expr, varchar pattern_expr, varchar agg_func, boolean persist_rows):&#160;path.sql_in'],['../path_8sql__in.html#a2b676d9c8c02a98522cc8e0fee5a899d',1,'path(varchar source_table, varchar output_table, varchar partition_expr, varchar order_expr, varchar symbol_expr, varchar pattern_expr, varchar agg_func):&#160;path.sql_in'],['../path_8sql__in.html#ac2ca139a2066f39fc7da14824574d789',1,'path(varchar source_table, varchar output_table, varchar partition_expr, varchar order_expr, varchar symbol_expr, varchar pattern_expr):&#160;path.sql_in'],['../path_8sql__in.html#aae6088d72cc92f9542a72136acaa372f',1,'path(text message):&#160;path.sql_in'],['../path_8sql__in.html#af5842a2917fdea02cca12c8104bff022',1,'path():&#160;path.sql_in']]],
+  ['path_5fpattern_5fmatch',['path_pattern_match',['../path_8sql__in.html#a841bef9d28833c6ecac9c3f957558c2f',1,'path.sql_in']]],
+  ['pca_5fproject',['pca_project',['../pca__project_8sql__in.html#a30c86aed79810df5595451481ba74265',1,'pca_project(text source_table, text pc_table, text out_table, text row_id, text residual_table, text result_summary_table):&#160;pca_project.sql_in'],['../pca__project_8sql__in.html#a075512374d6c3c21c9dfabb8449612b5',1,'pca_project(text source_table, text pc_table, text out_table, text row_id):&#160;pca_project.sql_in'],['../pca__project_8sql__in.html#aa760c09bdf15997da8a4ca50c6f90961',1,'pca_project(text source_table, text pc_table, text out_table, text row_id, text residual_table):&#160;pca_project.sql_in'],['../pca__project_8sql__in.html#a05473fbffb6c1ff77656c212b046eec8',1,'pca_project(text usage_string):&#160;pca_project.sql_in'],['../pca__project_8sql__in.html#a62c1f14279f47af3bdbddb52b8c712bf',1,'pca_project():&#160;pca_project.sql_in']]],
+  ['pca_5fsparse_5fproject',['pca_sparse_project',['../pca__project_8sql__in.html#a2ffda9dc6c376df9f31e71b41b7259b3',1,'pca_sparse_project(text source_table, text pc_table, text out_table, text row_id, text col_id, text val_id, int4 row_dim, int4 col_dim, text residual_table, text result_summary_table):&#160;pca_project.sql_in'],['../pca__project_8sql__in.html#ae5b361b468fffb7aeec2330c3b026bd1',1,'pca_sparse_project(text source_table, text pc_table, text out_table, text row_id, text col_id, text val_id, int4 row_dim, int4 col_dim):&#160;pca_project.sql_in'],['../pca__project_8sql__in.html#aa9c21f739fbc2f8c6e7e6c1a3eaba5cd',1,'pca_sparse_project(text source_table, text pc_table, text out_table, text row_id, text col_id, text val_id, int4 row_dim, int4 col_dim, text residual_table):&#160;pca_project.sql_in'],['../pca__project_8sql__in.html#aa738137f91d595f312d5dd85f5e9c8ee',1,'pca_sparse_project(text usage_string):&#160;pca_project.sql_in'],['../pca__project_8sql__in.html#a6e62919f439ad5d62992c958a9324dce',1,'pca_sparse_project():&#160;pca_project.sql_in']]],
+  ['pca_5fsparse_5ftrain',['pca_sparse_train',['../pca_8sql__in.html#aaf22f179f07b6a88edd410a3f163d80b',1,'pca_sparse_train(text source_table, text pc_table, text row_id, text col_id, text val_id, integer row_dim, integer col_dim, integer k, text grouping_cols, integer lanczos_iter, boolean use_correlation, text result_summary_table, float8 variance):&#160;pca.sql_in'],['../pca_8sql__in.html#a9c819bc0f3fa1f02234d62cd5a8f391e',1,'pca_sparse_train(text source_table, text pc_table, text row_id, text col_id, text val_id, integer row_dim, integer col_dim, integer k, text grouping_cols, integer lanczos_iter, boolean use_correlation, text result_summary_table):&#160;pca.sql_in'],['../pca_8sql__in.html#a5f808e855a139ac21876bd8d7f6c94f9',1,'pca_sparse_train(text source_table, text pc_table, text row_id, text col_id, text val_id, integer row_dim, integer col_dim, integer k, text grouping_cols, integer lanczos_iter, boolean use_correlation):&#160;pca.sql_in'],['../pca_8sql__in.html#ace5236fb2133c297eca85ab788e6dfc2',1,'pca_sparse_train(text source_table, text pc_table, text row_id, text col_id, text val_id, integer row_dim, integer col_dim, integer k, text grouping_cols, integer lanczos_iter):&#160;pca.sql_in'],['../pca_8sql__in.html#a370a0cd4c3776db9716783877caaaea5',1,'pca_sparse_train(text source_table, text pc_table, text row_id, text col_id, text val_id, integer row_dim, integer col_dim, integer k, text grouping_cols):&#160;pca.sql_in'],['../pca_8sql__in.html#a47c9234d8f49a7467b4e2d172eb6958f',1,'pca_sparse_train(text source_table, text pc_table, text row_id, text col_id, text val_id, integer row_dim, integer col_dim, integer k):&#160;pca.sql_in'],['../pca_8sql__in.html#abcb783cb9b8cf34520930a25e1264566',1,'pca_sparse_train(text source_table, text pc_table, text row_id, text col_id, text val_id, integer row_dim, integer col_dim, float8 variance, text grouping_cols, integer lanczos_iter, boolean use_correlation, text result_summary_table):&#160;pca.sql_in'],['../pca_8sql__in.html#aaac2bea5ee35d3c250fb8ddfb43de7ee',1,'pca_sparse_train(text source_table, text pc_table, text row_id, text col_id, text val_id, integer row_dim, integer col_dim, float8 variance, text grouping_cols, integer lanczos_iter, boolean use_correlation):&#160;pca.sql_in'],['../pca_8sql__in.html#a7eefdb60ea3a6ba720c22159708bbf6b',1,'pca_sparse_train(text source_table, text pc_table, text row_id, text col_id, text val_id, integer row_dim, integer col_dim, float8 variance, text grouping_cols, integer lanczos_iter):&#160;pca.sql_in'],['../pca_8sql__in.html#a5bde0ac01309c986b8aed5ff3ccb2b04',1,'pca_sparse_train(text source_table, text pc_table, text row_id, text col_id, text val_id, integer row_dim, integer col_dim, float8 variance, text grouping_cols):&#160;pca.sql_in'],['../pca_8sql__in.html#a5258b8d0fdd1697c3ab3e4d954d07ca1',1,'pca_sparse_train(text source_table, text pc_table, text row_id, text col_id, text val_id, integer row_dim, integer col_dim, float8 variance):&#160;pca.sql_in'],['../pca_8sql__in.html#aa3e70c278fc1d4ab52396192691a8a3e',1,'pca_sparse_train(varchar usage_string):&#160;pca.sql_in'],['../pca_8sql__in.html#a1a62d21cdcc12ff8a54ea572f5af7073',1,'pca_sparse_train():&#160;pca.sql_in']]],
+  ['pca_5ftrain',['pca_train',['../pca_8sql__in.html#aa0482e3074f528f681a6cb4a374e25a1',1,'pca_train(text source_table, text pc_table, text row_id, integer k, text grouping_cols, integer lanczos_iter, boolean use_correlation, text result_summary_table, float8 variance):&#160;pca.sql_in'],['../pca_8sql__in.html#a4cf4caceb80885e288cc0451e6f47695',1,'pca_train(text source_table, text pc_table, text row_id, integer k, text grouping_cols, integer lanczos_iter, boolean use_correlation, text result_summary_table):&#160;pca.sql_in'],['../pca_8sql__in.html#a5634af9beb7936506ec2f5775c81d038',1,'pca_train(text source_table, text pc_table, text row_id, integer k, text grouping_cols, integer lanczos_iter, boolean use_correlation):&#160;pca.sql_in'],['../pca_8sql__in.html#a2d1cfcf6a7c8a9c69808ec8927b900d1',1,'pca_train(text source_table, text pc_table, text row_id, integer k, text grouping_cols, integer lanczos_iter):&#160;pca.sql_in'],['../pca_8sql__in.html#a7b52d3800ed2d529ccd2a1c2417a986d',1,'pca_train(text source_table, text pc_table, text row_id, integer k, text grouping_cols):&#160;pca.sql_in'],['../pca_8sql__in.html#a13f55d8f0ddc1ed37dc06dfd1f797f8d',1,'pca_train(text source_table, text pc_table, text row_id, integer k):&#160;pca.sql_in'],['../pca_8sql__in.html#aa3935e186e2db92ddad12574924dc075',1,'pca_train(text source_table, text pc_table, text row_id, float8 variance, text grouping_cols, integer lanczos_iter, boolean use_correlation, text result_summary_table):&#160;pca.sql_in'],['../pca_8sql__in.html#a0fca1853e46de92796f1b2462073bb87',1,'pca_train(text source_table, text pc_table, text row_id, float8 variance, text grouping_cols, integer lanczos_iter, boolean use_correlation):&#160;pca.sql_in'],['../pca_8sql__in.html#a7acd4b138ff5edd6e51ff3727842123a',1,'pca_train(text source_table, text pc_table, text row_id, float8 variance, text grouping_cols, integer lanczos_iter):&#160;pca.sql_in'],['../pca_8sql__in.html#ae7d85a5369594004c207604e486c4a9b',1,'pca_train(text source_table, text pc_table, text row_id, float8 variance, text grouping_cols):&#160;pca.sql_in'],['../pca_8sql__in.html#a3facc2b75c5a57b469d636b0cf71f624',1,'pca_train(text source_table, text pc_table, text row_id, float8 variance):&#160;pca.sql_in'],['../pca_8sql__in.html#a3bdb5967e072a36265fafe9f37164622',1,'pca_train(varchar usage_string):&#160;pca.sql_in'],['../pca_8sql__in.html#a31abf88e67a446a4f789764aa2c61e85',1,'pca_train():&#160;pca.sql_in']]],
+  ['pivot',['pivot',['../pivot_8sql__in.html#aaabcd0b46dea69aa924a02d00119b064',1,'pivot(text source_table, text output_table, text index, text pivot_cols, text pivot_values, text aggregate_func, text fill_value, boolean keep_null, boolean output_col_dictionary, text output_type):&#160;pivot.sql_in'],['../pivot_8sql__in.html#a54cf9b84a727e8364ea1f30c4ed77cf1',1,'pivot(text source_table, text output_table, text index, text pivot_cols, text pivot_values, text aggregate_func, text fill_value, boolean keep_null, boolean output_col_dictionary):&#160;pivot.sql_in'],['../pivot_8sql__in.html#a9aac423ee5ab1746428712b6318d082e',1,'pivot(text source_table, text output_table, text index, text pivot_cols, text pivot_values, text aggregate_func, text fill_value, boolean keep_null):&#160;pivot.sql_in'],['../pivot_8sql__in.html#aa4a81e670839f4c85dd3ec54105834cb',1,'pivot(text source_table, text output_table, text index, text pivot_cols, text pivot_values, text aggregate_func, text fill_value):&#160;pivot.sql_in'],['../pivot_8sql__in.html#a1d2163cb3a187ae9313712b115c14b75',1,'pivot(text source_table, text output_table, text index, text pivot_cols, text pivot_values, text aggregate_func, boolean keep_null):&#160;pivot.sql_in'],['../pivot_8sql__in.html#a321c365b023fba333a6b98093fd47492',1,'pivot(text source_table, text output_table, text index, text pivot_cols, text pivot_values, text aggregate_func):&#160;pivot.sql_in'],['../pivot_8sql__in.html#ad6ee7cf2b82f8c01cbc3eb89afc0bab3',1,'pivot(text source_table, text output_table, text index, text pivot_cols, text pivot_values, boolean keep_null):&#160;pivot.sql_in'],['../pivot_8sql__in.html#a4928b16b8473c2f7818fd58a633c5df7',1,'pivot(text source_table, text output_table, text index, text pivot_cols, text pivot_values):&#160;pivot.sql_in'],['../pivot_8sql__in.html#a65b0595b546a491f87ae1a8b2c0d33ec',1,'pivot(varchar message):&#160;pivot.sql_in'],['../pivot_8sql__in.html#a813c48cacf93deb9720a7994ee6d14bb',1,'pivot():&#160;pivot.sql_in']]],
+  ['pmml',['pmml',['../table__to__pmml_8sql__in.html#a9635b6989d9f972497b6b4164b77aa0a',1,'pmml(varchar model_table):&#160;table_to_pmml.sql_in'],['../table__to__pmml_8sql__in.html#a7e2c2a3746b6e2c68f9886ca2b8b7e09',1,'pmml(varchar model_table, varchar name_spec):&#160;table_to_pmml.sql_in'],['../table__to__pmml_8sql__in.html#a4aa7db5ec62506546dcbe178f6dcf262',1,'pmml(varchar model_table, varchar[] name_spec):&#160;table_to_pmml.sql_in'],['../table__to__pmml_8sql__in.html#a3aa36483b5dd5af46f9b564397822817',1,'pmml():&#160;table_to_pmml.sql_in']]],
+  ['poisson_5fcdf',['poisson_cdf',['../prob_8sql__in.html#ae0b4313d9fe730d6efb3f7c44206f345',1,'prob.sql_in']]],
+  ['poisson_5fpmf',['poisson_pmf',['../prob_8sql__in.html#a82f1edc27261021c73cd080ff2677a9f',1,'prob.sql_in']]],
+  ['poisson_5fquantile',['poisson_quantile',['../prob_8sql__in.html#a032d26db18b2ee1034085f5521939c61',1,'prob.sql_in']]],
+  ['poisson_5frandom',['poisson_random',['../sample_8sql__in.html#a2051a3f21bc06e3c6e3efcd7492b71c4',1,'sample.sql_in']]]
+];
diff --git a/docs/rc/search/groups_0.html b/docs/rc/search/groups_0.html
new file mode 100644
index 0000000..1ede28d
--- /dev/null
+++ b/docs/rc/search/groups_0.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="groups_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/groups_0.js b/docs/rc/search/groups_0.js
new file mode 100644
index 0000000..ee7cecc
--- /dev/null
+++ b/docs/rc/search/groups_0.js
@@ -0,0 +1,10 @@
+var searchData=
+[
+  ['all_20pairs_20shortest_20path',['All Pairs Shortest Path',['../group__grp__apsp.html',1,'']]],
+  ['arima',['ARIMA',['../group__grp__arima.html',1,'']]],
+  ['array_20operations',['Array Operations',['../group__grp__array.html',1,'']]],
+  ['arrays_20and_20matrices',['Arrays and Matrices',['../group__grp__arraysmatrix.html',1,'']]],
+  ['apriori_20algorithm',['Apriori Algorithm',['../group__grp__assoc__rules.html',1,'']]],
+  ['association_20rules',['Association Rules',['../group__grp__association__rules.html',1,'']]],
+  ['average_20path_20length',['Average Path Length',['../group__grp__graph__avg__path__length.html',1,'']]]
+];
diff --git a/docs/rc/search/groups_1.html b/docs/rc/search/groups_1.html
new file mode 100644
index 0000000..3c05216
--- /dev/null
+++ b/docs/rc/search/groups_1.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="groups_1.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/groups_1.js b/docs/rc/search/groups_1.js
new file mode 100644
index 0000000..b772dfb
--- /dev/null
+++ b/docs/rc/search/groups_1.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['balanced_20sampling',['Balanced Sampling',['../group__grp__balance__sampling.html',1,'']]],
+  ['breadth_2dfirst_20search',['Breadth-First Search',['../group__grp__bfs.html',1,'']]]
+];
diff --git a/docs/rc/search/groups_10.html b/docs/rc/search/groups_10.html
new file mode 100644
index 0000000..b5d2c6b
--- /dev/null
+++ b/docs/rc/search/groups_10.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="groups_10.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/groups_10.js b/docs/rc/search/groups_10.js
new file mode 100644
index 0000000..839dc8c
--- /dev/null
+++ b/docs/rc/search/groups_10.js
@@ -0,0 +1,16 @@
+var searchData=
+[
+  ['setup_20model_20selection',['Setup Model Selection',['../group__grp__keras__setup__model__selection.html',1,'']]],
+  ['sampling',['Sampling',['../group__grp__sampling.html',1,'']]],
+  ['sessionize',['Sessionize',['../group__grp__sessionize.html',1,'']]],
+  ['sparse_20linear_20systems',['Sparse Linear Systems',['../group__grp__sparse__linear__solver.html',1,'']]],
+  ['single_20source_20shortest_20path',['Single Source Shortest Path',['../group__grp__sssp.html',1,'']]],
+  ['statistics',['Statistics',['../group__grp__stats.html',1,'']]],
+  ['stemming',['Stemming',['../group__grp__stemmer.html',1,'']]],
+  ['stratified_20sampling',['Stratified Sampling',['../group__grp__strs.html',1,'']]],
+  ['summary',['Summary',['../group__grp__summary.html',1,'']]],
+  ['supervised_20learning',['Supervised Learning',['../group__grp__super.html',1,'']]],
+  ['singular_20value_20decomposition',['Singular Value Decomposition',['../group__grp__svd.html',1,'']]],
+  ['sparse_20vectors',['Sparse Vectors',['../group__grp__svec.html',1,'']]],
+  ['support_20vector_20machines',['Support Vector Machines',['../group__grp__svm.html',1,'']]]
+];
diff --git a/docs/rc/search/groups_11.html b/docs/rc/search/groups_11.html
new file mode 100644
index 0000000..be44d3d
--- /dev/null
+++ b/docs/rc/search/groups_11.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="groups_11.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/groups_11.js b/docs/rc/search/groups_11.js
new file mode 100644
index 0000000..56169a4
--- /dev/null
+++ b/docs/rc/search/groups_11.js
@@ -0,0 +1,8 @@
+var searchData=
+[
+  ['term_20frequency',['Term Frequency',['../group__grp__text__utilities.html',1,'']]],
+  ['topic_20modelling',['Topic Modelling',['../group__grp__topic__modelling.html',1,'']]],
+  ['train_2dtest_20split',['Train-Test Split',['../group__grp__train__test__split.html',1,'']]],
+  ['tree_20methods',['Tree Methods',['../group__grp__tree.html',1,'']]],
+  ['time_20series_20analysis',['Time Series Analysis',['../group__grp__tsa.html',1,'']]]
+];
diff --git a/docs/rc/search/groups_12.html b/docs/rc/search/groups_12.html
new file mode 100644
index 0000000..f425e78
--- /dev/null
+++ b/docs/rc/search/groups_12.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="groups_12.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/groups_12.js b/docs/rc/search/groups_12.js
new file mode 100644
index 0000000..b85c59f
--- /dev/null
+++ b/docs/rc/search/groups_12.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['utilities',['Utilities',['../group__grp__other__functions.html',1,'']]],
+  ['unsupervised_20learning',['Unsupervised Learning',['../group__grp__unsupervised.html',1,'']]]
+];
diff --git a/docs/rc/search/groups_13.html b/docs/rc/search/groups_13.html
new file mode 100644
index 0000000..8559031
--- /dev/null
+++ b/docs/rc/search/groups_13.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="groups_13.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/groups_13.js b/docs/rc/search/groups_13.js
new file mode 100644
index 0000000..0c1314f
--- /dev/null
+++ b/docs/rc/search/groups_13.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['vector_20to_20columns',['Vector to Columns',['../group__grp__vec2cols.html',1,'']]]
+];
diff --git a/docs/rc/search/groups_14.html b/docs/rc/search/groups_14.html
new file mode 100644
index 0000000..f9af45f
--- /dev/null
+++ b/docs/rc/search/groups_14.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="groups_14.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/groups_14.js b/docs/rc/search/groups_14.js
new file mode 100644
index 0000000..096cd35
--- /dev/null
+++ b/docs/rc/search/groups_14.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['weakly_20connected_20components',['Weakly Connected Components',['../group__grp__wcc.html',1,'']]]
+];
diff --git a/docs/rc/search/groups_2.html b/docs/rc/search/groups_2.html
new file mode 100644
index 0000000..7191495
--- /dev/null
+++ b/docs/rc/search/groups_2.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="groups_2.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/groups_2.js b/docs/rc/search/groups_2.js
new file mode 100644
index 0000000..5649081
--- /dev/null
+++ b/docs/rc/search/groups_2.js
@@ -0,0 +1,15 @@
+var searchData=
+[
+  ['conjugate_20gradient',['Conjugate Gradient',['../group__grp__cg.html',1,'']]],
+  ['clustered_20variance',['Clustered Variance',['../group__grp__clustered__errors.html',1,'']]],
+  ['clustering',['Clustering',['../group__grp__clustering.html',1,'']]],
+  ['columns_20to_20vector',['Columns to Vector',['../group__grp__cols2vec.html',1,'']]],
+  ['covariance_20and_20correlation',['Covariance and Correlation',['../group__grp__correlation.html',1,'']]],
+  ['countmin_20_28cormode_2dmuthukrishnan_29',['CountMin (Cormode-Muthukrishnan)',['../group__grp__countmin.html',1,'']]],
+  ['cox_2dproportional_20hazards_20regression',['Cox-Proportional Hazards Regression',['../group__grp__cox__prop__hazards.html',1,'']]],
+  ['conditional_20random_20field',['Conditional Random Field',['../group__grp__crf.html',1,'']]],
+  ['closeness',['Closeness',['../group__grp__graph__closeness.html',1,'']]],
+  ['create_20indicator_20variables',['Create Indicator Variables',['../group__grp__indicator.html',1,'']]],
+  ['cardinality_20estimators',['Cardinality Estimators',['../group__grp__sketches.html',1,'']]],
+  ['cross_20validation',['Cross Validation',['../group__grp__validation.html',1,'']]]
+];
diff --git a/docs/rc/search/groups_3.html b/docs/rc/search/groups_3.html
new file mode 100644
index 0000000..3af27ea
--- /dev/null
+++ b/docs/rc/search/groups_3.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="groups_3.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/groups_3.js b/docs/rc/search/groups_3.js
new file mode 100644
index 0000000..457e6dd
--- /dev/null
+++ b/docs/rc/search/groups_3.js
@@ -0,0 +1,11 @@
+var searchData=
+[
+  ['data_20types_20and_20transformations',['Data Types and Transformations',['../group__grp__datatrans.html',1,'']]],
+  ['decision_20tree',['Decision Tree',['../group__grp__decision__tree.html',1,'']]],
+  ['dense_20linear_20systems',['Dense Linear Systems',['../group__grp__dense__linear__solver.html',1,'']]],
+  ['deprecated_20modules',['Deprecated Modules',['../group__grp__deprecated.html',1,'']]],
+  ['descriptive_20statistics',['Descriptive Statistics',['../group__grp__desc__stats.html',1,'']]],
+  ['deep_20learning',['Deep Learning',['../group__grp__dl.html',1,'']]],
+  ['dimensionality_20reduction',['Dimensionality Reduction',['../group__grp__pca.html',1,'']]],
+  ['database_20functions',['Database Functions',['../group__grp__utilities.html',1,'']]]
+];
diff --git a/docs/rc/search/groups_4.html b/docs/rc/search/groups_4.html
new file mode 100644
index 0000000..e7abc74
--- /dev/null
+++ b/docs/rc/search/groups_4.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="groups_4.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/groups_4.js b/docs/rc/search/groups_4.js
new file mode 100644
index 0000000..ccc5026
--- /dev/null
+++ b/docs/rc/search/groups_4.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+  ['early_20stage_20development',['Early Stage Development',['../group__grp__early__stage.html',1,'']]],
+  ['elastic_20net_20regularization',['Elastic Net Regularization',['../group__grp__elasticnet.html',1,'']]],
+  ['encoding_20categorical_20variables',['Encoding Categorical Variables',['../group__grp__encode__categorical.html',1,'']]]
+];
diff --git a/docs/rc/search/groups_5.html b/docs/rc/search/groups_5.html
new file mode 100644
index 0000000..edc563e
--- /dev/null
+++ b/docs/rc/search/groups_5.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="groups_5.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/groups_5.js b/docs/rc/search/groups_5.js
new file mode 100644
index 0000000..c0129bc
--- /dev/null
+++ b/docs/rc/search/groups_5.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['fm_20_28flajolet_2dmartin_29',['FM (Flajolet-Martin)',['../group__grp__fmsketch.html',1,'']]]
+];
diff --git a/docs/rc/search/groups_6.html b/docs/rc/search/groups_6.html
new file mode 100644
index 0000000..176b61a
--- /dev/null
+++ b/docs/rc/search/groups_6.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="groups_6.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/groups_6.js b/docs/rc/search/groups_6.js
new file mode 100644
index 0000000..b2412f0
--- /dev/null
+++ b/docs/rc/search/groups_6.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+  ['generalized_20linear_20models',['Generalized Linear Models',['../group__grp__glm.html',1,'']]],
+  ['gpu_20configuration',['GPU Configuration',['../group__grp__gpu__configuration.html',1,'']]],
+  ['graph',['Graph',['../group__grp__graph.html',1,'']]],
+  ['graph_20diameter',['Graph Diameter',['../group__grp__graph__diameter.html',1,'']]]
+];
diff --git a/docs/rc/search/groups_7.html b/docs/rc/search/groups_7.html
new file mode 100644
index 0000000..0b8fa02
--- /dev/null
+++ b/docs/rc/search/groups_7.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="groups_7.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/groups_7.js b/docs/rc/search/groups_7.js
new file mode 100644
index 0000000..1142b35
--- /dev/null
+++ b/docs/rc/search/groups_7.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['hits',['HITS',['../group__grp__hits.html',1,'']]],
+  ['hypothesis_20tests',['Hypothesis Tests',['../group__grp__stats__tests.html',1,'']]]
+];
diff --git a/docs/rc/search/groups_8.html b/docs/rc/search/groups_8.html
new file mode 100644
index 0000000..5bee592
--- /dev/null
+++ b/docs/rc/search/groups_8.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="groups_8.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/groups_8.js b/docs/rc/search/groups_8.js
new file mode 100644
index 0000000..21445e6
--- /dev/null
+++ b/docs/rc/search/groups_8.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['in_2dout_20degree',['In-Out Degree',['../group__grp__graph__vertex__degrees.html',1,'']]],
+  ['inferential_20statistics',['Inferential Statistics',['../group__grp__inf__stats.html',1,'']]]
+];
diff --git a/docs/rc/search/groups_9.html b/docs/rc/search/groups_9.html
new file mode 100644
index 0000000..00d9cb3
--- /dev/null
+++ b/docs/rc/search/groups_9.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="groups_9.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/groups_9.js b/docs/rc/search/groups_9.js
new file mode 100644
index 0000000..3968d82
--- /dev/null
+++ b/docs/rc/search/groups_9.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+  ['keras',['Keras',['../group__grp__keras.html',1,'']]],
+  ['k_2dmeans_20clustering',['k-Means Clustering',['../group__grp__kmeans.html',1,'']]],
+  ['k_2dnearest_20neighbors',['k-Nearest Neighbors',['../group__grp__knn.html',1,'']]]
+];
diff --git a/docs/rc/search/groups_a.html b/docs/rc/search/groups_a.html
new file mode 100644
index 0000000..4949930
--- /dev/null
+++ b/docs/rc/search/groups_a.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="groups_a.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/groups_a.js b/docs/rc/search/groups_a.js
new file mode 100644
index 0000000..cfafb7e
--- /dev/null
+++ b/docs/rc/search/groups_a.js
@@ -0,0 +1,9 @@
+var searchData=
+[
+  ['load_20models',['Load Models',['../group__grp__keras__model__arch.html',1,'']]],
+  ['latent_20dirichlet_20allocation',['Latent Dirichlet Allocation',['../group__grp__lda.html',1,'']]],
+  ['linear_20solvers',['Linear Solvers',['../group__grp__linear__solver.html',1,'']]],
+  ['linear_20regression',['Linear Regression',['../group__grp__linreg.html',1,'']]],
+  ['low_2drank_20matrix_20factorization',['Low-Rank Matrix Factorization',['../group__grp__lmf.html',1,'']]],
+  ['logistic_20regression',['Logistic Regression',['../group__grp__logreg.html',1,'']]]
+];
diff --git a/docs/rc/search/groups_b.html b/docs/rc/search/groups_b.html
new file mode 100644
index 0000000..cc59f7f
--- /dev/null
+++ b/docs/rc/search/groups_b.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="groups_b.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/groups_b.js b/docs/rc/search/groups_b.js
new file mode 100644
index 0000000..07512aa
--- /dev/null
+++ b/docs/rc/search/groups_b.js
@@ -0,0 +1,13 @@
+var searchData=
+[
+  ['measures',['Measures',['../group__grp__graph__measures.html',1,'']]],
+  ['marginal_20effects',['Marginal Effects',['../group__grp__marginal.html',1,'']]],
+  ['matrix_20operations',['Matrix Operations',['../group__grp__matrix.html',1,'']]],
+  ['matrix_20factorization',['Matrix Factorization',['../group__grp__matrix__factorization.html',1,'']]],
+  ['model_20selection',['Model Selection',['../group__grp__mdl.html',1,'']]],
+  ['mfv_20_28most_20frequent_20values_29',['MFV (Most Frequent Values)',['../group__grp__mfvsketch.html',1,'']]],
+  ['mini_2dbatch_20preprocessor',['Mini-Batch Preprocessor',['../group__grp__minibatch__preprocessing.html',1,'']]],
+  ['multinomial_20logistic_20regression',['Multinomial Logistic Regression',['../group__grp__mlogreg.html',1,'']]],
+  ['model_20selection_20for_20dl',['Model Selection for DL',['../group__grp__model__selection.html',1,'']]],
+  ['multinomial_20regression',['Multinomial Regression',['../group__grp__multinom.html',1,'']]]
+];
diff --git a/docs/rc/search/groups_c.html b/docs/rc/search/groups_c.html
new file mode 100644
index 0000000..07a0716
--- /dev/null
+++ b/docs/rc/search/groups_c.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="groups_c.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/groups_c.js b/docs/rc/search/groups_c.js
new file mode 100644
index 0000000..8c55c32
--- /dev/null
+++ b/docs/rc/search/groups_c.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+  ['naive_20bayes_20classification',['Naive Bayes Classification',['../group__grp__bayes.html',1,'']]],
+  ['norms_20and_20distance_20functions',['Norms and Distance Functions',['../group__grp__linalg.html',1,'']]],
+  ['neural_20network',['Neural Network',['../group__grp__nn.html',1,'']]]
+];
diff --git a/docs/rc/search/groups_d.html b/docs/rc/search/groups_d.html
new file mode 100644
index 0000000..1713df4
--- /dev/null
+++ b/docs/rc/search/groups_d.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="groups_d.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/groups_d.js b/docs/rc/search/groups_d.js
new file mode 100644
index 0000000..0a3f634
--- /dev/null
+++ b/docs/rc/search/groups_d.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['ordinal_20regression',['Ordinal Regression',['../group__grp__ordinal.html',1,'']]]
+];
diff --git a/docs/rc/search/groups_e.html b/docs/rc/search/groups_e.html
new file mode 100644
index 0000000..459d030
--- /dev/null
+++ b/docs/rc/search/groups_e.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="groups_e.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/groups_e.js b/docs/rc/search/groups_e.js
new file mode 100644
index 0000000..9a23285
--- /dev/null
+++ b/docs/rc/search/groups_e.js
@@ -0,0 +1,12 @@
+var searchData=
+[
+  ['preprocessor_20for_20images',['Preprocessor for Images',['../group__grp__input__preprocessor__dl.html',1,'']]],
+  ['pagerank',['PageRank',['../group__grp__pagerank.html',1,'']]],
+  ['path',['Path',['../group__grp__path.html',1,'']]],
+  ['principal_20component_20projection',['Principal Component Projection',['../group__grp__pca__project.html',1,'']]],
+  ['principal_20component_20analysis',['Principal Component Analysis',['../group__grp__pca__train.html',1,'']]],
+  ['pivot',['Pivot',['../group__grp__pivot.html',1,'']]],
+  ['pmml_20export',['PMML Export',['../group__grp__pmml.html',1,'']]],
+  ['prediction_20metrics',['Prediction Metrics',['../group__grp__pred.html',1,'']]],
+  ['probability_20functions',['Probability Functions',['../group__grp__prob.html',1,'']]]
+];
diff --git a/docs/rc/search/groups_f.html b/docs/rc/search/groups_f.html
new file mode 100644
index 0000000..9689c57
--- /dev/null
+++ b/docs/rc/search/groups_f.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="groups_f.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/groups_f.js b/docs/rc/search/groups_f.js
new file mode 100644
index 0000000..93dd52a
--- /dev/null
+++ b/docs/rc/search/groups_f.js
@@ -0,0 +1,8 @@
+var searchData=
+[
+  ['run_20model_20selection',['Run Model Selection',['../group__grp__keras__run__model__selection.html',1,'']]],
+  ['random_20forest',['Random Forest',['../group__grp__random__forest.html',1,'']]],
+  ['regression_20models',['Regression Models',['../group__grp__regml.html',1,'']]],
+  ['robust_20variance',['Robust Variance',['../group__grp__robust.html',1,'']]],
+  ['random_20sampling',['Random Sampling',['../group__grp__sample.html',1,'']]]
+];
diff --git a/docs/rc/search/mag_sel.png b/docs/rc/search/mag_sel.png
new file mode 100644
index 0000000..81f6040
--- /dev/null
+++ b/docs/rc/search/mag_sel.png
Binary files differ
diff --git a/docs/rc/search/nomatches.html b/docs/rc/search/nomatches.html
new file mode 100644
index 0000000..b1ded27
--- /dev/null
+++ b/docs/rc/search/nomatches.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/search.css b/docs/rc/search/search.css
new file mode 100644
index 0000000..a0dba44
--- /dev/null
+++ b/docs/rc/search/search.css
@@ -0,0 +1,273 @@
+/*---------------- Search Box */
+
+#FSearchBox {
+    float: left;
+}
+
+#MSearchBox {
+    white-space : nowrap;
+    float: none;
+    margin-top: 0px;
+    right: 0px;
+    width: 170px;
+    height: 24px;
+    z-index: 102;
+    display: inline;
+    position: absolute;
+}
+
+#MSearchBox .left
+{
+    display:block;
+    position:absolute;
+    left:10px;
+    width:20px;
+    height:19px;
+    background:url('search_l.png') no-repeat;
+    background-position:right;
+}
+
+#MSearchSelect {
+    display:block;
+    position:absolute;
+    width:20px;
+    height:19px;
+}
+
+.left #MSearchSelect {
+    left:4px;
+}
+
+.right #MSearchSelect {
+    right:5px;
+}
+
+#MSearchField {
+    display:block;
+    position:absolute;
+    height:19px;
+    background:url('search_m.png') repeat-x;
+    border:none;
+    width:111px;
+    margin-left:20px;
+    padding-left:4px;
+    color: #909090;
+    outline: none;
+    font: 9pt Arial, Verdana, sans-serif;
+    -webkit-border-radius: 0px;
+}
+
+#FSearchBox #MSearchField {
+    margin-left:15px;
+}
+
+#MSearchBox .right {
+    display:block;
+    position:absolute;
+    right:10px;
+    top:0px;
+    width:20px;
+    height:19px;
+    background:url('search_r.png') no-repeat;
+    background-position:left;
+}
+
+#MSearchClose {
+    display: none;
+    position: absolute;
+    top: 4px;
+    background : none;
+    border: none;
+    margin: 0px 4px 0px 0px;
+    padding: 0px 0px;
+    outline: none;
+}
+
+.left #MSearchClose {
+    left: 6px;
+}
+
+.right #MSearchClose {
+    right: 2px;
+}
+
+.MSearchBoxActive #MSearchField {
+    color: #000000;
+}
+
+/*---------------- Search filter selection */
+
+#MSearchSelectWindow {
+    display: none;
+    position: absolute;
+    left: 0; top: 0;
+    border: 1px solid #90A5CE;
+    background-color: #F9FAFC;
+    z-index: 10001;
+    padding-top: 4px;
+    padding-bottom: 4px;
+    -moz-border-radius: 4px;
+    -webkit-border-top-left-radius: 4px;
+    -webkit-border-top-right-radius: 4px;
+    -webkit-border-bottom-left-radius: 4px;
+    -webkit-border-bottom-right-radius: 4px;
+    -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+}
+
+.SelectItem {
+    font: 8pt Arial, Verdana, sans-serif;
+    padding-left:  2px;
+    padding-right: 12px;
+    border: 0px;
+}
+
+span.SelectionMark {
+    margin-right: 4px;
+    font-family: monospace;
+    outline-style: none;
+    text-decoration: none;
+}
+
+a.SelectItem {
+    display: block;
+    outline-style: none;
+    color: #000000; 
+    text-decoration: none;
+    padding-left:   6px;
+    padding-right: 12px;
+}
+
+a.SelectItem:focus,
+a.SelectItem:active {
+    color: #000000; 
+    outline-style: none;
+    text-decoration: none;
+}
+
+a.SelectItem:hover {
+    color: #FFFFFF;
+    background-color: #3D578C;
+    outline-style: none;
+    text-decoration: none;
+    cursor: pointer;
+    display: block;
+}
+
+/*---------------- Search results window */
+
+iframe#MSearchResults {
+    width: 60ex;
+    height: 15em;
+}
+
+#MSearchResultsWindow {
+    display: none;
+    position: absolute;
+    left: 0; top: 0;
+    border: 1px solid #000;
+    background-color: #EEF1F7;
+    z-index:10000;
+}
+
+/* ----------------------------------- */
+
+
+#SRIndex {
+    clear:both; 
+    padding-bottom: 15px;
+}
+
+.SREntry {
+    font-size: 10pt;
+    padding-left: 1ex;
+}
+
+.SRPage .SREntry {
+    font-size: 8pt;
+    padding: 1px 5px;
+}
+
+body.SRPage {
+    margin: 5px 2px;
+}
+
+.SRChildren {
+    padding-left: 3ex; padding-bottom: .5em 
+}
+
+.SRPage .SRChildren {
+    display: none;
+}
+
+.SRSymbol {
+    font-weight: bold; 
+    color: #425E97;
+    font-family: Arial, Verdana, sans-serif;
+    text-decoration: none;
+    outline: none;
+}
+
+a.SRScope {
+    display: block;
+    color: #425E97; 
+    font-family: Arial, Verdana, sans-serif;
+    text-decoration: none;
+    outline: none;
+}
+
+a.SRSymbol:focus, a.SRSymbol:active,
+a.SRScope:focus, a.SRScope:active {
+    text-decoration: underline;
+}
+
+span.SRScope {
+    padding-left: 4px;
+}
+
+.SRPage .SRStatus {
+    padding: 2px 5px;
+    font-size: 8pt;
+    font-style: italic;
+}
+
+.SRResult {
+    display: none;
+}
+
+DIV.searchresults {
+    margin-left: 10px;
+    margin-right: 10px;
+}
+
+/*---------------- External search page results */
+
+.searchresult {
+    background-color: #F0F3F8;
+}
+
+.pages b {
+   color: white;
+   padding: 5px 5px 3px 5px;
+   background-image: url("../tab_a.png");
+   background-repeat: repeat-x;
+   text-shadow: 0 1px 1px #000000;
+}
+
+.pages {
+    line-height: 17px;
+    margin-left: 4px;
+    text-decoration: none;
+}
+
+.hl {
+    font-weight: bold;
+}
+
+#searchresults {
+    margin-bottom: 20px;
+}
+
+.searchpages {
+    margin-top: 10px;
+}
+
diff --git a/docs/rc/search/search.js b/docs/rc/search/search.js
new file mode 100644
index 0000000..dedce3b
--- /dev/null
+++ b/docs/rc/search/search.js
@@ -0,0 +1,791 @@
+function convertToId(search)
+{
+  var result = '';
+  for (i=0;i<search.length;i++)
+  {
+    var c = search.charAt(i);
+    var cn = c.charCodeAt(0);
+    if (c.match(/[a-z0-9\u0080-\uFFFF]/))
+    {
+      result+=c;
+    }
+    else if (cn<16)
+    {
+      result+="_0"+cn.toString(16);
+    }
+    else
+    {
+      result+="_"+cn.toString(16);
+    }
+  }
+  return result;
+}
+
+function getXPos(item)
+{
+  var x = 0;
+  if (item.offsetWidth)
+  {
+    while (item && item!=document.body)
+    {
+      x   += item.offsetLeft;
+      item = item.offsetParent;
+    }
+  }
+  return x;
+}
+
+function getYPos(item)
+{
+  var y = 0;
+  if (item.offsetWidth)
+  {
+     while (item && item!=document.body)
+     {
+       y   += item.offsetTop;
+       item = item.offsetParent;
+     }
+  }
+  return y;
+}
+
+/* A class handling everything associated with the search panel.
+
+   Parameters:
+   name - The name of the global variable that will be
+          storing this instance.  Is needed to be able to set timeouts.
+   resultPath - path to use for external files
+*/
+function SearchBox(name, resultsPath, inFrame, label)
+{
+  if (!name || !resultsPath) {  alert("Missing parameters to SearchBox."); }
+
+  // ---------- Instance variables
+  this.name                  = name;
+  this.resultsPath           = resultsPath;
+  this.keyTimeout            = 0;
+  this.keyTimeoutLength      = 500;
+  this.closeSelectionTimeout = 300;
+  this.lastSearchValue       = "";
+  this.lastResultsPage       = "";
+  this.hideTimeout           = 0;
+  this.searchIndex           = 0;
+  this.searchActive          = false;
+  this.insideFrame           = inFrame;
+  this.searchLabel           = label;
+
+  // ----------- DOM Elements
+
+  this.DOMSearchField = function()
+  {  return document.getElementById("MSearchField");  }
+
+  this.DOMSearchSelect = function()
+  {  return document.getElementById("MSearchSelect");  }
+
+  this.DOMSearchSelectWindow = function()
+  {  return document.getElementById("MSearchSelectWindow");  }
+
+  this.DOMPopupSearchResults = function()
+  {  return document.getElementById("MSearchResults");  }
+
+  this.DOMPopupSearchResultsWindow = function()
+  {  return document.getElementById("MSearchResultsWindow");  }
+
+  this.DOMSearchClose = function()
+  {  return document.getElementById("MSearchClose"); }
+
+  this.DOMSearchBox = function()
+  {  return document.getElementById("MSearchBox");  }
+
+  // ------------ Event Handlers
+
+  // Called when focus is added or removed from the search field.
+  this.OnSearchFieldFocus = function(isActive)
+  {
+    this.Activate(isActive);
+  }
+
+  this.OnSearchSelectShow = function()
+  {
+    var searchSelectWindow = this.DOMSearchSelectWindow();
+    var searchField        = this.DOMSearchSelect();
+
+    if (this.insideFrame)
+    {
+      var left = getXPos(searchField);
+      var top  = getYPos(searchField);
+      left += searchField.offsetWidth + 6;
+      top += searchField.offsetHeight;
+
+      // show search selection popup
+      searchSelectWindow.style.display='block';
+      left -= searchSelectWindow.offsetWidth;
+      searchSelectWindow.style.left =  left + 'px';
+      searchSelectWindow.style.top  =  top  + 'px';
+    }
+    else
+    {
+      var left = getXPos(searchField);
+      var top  = getYPos(searchField);
+      top += searchField.offsetHeight;
+
+      // show search selection popup
+      searchSelectWindow.style.display='block';
+      searchSelectWindow.style.left =  left + 'px';
+      searchSelectWindow.style.top  =  top  + 'px';
+    }
+
+    // stop selection hide timer
+    if (this.hideTimeout)
+    {
+      clearTimeout(this.hideTimeout);
+      this.hideTimeout=0;
+    }
+    return false; // to avoid "image drag" default event
+  }
+
+  this.OnSearchSelectHide = function()
+  {
+    this.hideTimeout = setTimeout(this.name +".CloseSelectionWindow()",
+                                  this.closeSelectionTimeout);
+  }
+
+  // Called when the content of the search field is changed.
+  this.OnSearchFieldChange = function(evt)
+  {
+    if (this.keyTimeout) // kill running timer
+    {
+      clearTimeout(this.keyTimeout);
+      this.keyTimeout = 0;
+    }
+
+    var e  = (evt) ? evt : window.event; // for IE
+    if (e.keyCode==40 || e.keyCode==13)
+    {
+      if (e.shiftKey==1)
+      {
+        this.OnSearchSelectShow();
+        var win=this.DOMSearchSelectWindow();
+        for (i=0;i<win.childNodes.length;i++)
+        {
+          var child = win.childNodes[i]; // get span within a
+          if (child.className=='SelectItem')
+          {
+            child.focus();
+            return;
+          }
+        }
+        return;
+      }
+      else if (window.frames.MSearchResults.searchResults)
+      {
+        var elem = window.frames.MSearchResults.searchResults.NavNext(0);
+        if (elem) elem.focus();
+      }
+    }
+    else if (e.keyCode==27) // Escape out of the search field
+    {
+      this.DOMSearchField().blur();
+      this.DOMPopupSearchResultsWindow().style.display = 'none';
+      this.DOMSearchClose().style.display = 'none';
+      this.lastSearchValue = '';
+      this.Activate(false);
+      return;
+    }
+
+    // strip whitespaces
+    var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
+
+    if (searchValue != this.lastSearchValue) // search value has changed
+    {
+      if (searchValue != "") // non-empty search
+      {
+        // set timer for search update
+        this.keyTimeout = setTimeout(this.name + '.Search()',
+                                     this.keyTimeoutLength);
+      }
+      else // empty search field
+      {
+        this.DOMPopupSearchResultsWindow().style.display = 'none';
+        this.DOMSearchClose().style.display = 'none';
+        this.lastSearchValue = '';
+      }
+    }
+  }
+
+  this.SelectItemCount = function(id)
+  {
+    var count=0;
+    var win=this.DOMSearchSelectWindow();
+    for (i=0;i<win.childNodes.length;i++)
+    {
+      var child = win.childNodes[i]; // get span within a
+      if (child.className=='SelectItem')
+      {
+        count++;
+      }
+    }
+    return count;
+  }
+
+  this.SelectItemSet = function(id)
+  {
+    var i,j=0;
+    var win=this.DOMSearchSelectWindow();
+    for (i=0;i<win.childNodes.length;i++)
+    {
+      var child = win.childNodes[i]; // get span within a
+      if (child.className=='SelectItem')
+      {
+        var node = child.firstChild;
+        if (j==id)
+        {
+          node.innerHTML='&#8226;';
+        }
+        else
+        {
+          node.innerHTML='&#160;';
+        }
+        j++;
+      }
+    }
+  }
+
+  // Called when an search filter selection is made.
+  // set item with index id as the active item
+  this.OnSelectItem = function(id)
+  {
+    this.searchIndex = id;
+    this.SelectItemSet(id);
+    var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
+    if (searchValue!="" && this.searchActive) // something was found -> do a search
+    {
+      this.Search();
+    }
+  }
+
+  this.OnSearchSelectKey = function(evt)
+  {
+    var e = (evt) ? evt : window.event; // for IE
+    if (e.keyCode==40 && this.searchIndex<this.SelectItemCount()) // Down
+    {
+      this.searchIndex++;
+      this.OnSelectItem(this.searchIndex);
+    }
+    else if (e.keyCode==38 && this.searchIndex>0) // Up
+    {
+      this.searchIndex--;
+      this.OnSelectItem(this.searchIndex);
+    }
+    else if (e.keyCode==13 || e.keyCode==27)
+    {
+      this.OnSelectItem(this.searchIndex);
+      this.CloseSelectionWindow();
+      this.DOMSearchField().focus();
+    }
+    return false;
+  }
+
+  // --------- Actions
+
+  // Closes the results window.
+  this.CloseResultsWindow = function()
+  {
+    this.DOMPopupSearchResultsWindow().style.display = 'none';
+    this.DOMSearchClose().style.display = 'none';
+    this.Activate(false);
+  }
+
+  this.CloseSelectionWindow = function()
+  {
+    this.DOMSearchSelectWindow().style.display = 'none';
+  }
+
+  // Performs a search.
+  this.Search = function()
+  {
+    this.keyTimeout = 0;
+
+    // strip leading whitespace
+    var searchValue = this.DOMSearchField().value.replace(/^ +/, "");
+
+    var code = searchValue.toLowerCase().charCodeAt(0);
+    var idxChar = searchValue.substr(0, 1).toLowerCase();
+    if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair
+    {
+      idxChar = searchValue.substr(0, 2);
+    }
+
+    var resultsPage;
+    var resultsPageWithSearch;
+    var hasResultsPage;
+
+    var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar);
+    if (idx!=-1)
+    {
+       var hexCode=idx.toString(16);
+       resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html';
+       resultsPageWithSearch = resultsPage+'?'+escape(searchValue);
+       hasResultsPage = true;
+    }
+    else // nothing available for this search term
+    {
+       resultsPage = this.resultsPath + '/nomatches.html';
+       resultsPageWithSearch = resultsPage;
+       hasResultsPage = false;
+    }
+
+    window.frames.MSearchResults.location = resultsPageWithSearch;
+    var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow();
+
+    if (domPopupSearchResultsWindow.style.display!='block')
+    {
+       var domSearchBox = this.DOMSearchBox();
+       this.DOMSearchClose().style.display = 'inline';
+       if (this.insideFrame)
+       {
+         var domPopupSearchResults = this.DOMPopupSearchResults();
+         domPopupSearchResultsWindow.style.position = 'relative';
+         domPopupSearchResultsWindow.style.display  = 'block';
+         var width = document.body.clientWidth - 8; // the -8 is for IE :-(
+         domPopupSearchResultsWindow.style.width    = width + 'px';
+         domPopupSearchResults.style.width          = width + 'px';
+       }
+       else
+       {
+         var domPopupSearchResults = this.DOMPopupSearchResults();
+         var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth;
+         var top  = getYPos(domSearchBox) + 20;  // domSearchBox.offsetHeight + 1;
+         domPopupSearchResultsWindow.style.display = 'block';
+         left -= domPopupSearchResults.offsetWidth;
+         domPopupSearchResultsWindow.style.top     = top  + 'px';
+         domPopupSearchResultsWindow.style.left    = left + 'px';
+       }
+    }
+
+    this.lastSearchValue = searchValue;
+    this.lastResultsPage = resultsPage;
+  }
+
+  // -------- Activation Functions
+
+  // Activates or deactivates the search panel, resetting things to
+  // their default values if necessary.
+  this.Activate = function(isActive)
+  {
+    if (isActive || // open it
+        this.DOMPopupSearchResultsWindow().style.display == 'block'
+       )
+    {
+      this.DOMSearchBox().className = 'MSearchBoxActive';
+
+      var searchField = this.DOMSearchField();
+
+      if (searchField.value == this.searchLabel) // clear "Search" term upon entry
+      {
+        searchField.value = '';
+        this.searchActive = true;
+      }
+    }
+    else if (!isActive) // directly remove the panel
+    {
+      this.DOMSearchBox().className = 'MSearchBoxInactive';
+      this.DOMSearchField().value   = this.searchLabel;
+      this.searchActive             = false;
+      this.lastSearchValue          = ''
+      this.lastResultsPage          = '';
+    }
+  }
+}
+
+// -----------------------------------------------------------------------
+
+// The class that handles everything on the search results page.
+function SearchResults(name)
+{
+    // The number of matches from the last run of <Search()>.
+    this.lastMatchCount = 0;
+    this.lastKey = 0;
+    this.repeatOn = false;
+
+    // Toggles the visibility of the passed element ID.
+    this.FindChildElement = function(id)
+    {
+      var parentElement = document.getElementById(id);
+      var element = parentElement.firstChild;
+
+      while (element && element!=parentElement)
+      {
+        if (element.nodeName == 'DIV' && element.className == 'SRChildren')
+        {
+          return element;
+        }
+
+        if (element.nodeName == 'DIV' && element.hasChildNodes())
+        {
+           element = element.firstChild;
+        }
+        else if (element.nextSibling)
+        {
+           element = element.nextSibling;
+        }
+        else
+        {
+          do
+          {
+            element = element.parentNode;
+          }
+          while (element && element!=parentElement && !element.nextSibling);
+
+          if (element && element!=parentElement)
+          {
+            element = element.nextSibling;
+          }
+        }
+      }
+    }
+
+    this.Toggle = function(id)
+    {
+      var element = this.FindChildElement(id);
+      if (element)
+      {
+        if (element.style.display == 'block')
+        {
+          element.style.display = 'none';
+        }
+        else
+        {
+          element.style.display = 'block';
+        }
+      }
+    }
+
+    // Searches for the passed string.  If there is no parameter,
+    // it takes it from the URL query.
+    //
+    // Always returns true, since other documents may try to call it
+    // and that may or may not be possible.
+    this.Search = function(search)
+    {
+      if (!search) // get search word from URL
+      {
+        search = window.location.search;
+        search = search.substring(1);  // Remove the leading '?'
+        search = unescape(search);
+      }
+
+      search = search.replace(/^ +/, ""); // strip leading spaces
+      search = search.replace(/ +$/, ""); // strip trailing spaces
+      search = search.toLowerCase();
+      search = convertToId(search);
+
+      var resultRows = document.getElementsByTagName("div");
+      var matches = 0;
+
+      var i = 0;
+      while (i < resultRows.length)
+      {
+        var row = resultRows.item(i);
+        if (row.className == "SRResult")
+        {
+          var rowMatchName = row.id.toLowerCase();
+          rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_'
+
+          if (search.length<=rowMatchName.length &&
+             rowMatchName.substr(0, search.length)==search)
+          {
+            row.style.display = 'block';
+            matches++;
+          }
+          else
+          {
+            row.style.display = 'none';
+          }
+        }
+        i++;
+      }
+      document.getElementById("Searching").style.display='none';
+      if (matches == 0) // no results
+      {
+        document.getElementById("NoMatches").style.display='block';
+      }
+      else // at least one result
+      {
+        document.getElementById("NoMatches").style.display='none';
+      }
+      this.lastMatchCount = matches;
+      return true;
+    }
+
+    // return the first item with index index or higher that is visible
+    this.NavNext = function(index)
+    {
+      var focusItem;
+      while (1)
+      {
+        var focusName = 'Item'+index;
+        focusItem = document.getElementById(focusName);
+        if (focusItem && focusItem.parentNode.parentNode.style.display=='block')
+        {
+          break;
+        }
+        else if (!focusItem) // last element
+        {
+          break;
+        }
+        focusItem=null;
+        index++;
+      }
+      return focusItem;
+    }
+
+    this.NavPrev = function(index)
+    {
+      var focusItem;
+      while (1)
+      {
+        var focusName = 'Item'+index;
+        focusItem = document.getElementById(focusName);
+        if (focusItem && focusItem.parentNode.parentNode.style.display=='block')
+        {
+          break;
+        }
+        else if (!focusItem) // last element
+        {
+          break;
+        }
+        focusItem=null;
+        index--;
+      }
+      return focusItem;
+    }
+
+    this.ProcessKeys = function(e)
+    {
+      if (e.type == "keydown")
+      {
+        this.repeatOn = false;
+        this.lastKey = e.keyCode;
+      }
+      else if (e.type == "keypress")
+      {
+        if (!this.repeatOn)
+        {
+          if (this.lastKey) this.repeatOn = true;
+          return false; // ignore first keypress after keydown
+        }
+      }
+      else if (e.type == "keyup")
+      {
+        this.lastKey = 0;
+        this.repeatOn = false;
+      }
+      return this.lastKey!=0;
+    }
+
+    this.Nav = function(evt,itemIndex)
+    {
+      var e  = (evt) ? evt : window.event; // for IE
+      if (e.keyCode==13) return true;
+      if (!this.ProcessKeys(e)) return false;
+
+      if (this.lastKey==38) // Up
+      {
+        var newIndex = itemIndex-1;
+        var focusItem = this.NavPrev(newIndex);
+        if (focusItem)
+        {
+          var child = this.FindChildElement(focusItem.parentNode.parentNode.id);
+          if (child && child.style.display == 'block') // children visible
+          {
+            var n=0;
+            var tmpElem;
+            while (1) // search for last child
+            {
+              tmpElem = document.getElementById('Item'+newIndex+'_c'+n);
+              if (tmpElem)
+              {
+                focusItem = tmpElem;
+              }
+              else // found it!
+              {
+                break;
+              }
+              n++;
+            }
+          }
+        }
+        if (focusItem)
+        {
+          focusItem.focus();
+        }
+        else // return focus to search field
+        {
+           parent.document.getElementById("MSearchField").focus();
+        }
+      }
+      else if (this.lastKey==40) // Down
+      {
+        var newIndex = itemIndex+1;
+        var focusItem;
+        var item = document.getElementById('Item'+itemIndex);
+        var elem = this.FindChildElement(item.parentNode.parentNode.id);
+        if (elem && elem.style.display == 'block') // children visible
+        {
+          focusItem = document.getElementById('Item'+itemIndex+'_c0');
+        }
+        if (!focusItem) focusItem = this.NavNext(newIndex);
+        if (focusItem)  focusItem.focus();
+      }
+      else if (this.lastKey==39) // Right
+      {
+        var item = document.getElementById('Item'+itemIndex);
+        var elem = this.FindChildElement(item.parentNode.parentNode.id);
+        if (elem) elem.style.display = 'block';
+      }
+      else if (this.lastKey==37) // Left
+      {
+        var item = document.getElementById('Item'+itemIndex);
+        var elem = this.FindChildElement(item.parentNode.parentNode.id);
+        if (elem) elem.style.display = 'none';
+      }
+      else if (this.lastKey==27) // Escape
+      {
+        parent.searchBox.CloseResultsWindow();
+        parent.document.getElementById("MSearchField").focus();
+      }
+      else if (this.lastKey==13) // Enter
+      {
+        return true;
+      }
+      return false;
+    }
+
+    this.NavChild = function(evt,itemIndex,childIndex)
+    {
+      var e  = (evt) ? evt : window.event; // for IE
+      if (e.keyCode==13) return true;
+      if (!this.ProcessKeys(e)) return false;
+
+      if (this.lastKey==38) // Up
+      {
+        if (childIndex>0)
+        {
+          var newIndex = childIndex-1;
+          document.getElementById('Item'+itemIndex+'_c'+newIndex).focus();
+        }
+        else // already at first child, jump to parent
+        {
+          document.getElementById('Item'+itemIndex).focus();
+        }
+      }
+      else if (this.lastKey==40) // Down
+      {
+        var newIndex = childIndex+1;
+        var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex);
+        if (!elem) // last child, jump to parent next parent
+        {
+          elem = this.NavNext(itemIndex+1);
+        }
+        if (elem)
+        {
+          elem.focus();
+        }
+      }
+      else if (this.lastKey==27) // Escape
+      {
+        parent.searchBox.CloseResultsWindow();
+        parent.document.getElementById("MSearchField").focus();
+      }
+      else if (this.lastKey==13) // Enter
+      {
+        return true;
+      }
+      return false;
+    }
+}
+
+function setKeyActions(elem,action)
+{
+  elem.setAttribute('onkeydown',action);
+  elem.setAttribute('onkeypress',action);
+  elem.setAttribute('onkeyup',action);
+}
+
+function setClassAttr(elem,attr)
+{
+  elem.setAttribute('class',attr);
+  elem.setAttribute('className',attr);
+}
+
+function createResults()
+{
+  var results = document.getElementById("SRResults");
+  for (var e=0; e<searchData.length; e++)
+  {
+    var id = searchData[e][0];
+    var srResult = document.createElement('div');
+    srResult.setAttribute('id','SR_'+id);
+    setClassAttr(srResult,'SRResult');
+    var srEntry = document.createElement('div');
+    setClassAttr(srEntry,'SREntry');
+    var srLink = document.createElement('a');
+    srLink.setAttribute('id','Item'+e);
+    setKeyActions(srLink,'return searchResults.Nav(event,'+e+')');
+    setClassAttr(srLink,'SRSymbol');
+    srLink.innerHTML = searchData[e][1][0];
+    srEntry.appendChild(srLink);
+    if (searchData[e][1].length==2) // single result
+    {
+      srLink.setAttribute('href',searchData[e][1][1][0]);
+      if (searchData[e][1][1][1])
+      {
+       srLink.setAttribute('target','_parent');
+      }
+      var srScope = document.createElement('span');
+      setClassAttr(srScope,'SRScope');
+      srScope.innerHTML = searchData[e][1][1][2];
+      srEntry.appendChild(srScope);
+    }
+    else // multiple results
+    {
+      srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")');
+      var srChildren = document.createElement('div');
+      setClassAttr(srChildren,'SRChildren');
+      for (var c=0; c<searchData[e][1].length-1; c++)
+      {
+        var srChild = document.createElement('a');
+        srChild.setAttribute('id','Item'+e+'_c'+c);
+        setKeyActions(srChild,'return searchResults.NavChild(event,'+e+','+c+')');
+        setClassAttr(srChild,'SRScope');
+        srChild.setAttribute('href',searchData[e][1][c+1][0]);
+        if (searchData[e][1][c+1][1])
+        {
+         srChild.setAttribute('target','_parent');
+        }
+        srChild.innerHTML = searchData[e][1][c+1][2];
+        srChildren.appendChild(srChild);
+      }
+      srEntry.appendChild(srChildren);
+    }
+    srResult.appendChild(srEntry);
+    results.appendChild(srResult);
+  }
+}
+
+function init_search()
+{
+  var results = document.getElementById("MSearchSelectWindow");
+  for (var key in indexSectionLabels)
+  {
+    var link = document.createElement('a');
+    link.setAttribute('class','SelectItem');
+    link.setAttribute('onclick','searchBox.OnSelectItem('+key+')');
+    link.href='javascript:void(0)';
+    link.innerHTML='<span class="SelectionMark">&#160;</span>'+indexSectionLabels[key];
+    results.appendChild(link);
+  }
+  searchBox.OnSelectItem(0);
+}
+
diff --git a/docs/rc/search/search_l.png b/docs/rc/search/search_l.png
new file mode 100644
index 0000000..c872f4d
--- /dev/null
+++ b/docs/rc/search/search_l.png
Binary files differ
diff --git a/docs/rc/search/search_m.png b/docs/rc/search/search_m.png
new file mode 100644
index 0000000..b429a16
--- /dev/null
+++ b/docs/rc/search/search_m.png
Binary files differ
diff --git a/docs/rc/search/search_r.png b/docs/rc/search/search_r.png
new file mode 100644
index 0000000..97ee8b4
--- /dev/null
+++ b/docs/rc/search/search_r.png
Binary files differ
diff --git a/docs/rc/search/searchdata.js b/docs/rc/search/searchdata.js
new file mode 100644
index 0000000..57514c4
--- /dev/null
+++ b/docs/rc/search/searchdata.js
@@ -0,0 +1,27 @@
+var indexSectionsWithContent =
+{
+  0: "_abcdefghiklmnoprstuvwz",
+  1: "abcdeghiklmoprstuvw",
+  2: "_abcdefghiklmnoprstuvwz",
+  3: "eirv",
+  4: "abcdefghiklmnoprstuvw"
+};
+
+var indexSectionNames =
+{
+  0: "all",
+  1: "files",
+  2: "functions",
+  3: "variables",
+  4: "groups"
+};
+
+var indexSectionLabels =
+{
+  0: "All",
+  1: "Files",
+  2: "Functions",
+  3: "Variables",
+  4: "Modules"
+};
+
diff --git a/docs/rc/search/variables_0.html b/docs/rc/search/variables_0.html
new file mode 100644
index 0000000..74ce807
--- /dev/null
+++ b/docs/rc/search/variables_0.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/variables_0.js b/docs/rc/search/variables_0.js
new file mode 100644
index 0000000..5c1c8e2
--- /dev/null
+++ b/docs/rc/search/variables_0.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['end',['END',['../random__forest_8sql__in.html#a1de54bd922161dd5c6a353647f448fd6',1,'random_forest.sql_in']]]
+];
diff --git a/docs/rc/search/variables_1.html b/docs/rc/search/variables_1.html
new file mode 100644
index 0000000..84237b6
--- /dev/null
+++ b/docs/rc/search/variables_1.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_1.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/variables_1.js b/docs/rc/search/variables_1.js
new file mode 100644
index 0000000..90b7e93
--- /dev/null
+++ b/docs/rc/search/variables_1.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['immutable',['IMMUTABLE',['../random__forest_8sql__in.html#a8ee741e3812ad259d3ca4c9fa489dc7e',1,'random_forest.sql_in']]]
+];
diff --git a/docs/rc/search/variables_2.html b/docs/rc/search/variables_2.html
new file mode 100644
index 0000000..5c9de1a
--- /dev/null
+++ b/docs/rc/search/variables_2.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_2.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/variables_2.js b/docs/rc/search/variables_2.js
new file mode 100644
index 0000000..61c54c8
--- /dev/null
+++ b/docs/rc/search/variables_2.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['random_5fforest',['random_forest',['../random__forest_8sql__in.html#a7b9a14c36355554372b1163f7b157b88',1,'random_forest.sql_in']]]
+];
diff --git a/docs/rc/search/variables_3.html b/docs/rc/search/variables_3.html
new file mode 100644
index 0000000..f95e34c
--- /dev/null
+++ b/docs/rc/search/variables_3.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_3.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/rc/search/variables_3.js b/docs/rc/search/variables_3.js
new file mode 100644
index 0000000..76b80e3
--- /dev/null
+++ b/docs/rc/search/variables_3.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['volatile',['VOLATILE',['../random__forest_8sql__in.html#a9cf684a2e9bdf9ed0906e11f19b80037',1,'random_forest.sql_in']]]
+];
diff --git a/docs/rc/sessionize_8sql__in.html b/docs/rc/sessionize_8sql__in.html
new file mode 100644
index 0000000..0aab3bc
--- /dev/null
+++ b/docs/rc/sessionize_8sql__in.html
@@ -0,0 +1,345 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: sessionize.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('sessionize_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">sessionize.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>SQL functions for sessionization functions.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a288509ef965178e3841153997c63b0b2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sessionize_8sql__in.html#a288509ef965178e3841153997c63b0b2">sessionize</a> (varchar source_table, varchar output_table, varchar partition_expr, varchar time_stamp, interval max_time, varchar output_cols, boolean create_view)</td></tr>
+<tr class="separator:a288509ef965178e3841153997c63b0b2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afb8a7e6fed41778e20d297051f5184cd"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sessionize_8sql__in.html#afb8a7e6fed41778e20d297051f5184cd">sessionize</a> (varchar source_table, varchar output_table, varchar partition_expr, varchar time_stamp, interval max_time, varchar output_cols)</td></tr>
+<tr class="separator:afb8a7e6fed41778e20d297051f5184cd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a73adab9955f25ef5b3bec39376cea014"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sessionize_8sql__in.html#a73adab9955f25ef5b3bec39376cea014">sessionize</a> (varchar source_table, varchar output_table, varchar partition_expr, varchar time_stamp, interval max_time)</td></tr>
+<tr class="separator:a73adab9955f25ef5b3bec39376cea014"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acbb16f241e71c43e7f972d17e1619fa7"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sessionize_8sql__in.html#acbb16f241e71c43e7f972d17e1619fa7">sessionize</a> (text message)</td></tr>
+<tr class="separator:acbb16f241e71c43e7f972d17e1619fa7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a61a22075a6e70172e568756381798c1d"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sessionize_8sql__in.html#a61a22075a6e70172e568756381798c1d">sessionize</a> ()</td></tr>
+<tr class="separator:a61a22075a6e70172e568756381798c1d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>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</p>
+<p><a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a></p>
+<p>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.</p>
+<dl class="section date"><dt>Date</dt><dd>May 2016 </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="a288509ef965178e3841153997c63b0b2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a288509ef965178e3841153997c63b0b2">&#9670;&nbsp;</a></span>sessionize() <span class="overload">[1/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sessionize </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>partition_expr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>time_stamp</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">interval&#160;</td>
+          <td class="paramname"><em>max_time</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>create_view</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="afb8a7e6fed41778e20d297051f5184cd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afb8a7e6fed41778e20d297051f5184cd">&#9670;&nbsp;</a></span>sessionize() <span class="overload">[2/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sessionize </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>partition_expr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>time_stamp</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">interval&#160;</td>
+          <td class="paramname"><em>max_time</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_cols</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a73adab9955f25ef5b3bec39376cea014"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a73adab9955f25ef5b3bec39376cea014">&#9670;&nbsp;</a></span>sessionize() <span class="overload">[3/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sessionize </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>partition_expr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>time_stamp</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">interval&#160;</td>
+          <td class="paramname"><em>max_time</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="acbb16f241e71c43e7f972d17e1619fa7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acbb16f241e71c43e7f972d17e1619fa7">&#9670;&nbsp;</a></span>sessionize() <span class="overload">[4/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text sessionize </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a61a22075a6e70172e568756381798c1d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a61a22075a6e70172e568756381798c1d">&#9670;&nbsp;</a></span>sessionize() <span class="overload">[5/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text sessionize </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_8d53e1c0026e7e34b4cd68f8b91426d6.html">utilities</a></li><li class="navelem"><a class="el" href="sessionize_8sql__in.html">sessionize.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:57 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/sketch_8sql__in.html b/docs/rc/sketch_8sql__in.html
new file mode 100644
index 0000000..4cbf301
--- /dev/null
+++ b/docs/rc/sketch_8sql__in.html
@@ -0,0 +1,984 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: sketch.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('sketch_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">sketch.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>SQL functions for sketch-based approximations of descriptive statistics.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a335fba86bbb3fb5a3284808cc64b8f16"><td class="memItemLeft" align="right" valign="top">bytea&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sketch_8sql__in.html#a335fba86bbb3fb5a3284808cc64b8f16">big_or</a> (bytea bitmap1, bytea bitmap2)</td></tr>
+<tr class="separator:a335fba86bbb3fb5a3284808cc64b8f16"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a585c96bea2300c0c842eb45799e1fe8b"><td class="memItemLeft" align="right" valign="top">bytea&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sketch_8sql__in.html#a585c96bea2300c0c842eb45799e1fe8b">__fmsketch_trans</a> (bytea bitmaps, anyelement input)</td></tr>
+<tr class="separator:a585c96bea2300c0c842eb45799e1fe8b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ade6f6fd17475164c6c6d23cdd9752fca"><td class="memItemLeft" align="right" valign="top">int8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sketch_8sql__in.html#ade6f6fd17475164c6c6d23cdd9752fca">__fmsketch_count_distinct</a> (bytea bitmaps)</td></tr>
+<tr class="separator:ade6f6fd17475164c6c6d23cdd9752fca"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af38dd060ed896681f4587648e3e424ed"><td class="memItemLeft" align="right" valign="top">bytea&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sketch_8sql__in.html#af38dd060ed896681f4587648e3e424ed">__fmsketch_merge</a> (bytea bitmaps1, bytea bitmaps2)</td></tr>
+<tr class="separator:af38dd060ed896681f4587648e3e424ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae27d5aaa5e4b426bcfe55e05a89c8e0b"><td class="memItemLeft" align="right" valign="top">aggregate bytea&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sketch_8sql__in.html#ae27d5aaa5e4b426bcfe55e05a89c8e0b">fmsketch_dcount</a> (anyelement column)</td></tr>
+<tr class="memdesc:ae27d5aaa5e4b426bcfe55e05a89c8e0b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Flajolet-Martin's distinct count estimation.  <a href="#ae27d5aaa5e4b426bcfe55e05a89c8e0b">More...</a><br /></td></tr>
+<tr class="separator:ae27d5aaa5e4b426bcfe55e05a89c8e0b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a75cd2be76765b34d62ed8c082281d800"><td class="memItemLeft" align="right" valign="top">bytea&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sketch_8sql__in.html#a75cd2be76765b34d62ed8c082281d800">__cmsketch_int8_trans</a> (bytea bitmaps, int8 input)</td></tr>
+<tr class="separator:a75cd2be76765b34d62ed8c082281d800"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae8e48dccef6bb071a05af06ed85cde2d"><td class="memItemLeft" align="right" valign="top">bytea&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sketch_8sql__in.html#ae8e48dccef6bb071a05af06ed85cde2d">__cmsketch_int8_trans</a> (bytea bitmaps, int8 input, int8 arg1)</td></tr>
+<tr class="separator:ae8e48dccef6bb071a05af06ed85cde2d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a23bffd8efabca2a03dacd5e95f3cdb32"><td class="memItemLeft" align="right" valign="top">bytea&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sketch_8sql__in.html#a23bffd8efabca2a03dacd5e95f3cdb32">__cmsketch_int8_trans</a> (bytea bitmaps, int8 input, int8 arg1, int8 arg2)</td></tr>
+<tr class="separator:a23bffd8efabca2a03dacd5e95f3cdb32"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac3bf881894a534b20a98d98f7370f845"><td class="memItemLeft" align="right" valign="top">bytea&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sketch_8sql__in.html#ac3bf881894a534b20a98d98f7370f845">__cmsketch_int8_trans</a> (bytea bitmaps, int8 input, int8 arg1, int8 arg2, int8 arg3)</td></tr>
+<tr class="separator:ac3bf881894a534b20a98d98f7370f845"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae2407a3372bcaf029785164794667566"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sketch_8sql__in.html#ae2407a3372bcaf029785164794667566">__cmsketch_base64_final</a> (bytea sketch)</td></tr>
+<tr class="separator:ae2407a3372bcaf029785164794667566"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4b7e9896cacb126cd82d2a12fc4a5067"><td class="memItemLeft" align="right" valign="top">bytea&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sketch_8sql__in.html#a4b7e9896cacb126cd82d2a12fc4a5067">__cmsketch_merge</a> (bytea, bytea)</td></tr>
+<tr class="separator:a4b7e9896cacb126cd82d2a12fc4a5067"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae6671bfb7474db7d8b5c9dada29f36ab"><td class="memItemLeft" align="right" valign="top">aggregate bytea&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sketch_8sql__in.html#ae6671bfb7474db7d8b5c9dada29f36ab">cmsketch</a> (int8 column)</td></tr>
+<tr class="memdesc:ae6671bfb7474db7d8b5c9dada29f36ab"><td class="mdescLeft">&#160;</td><td class="mdescRight"><code>cmsketch</code> is a UDA that can be run on columns of type int8, or any column that can be cast to an int8. It produces a base64 string representing a CountMin sketch: a large array of counters that is intended to be passed into a UDF like <code>cmsketch_width_histogram</code> described below.  <a href="#ae6671bfb7474db7d8b5c9dada29f36ab">More...</a><br /></td></tr>
+<tr class="separator:ae6671bfb7474db7d8b5c9dada29f36ab"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3498d2c778d1289154f61d34e84c609e"><td class="memItemLeft" align="right" valign="top">int8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sketch_8sql__in.html#a3498d2c778d1289154f61d34e84c609e">cmsketch_count</a> (text sketches64, int8 val)</td></tr>
+<tr class="memdesc:a3498d2c778d1289154f61d34e84c609e"><td class="mdescLeft">&#160;</td><td class="mdescRight"><code>cmsketch_count</code> is a scalar UDF to compute the approximate number of occurences of a value in a column summarized by a cmsketch. Takes the results of the <code>cmsketch</code> aggregate as its first argument, and the desired value as the second.  <a href="#a3498d2c778d1289154f61d34e84c609e">More...</a><br /></td></tr>
+<tr class="separator:a3498d2c778d1289154f61d34e84c609e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aeff9e36cfb3338c4e405d4ac77d3968c"><td class="memItemLeft" align="right" valign="top">int8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sketch_8sql__in.html#aeff9e36cfb3338c4e405d4ac77d3968c">cmsketch_rangecount</a> (text sketches64, int8 bot, int8 top)</td></tr>
+<tr class="memdesc:aeff9e36cfb3338c4e405d4ac77d3968c"><td class="mdescLeft">&#160;</td><td class="mdescRight"><code>cmsketch_rangecount</code> is a scalar UDF to approximate the number of occurrences of values in the range <code>[lo,hi]</code> inclusive, given a cmsketch of a column. Takes the results of the <code>cmsketch</code> aggregate as its first argument, and the desired range boundaries as the second and third.  <a href="#aeff9e36cfb3338c4e405d4ac77d3968c">More...</a><br /></td></tr>
+<tr class="separator:aeff9e36cfb3338c4e405d4ac77d3968c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2f2ab2fe3244515f5f73d49690e73b39"><td class="memItemLeft" align="right" valign="top">int8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sketch_8sql__in.html#a2f2ab2fe3244515f5f73d49690e73b39">cmsketch_centile</a> (text sketches64, int8 centile, int8 cnt)</td></tr>
+<tr class="memdesc:a2f2ab2fe3244515f5f73d49690e73b39"><td class="mdescLeft">&#160;</td><td class="mdescRight"><code>cmsketch_centile</code> is a scalar UDF to compute a centile value from a cmsketch. Takes the results of the <code>cmsketch</code> aggregate as its first argument, a number between 1 and 99 as the desired centile in the second, and the count of the column as the third. Produces a value from the sketched column that is approximately at the centile's position in sorted order.  <a href="#a2f2ab2fe3244515f5f73d49690e73b39">More...</a><br /></td></tr>
+<tr class="separator:a2f2ab2fe3244515f5f73d49690e73b39"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0ef6428fa7ba4b7f7b1f633e6f8003ea"><td class="memItemLeft" align="right" valign="top">int8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sketch_8sql__in.html#a0ef6428fa7ba4b7f7b1f633e6f8003ea">cmsketch_median</a> (text sketches64, int8 cnt)</td></tr>
+<tr class="memdesc:a0ef6428fa7ba4b7f7b1f633e6f8003ea"><td class="mdescLeft">&#160;</td><td class="mdescRight"><code>cmsketch_median</code> is a scalar UDF to compute a median value from a cmsketch. Takes the results of the <code>cmsketch</code> aggregate as its first argument, and the count as the second. Produces a value from the sketched column that is approximately at the halfway position in sorted order.  <a href="#a0ef6428fa7ba4b7f7b1f633e6f8003ea">More...</a><br /></td></tr>
+<tr class="separator:a0ef6428fa7ba4b7f7b1f633e6f8003ea"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8482f62849adf40a2c7df78c23ea33a4"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sketch_8sql__in.html#a8482f62849adf40a2c7df78c23ea33a4">cmsketch_width_histogram</a> (text sketches64, int8 themin, int8 themax, int4 nbuckets)</td></tr>
+<tr class="memdesc:a8482f62849adf40a2c7df78c23ea33a4"><td class="mdescLeft">&#160;</td><td class="mdescRight"><code>cmsketch_width_histogram</code> is a scalar UDF that takes three aggregates of a column &ndash; cmsketch, min and max&ndash; as well as a number of buckets, and produces an n-bucket histogram for the column where each bucket has approximately the same width. The output is a text string containing triples {lo, hi, count} representing the buckets; counts are approximate.  <a href="#a8482f62849adf40a2c7df78c23ea33a4">More...</a><br /></td></tr>
+<tr class="separator:a8482f62849adf40a2c7df78c23ea33a4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9e6d30f20b724b96249cc4a0f67a279e"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sketch_8sql__in.html#a9e6d30f20b724b96249cc4a0f67a279e">cmsketch_depth_histogram</a> (text sketches64, int4 nbuckets)</td></tr>
+<tr class="memdesc:a9e6d30f20b724b96249cc4a0f67a279e"><td class="mdescLeft">&#160;</td><td class="mdescRight"><code>cmsketch_depth_histogram</code> is a UDA that takes a cmsketch and a number of buckets n, and produces an n-bucket histogram for the column where each bucket has approximately the same count. The output is a text string containing triples {lo, hi, count} representing the buckets; counts are approximate. Note that an equi-depth histogram is equivalent to a spanning set of equi-spaced centiles.  <a href="#a9e6d30f20b724b96249cc4a0f67a279e">More...</a><br /></td></tr>
+<tr class="separator:a9e6d30f20b724b96249cc4a0f67a279e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af468ecc80e53fed205f475d4e1309995"><td class="memItemLeft" align="right" valign="top">bytea&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sketch_8sql__in.html#af468ecc80e53fed205f475d4e1309995">__mfvsketch_trans</a> (bytea, anyelement, int4)</td></tr>
+<tr class="separator:af468ecc80e53fed205f475d4e1309995"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a704f9719f5565960a12e3c9d32aac01d"><td class="memItemLeft" align="right" valign="top">text [][]&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sketch_8sql__in.html#a704f9719f5565960a12e3c9d32aac01d">__mfvsketch_final</a> (bytea)</td></tr>
+<tr class="separator:a704f9719f5565960a12e3c9d32aac01d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3ebb4ce07471e55aae91478d7a7bd15a"><td class="memItemLeft" align="right" valign="top">bytea&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sketch_8sql__in.html#a3ebb4ce07471e55aae91478d7a7bd15a">__mfvsketch_merge</a> (bytea, bytea)</td></tr>
+<tr class="separator:a3ebb4ce07471e55aae91478d7a7bd15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7da3910af51118f6f2831d00fa287bc2"><td class="memItemLeft" align="right" valign="top">integer&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sketch_8sql__in.html#a7da3910af51118f6f2831d00fa287bc2">__sketch_rightmost_one</a> (bytea, integer, integer)</td></tr>
+<tr class="separator:a7da3910af51118f6f2831d00fa287bc2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6f8100369e3d3bfc0567381da082db96"><td class="memItemLeft" align="right" valign="top">integer&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sketch_8sql__in.html#a6f8100369e3d3bfc0567381da082db96">__sketch_leftmost_zero</a> (bytea, integer, integer)</td></tr>
+<tr class="separator:a6f8100369e3d3bfc0567381da082db96"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:accad714b33677ecddc1da621d23d56ed"><td class="memItemLeft" align="right" valign="top">bytea&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sketch_8sql__in.html#accad714b33677ecddc1da621d23d56ed">__sketch_array_set_bit_in_place</a> (bytea, integer, integer, integer, integer)</td></tr>
+<tr class="separator:accad714b33677ecddc1da621d23d56ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab915f092b747e3a955cbb699afc9c70c"><td class="memItemLeft" align="right" valign="top">aggregate text [][]&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sketch_8sql__in.html#ab915f092b747e3a955cbb699afc9c70c">mfvsketch_top_histogram</a> (anyelement column, int4 number_of_buckets)</td></tr>
+<tr class="memdesc:ab915f092b747e3a955cbb699afc9c70c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Produces an n-bucket histogram for a column where each bucket counts one of the most frequent values in the column. The output is an array of doubles {value, count} in descending order of frequency; counts are approximated via CountMin sketches. Ties are handled arbitrarily.  <a href="#ab915f092b747e3a955cbb699afc9c70c">More...</a><br /></td></tr>
+<tr class="separator:ab915f092b747e3a955cbb699afc9c70c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa2d4c0af50b242731f841c2dd355fc72"><td class="memItemLeft" align="right" valign="top">aggregate bytea&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sketch_8sql__in.html#aa2d4c0af50b242731f841c2dd355fc72">mfvsketch_quick_histogram</a> (anyelement column, int4 number_of_buckets)</td></tr>
+<tr class="memdesc:aa2d4c0af50b242731f841c2dd355fc72"><td class="mdescLeft">&#160;</td><td class="mdescRight">On Postgres it works the same way as <a class="el" href="sketch_8sql__in.html#ab915f092b747e3a955cbb699afc9c70c">mfvsketch_top_histogram</a> but, in Greenplum it does parallel aggregation to provide a "quick and dirty" answer.  <a href="#aa2d4c0af50b242731f841c2dd355fc72">More...</a><br /></td></tr>
+<tr class="separator:aa2d4c0af50b242731f841c2dd355fc72"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><dl class="section date"><dt>Date</dt><dd>April 2011</dd></dl>
+<dl class="section see"><dt>See also</dt><dd>For a brief introduction to sketches, see the module description <a class="el" href="group__grp__sketches.html" title="Methods to estimate the number of unique values contained in data. ">Cardinality Estimators</a> </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="ae2407a3372bcaf029785164794667566"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae2407a3372bcaf029785164794667566">&#9670;&nbsp;</a></span>__cmsketch_base64_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text __cmsketch_base64_final </td>
+          <td>(</td>
+          <td class="paramtype">bytea&#160;</td>
+          <td class="paramname"><em>sketch</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a75cd2be76765b34d62ed8c082281d800"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a75cd2be76765b34d62ed8c082281d800">&#9670;&nbsp;</a></span>__cmsketch_int8_trans() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea __cmsketch_int8_trans </td>
+          <td>(</td>
+          <td class="paramtype">bytea&#160;</td>
+          <td class="paramname"><em>bitmaps</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int8&#160;</td>
+          <td class="paramname"><em>input</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae8e48dccef6bb071a05af06ed85cde2d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae8e48dccef6bb071a05af06ed85cde2d">&#9670;&nbsp;</a></span>__cmsketch_int8_trans() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea __cmsketch_int8_trans </td>
+          <td>(</td>
+          <td class="paramtype">bytea&#160;</td>
+          <td class="paramname"><em>bitmaps</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int8&#160;</td>
+          <td class="paramname"><em>input</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int8&#160;</td>
+          <td class="paramname"><em>arg1</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a23bffd8efabca2a03dacd5e95f3cdb32"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a23bffd8efabca2a03dacd5e95f3cdb32">&#9670;&nbsp;</a></span>__cmsketch_int8_trans() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea __cmsketch_int8_trans </td>
+          <td>(</td>
+          <td class="paramtype">bytea&#160;</td>
+          <td class="paramname"><em>bitmaps</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int8&#160;</td>
+          <td class="paramname"><em>input</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int8&#160;</td>
+          <td class="paramname"><em>arg1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int8&#160;</td>
+          <td class="paramname"><em>arg2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac3bf881894a534b20a98d98f7370f845"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac3bf881894a534b20a98d98f7370f845">&#9670;&nbsp;</a></span>__cmsketch_int8_trans() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea __cmsketch_int8_trans </td>
+          <td>(</td>
+          <td class="paramtype">bytea&#160;</td>
+          <td class="paramname"><em>bitmaps</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int8&#160;</td>
+          <td class="paramname"><em>input</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int8&#160;</td>
+          <td class="paramname"><em>arg1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int8&#160;</td>
+          <td class="paramname"><em>arg2</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int8&#160;</td>
+          <td class="paramname"><em>arg3</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a4b7e9896cacb126cd82d2a12fc4a5067"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4b7e9896cacb126cd82d2a12fc4a5067">&#9670;&nbsp;</a></span>__cmsketch_merge()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea __cmsketch_merge </td>
+          <td>(</td>
+          <td class="paramtype">bytea&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ade6f6fd17475164c6c6d23cdd9752fca"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ade6f6fd17475164c6c6d23cdd9752fca">&#9670;&nbsp;</a></span>__fmsketch_count_distinct()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int8 __fmsketch_count_distinct </td>
+          <td>(</td>
+          <td class="paramtype">bytea&#160;</td>
+          <td class="paramname"><em>bitmaps</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="af38dd060ed896681f4587648e3e424ed"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af38dd060ed896681f4587648e3e424ed">&#9670;&nbsp;</a></span>__fmsketch_merge()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea __fmsketch_merge </td>
+          <td>(</td>
+          <td class="paramtype">bytea&#160;</td>
+          <td class="paramname"><em>bitmaps1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea&#160;</td>
+          <td class="paramname"><em>bitmaps2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a585c96bea2300c0c842eb45799e1fe8b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a585c96bea2300c0c842eb45799e1fe8b">&#9670;&nbsp;</a></span>__fmsketch_trans()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea __fmsketch_trans </td>
+          <td>(</td>
+          <td class="paramtype">bytea&#160;</td>
+          <td class="paramname"><em>bitmaps</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">anyelement&#160;</td>
+          <td class="paramname"><em>input</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a704f9719f5565960a12e3c9d32aac01d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a704f9719f5565960a12e3c9d32aac01d">&#9670;&nbsp;</a></span>__mfvsketch_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text [][] __mfvsketch_final </td>
+          <td>(</td>
+          <td class="paramtype">bytea&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a3ebb4ce07471e55aae91478d7a7bd15a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3ebb4ce07471e55aae91478d7a7bd15a">&#9670;&nbsp;</a></span>__mfvsketch_merge()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea __mfvsketch_merge </td>
+          <td>(</td>
+          <td class="paramtype">bytea&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="af468ecc80e53fed205f475d4e1309995"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af468ecc80e53fed205f475d4e1309995">&#9670;&nbsp;</a></span>__mfvsketch_trans()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea __mfvsketch_trans </td>
+          <td>(</td>
+          <td class="paramtype">bytea&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">anyelement&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="accad714b33677ecddc1da621d23d56ed"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#accad714b33677ecddc1da621d23d56ed">&#9670;&nbsp;</a></span>__sketch_array_set_bit_in_place()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea __sketch_array_set_bit_in_place </td>
+          <td>(</td>
+          <td class="paramtype">bytea&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a6f8100369e3d3bfc0567381da082db96"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6f8100369e3d3bfc0567381da082db96">&#9670;&nbsp;</a></span>__sketch_leftmost_zero()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">integer __sketch_leftmost_zero </td>
+          <td>(</td>
+          <td class="paramtype">bytea&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7da3910af51118f6f2831d00fa287bc2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7da3910af51118f6f2831d00fa287bc2">&#9670;&nbsp;</a></span>__sketch_rightmost_one()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">integer __sketch_rightmost_one </td>
+          <td>(</td>
+          <td class="paramtype">bytea&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a335fba86bbb3fb5a3284808cc64b8f16"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a335fba86bbb3fb5a3284808cc64b8f16">&#9670;&nbsp;</a></span>big_or()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea big_or </td>
+          <td>(</td>
+          <td class="paramtype">bytea&#160;</td>
+          <td class="paramname"><em>bitmap1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bytea&#160;</td>
+          <td class="paramname"><em>bitmap2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae6671bfb7474db7d8b5c9dada29f36ab"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae6671bfb7474db7d8b5c9dada29f36ab">&#9670;&nbsp;</a></span>cmsketch()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate bytea cmsketch </td>
+          <td>(</td>
+          <td class="paramtype">int8&#160;</td>
+          <td class="paramname"><em>column</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a2f2ab2fe3244515f5f73d49690e73b39"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2f2ab2fe3244515f5f73d49690e73b39">&#9670;&nbsp;</a></span>cmsketch_centile()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int8 cmsketch_centile </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>sketches64</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int8&#160;</td>
+          <td class="paramname"><em>centile</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int8&#160;</td>
+          <td class="paramname"><em>cnt</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a3498d2c778d1289154f61d34e84c609e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3498d2c778d1289154f61d34e84c609e">&#9670;&nbsp;</a></span>cmsketch_count()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int8 cmsketch_count </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>sketches64</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int8&#160;</td>
+          <td class="paramname"><em>val</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a9e6d30f20b724b96249cc4a0f67a279e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9e6d30f20b724b96249cc4a0f67a279e">&#9670;&nbsp;</a></span>cmsketch_depth_histogram()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text cmsketch_depth_histogram </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>sketches64</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>nbuckets</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a0ef6428fa7ba4b7f7b1f633e6f8003ea"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0ef6428fa7ba4b7f7b1f633e6f8003ea">&#9670;&nbsp;</a></span>cmsketch_median()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int8 cmsketch_median </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>sketches64</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int8&#160;</td>
+          <td class="paramname"><em>cnt</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aeff9e36cfb3338c4e405d4ac77d3968c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aeff9e36cfb3338c4e405d4ac77d3968c">&#9670;&nbsp;</a></span>cmsketch_rangecount()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int8 cmsketch_rangecount </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>sketches64</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int8&#160;</td>
+          <td class="paramname"><em>bot</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int8&#160;</td>
+          <td class="paramname"><em>top</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8482f62849adf40a2c7df78c23ea33a4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8482f62849adf40a2c7df78c23ea33a4">&#9670;&nbsp;</a></span>cmsketch_width_histogram()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text cmsketch_width_histogram </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>sketches64</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int8&#160;</td>
+          <td class="paramname"><em>themin</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int8&#160;</td>
+          <td class="paramname"><em>themax</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>nbuckets</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae27d5aaa5e4b426bcfe55e05a89c8e0b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae27d5aaa5e4b426bcfe55e05a89c8e0b">&#9670;&nbsp;</a></span>fmsketch_dcount()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate bytea fmsketch_dcount </td>
+          <td>(</td>
+          <td class="paramtype">anyelement&#160;</td>
+          <td class="paramname"><em>column</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">column</td><td>name </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="aa2d4c0af50b242731f841c2dd355fc72"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa2d4c0af50b242731f841c2dd355fc72">&#9670;&nbsp;</a></span>mfvsketch_quick_histogram()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate bytea mfvsketch_quick_histogram </td>
+          <td>(</td>
+          <td class="paramtype">anyelement&#160;</td>
+          <td class="paramname"><em>column</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>number_of_buckets</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab915f092b747e3a955cbb699afc9c70c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab915f092b747e3a955cbb699afc9c70c">&#9670;&nbsp;</a></span>mfvsketch_top_histogram()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate text [][] mfvsketch_top_histogram </td>
+          <td>(</td>
+          <td class="paramtype">anyelement&#160;</td>
+          <td class="paramname"><em>column</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>number_of_buckets</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_704eb8350b43e1ca74c0f90ed1ba450e.html">methods</a></li><li class="navelem"><a class="el" href="dir_b0d8a62e5a4314de84ce58e7cd249850.html">sketch</a></li><li class="navelem"><a class="el" href="dir_60056874394c01e6c892c7492b3fbe27.html">src</a></li><li class="navelem"><a class="el" href="dir_c2d3987992538edb8f634d5f4e0fae80.html">pg_gp</a></li><li class="navelem"><a class="el" href="sketch_8sql__in.html">sketch.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:57 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/sparse__linear__systems_8sql__in.html b/docs/rc/sparse__linear__systems_8sql__in.html
new file mode 100644
index 0000000..a7eecb8
--- /dev/null
+++ b/docs/rc/sparse__linear__systems_8sql__in.html
@@ -0,0 +1,991 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: sparse_linear_systems.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('sparse__linear__systems_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">sparse_linear_systems.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>SQL functions for linear systems.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a5463eaef5dc5e4040acd56a1035ecc91"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sparse__linear__systems_8sql__in.html#a5463eaef5dc5e4040acd56a1035ecc91">sparse_inmem_iterative_linear_system_transition</a> (float8[] state, integer row_id, integer col_id, float8 value, float8 b, integer num_eqs, integer num_vars, integer nnz, integer algorithm, integer maxiter, float8 termtoler)</td></tr>
+<tr class="separator:a5463eaef5dc5e4040acd56a1035ecc91"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3daa8daf05cda974b4137ce07c694e2e"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sparse__linear__systems_8sql__in.html#a3daa8daf05cda974b4137ce07c694e2e">sparse_inmem_iterative_linear_system_merge_states</a> (float8[] state1, float8[] state2)</td></tr>
+<tr class="separator:a3daa8daf05cda974b4137ce07c694e2e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5ff2f1afd945580fc9cb9bedba84695b"><td class="memItemLeft" align="right" valign="top">sparse_linear_solver_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sparse__linear__systems_8sql__in.html#a5ff2f1afd945580fc9cb9bedba84695b">sparse_inmem_iterative_linear_system_final</a> (float8[] state)</td></tr>
+<tr class="separator:a5ff2f1afd945580fc9cb9bedba84695b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ace39ff8e846754e3e0709bfbbbee9a60"><td class="memItemLeft" align="right" valign="top">aggregate sparse_linear_solver_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sparse__linear__systems_8sql__in.html#ace39ff8e846754e3e0709bfbbbee9a60">sparse_inmem_iterative_linear_system</a> (integer row_id, integer col_id, float8 value, float8 right_hand_side, integer numEquations, integer numVars, integer nnz, integer algorithm, integer maxIter, float8 termToler)</td></tr>
+<tr class="memdesc:ace39ff8e846754e3e0709bfbbbee9a60"><td class="mdescLeft">&#160;</td><td class="mdescRight">Solve a system of linear equations using the inmem_iterative method.  <a href="#ace39ff8e846754e3e0709bfbbbee9a60">More...</a><br /></td></tr>
+<tr class="separator:ace39ff8e846754e3e0709bfbbbee9a60"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8175311c8e181a3ac73d9cc87814bbb0"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sparse__linear__systems_8sql__in.html#a8175311c8e181a3ac73d9cc87814bbb0">sparse_direct_linear_system_transition</a> (float8[] state, integer row_id, integer col_id, float8 value, float8 b, integer num_eqs, integer num_vars, integer nnz, integer algorithm)</td></tr>
+<tr class="separator:a8175311c8e181a3ac73d9cc87814bbb0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a81014be318749e53d8c3fd58eece9600"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sparse__linear__systems_8sql__in.html#a81014be318749e53d8c3fd58eece9600">sparse_direct_linear_system_merge_states</a> (float8[] state1, float8[] state2)</td></tr>
+<tr class="separator:a81014be318749e53d8c3fd58eece9600"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a37d42899e8ec22d8642aa2c943689d19"><td class="memItemLeft" align="right" valign="top">sparse_linear_solver_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sparse__linear__systems_8sql__in.html#a37d42899e8ec22d8642aa2c943689d19">sparse_direct_linear_system_final</a> (float8[] state)</td></tr>
+<tr class="separator:a37d42899e8ec22d8642aa2c943689d19"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8d22e4088dedd57a931b465a73a0357a"><td class="memItemLeft" align="right" valign="top">aggregate sparse_linear_solver_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sparse__linear__systems_8sql__in.html#a8d22e4088dedd57a931b465a73a0357a">sparse_direct_linear_system</a> (integer row_id, integer col_id, float8 value, float8 right_hand_side, integer numEquations, integer numVars, integer nnz, integer algorithm)</td></tr>
+<tr class="memdesc:a8d22e4088dedd57a931b465a73a0357a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Solve a system of linear equations using the direct method.  <a href="#a8d22e4088dedd57a931b465a73a0357a">More...</a><br /></td></tr>
+<tr class="separator:a8d22e4088dedd57a931b465a73a0357a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3b3b7eea8b91c0a16ede3e7a9c6b17ef"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sparse__linear__systems_8sql__in.html#a3b3b7eea8b91c0a16ede3e7a9c6b17ef">linear_solver_sparse</a> (varchar input_string)</td></tr>
+<tr class="memdesc:a3b3b7eea8b91c0a16ede3e7a9c6b17ef"><td class="mdescLeft">&#160;</td><td class="mdescRight">Help function, to print out the supported families.  <a href="#a3b3b7eea8b91c0a16ede3e7a9c6b17ef">More...</a><br /></td></tr>
+<tr class="separator:a3b3b7eea8b91c0a16ede3e7a9c6b17ef"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afe32393baf3e20ce6906c9307aab6bea"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sparse__linear__systems_8sql__in.html#afe32393baf3e20ce6906c9307aab6bea">linear_solver_sparse</a> ()</td></tr>
+<tr class="separator:afe32393baf3e20ce6906c9307aab6bea"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a03a7296e0a44c42584d2faea62e4fdc1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sparse__linear__systems_8sql__in.html#a03a7296e0a44c42584d2faea62e4fdc1">linear_solver_sparse</a> (varchar lhs_table, varchar rhs_table, varchar out_table, varchar lhs_row_id, varchar lhs_col_id, varchar lhs_value, varchar rhs_row_id, varchar rhs_value, integer num_vars, varchar grouping_cols, varchar optimizer, varchar optimizer_options)</td></tr>
+<tr class="memdesc:a03a7296e0a44c42584d2faea62e4fdc1"><td class="mdescLeft">&#160;</td><td class="mdescRight">A wrapper function for the various marginal linear_systemsion analyzes.  <a href="#a03a7296e0a44c42584d2faea62e4fdc1">More...</a><br /></td></tr>
+<tr class="separator:a03a7296e0a44c42584d2faea62e4fdc1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3f6259c7cf82dc93b31694e1a12231e8"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sparse__linear__systems_8sql__in.html#a3f6259c7cf82dc93b31694e1a12231e8">linear_solver_sparse</a> (varchar lhs_table, varchar rhs_table, varchar out_table, varchar lhs_row_id, varchar lhs_col_id, varchar lhs_value, varchar rhs_row_id, varchar rhs_value, integer num_vars)</td></tr>
+<tr class="memdesc:a3f6259c7cf82dc93b31694e1a12231e8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Marginal effects with default variables.  <a href="#a3f6259c7cf82dc93b31694e1a12231e8">More...</a><br /></td></tr>
+<tr class="separator:a3f6259c7cf82dc93b31694e1a12231e8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a01d5270cb0badbbd7a581588bfeff98f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sparse__linear__systems_8sql__in.html#a01d5270cb0badbbd7a581588bfeff98f">linear_solver_sparse</a> (varchar lhs_table, varchar rhs_table, varchar out_table, varchar lhs_row_id, varchar lhs_col_id, varchar lhs_value, varchar rhs_row_id, varchar rhs_value, integer num_vars, varchar grouping_cols)</td></tr>
+<tr class="memdesc:a01d5270cb0badbbd7a581588bfeff98f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Marginal effects with default variables.  <a href="#a01d5270cb0badbbd7a581588bfeff98f">More...</a><br /></td></tr>
+<tr class="separator:a01d5270cb0badbbd7a581588bfeff98f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acc9e20ee876b43f82e5f98dc2b4c88ea"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sparse__linear__systems_8sql__in.html#acc9e20ee876b43f82e5f98dc2b4c88ea">linear_solver_sparse</a> (varchar lhs_table, varchar rhs_table, varchar out_table, varchar lhs_row_id, varchar lhs_col_id, varchar lhs_value, varchar rhs_row_id, varchar rhs_value, integer num_vars, varchar grouping_cols, varchar optimizer)</td></tr>
+<tr class="memdesc:acc9e20ee876b43f82e5f98dc2b4c88ea"><td class="mdescLeft">&#160;</td><td class="mdescRight">Marginal effects with default variables.  <a href="#acc9e20ee876b43f82e5f98dc2b4c88ea">More...</a><br /></td></tr>
+<tr class="separator:acc9e20ee876b43f82e5f98dc2b4c88ea"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><dl class="section date"><dt>Date</dt><dd>January 2011</dd></dl>
+<dl class="section see"><dt>See also</dt><dd>Computes the solution of a consistent linear system </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="a3b3b7eea8b91c0a16ede3e7a9c6b17ef"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3b3b7eea8b91c0a16ede3e7a9c6b17ef">&#9670;&nbsp;</a></span>linear_solver_sparse() <span class="overload">[1/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar linear_solver_sparse </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>input_string</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="afe32393baf3e20ce6906c9307aab6bea"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afe32393baf3e20ce6906c9307aab6bea">&#9670;&nbsp;</a></span>linear_solver_sparse() <span class="overload">[2/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar linear_solver_sparse </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a03a7296e0a44c42584d2faea62e4fdc1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a03a7296e0a44c42584d2faea62e4fdc1">&#9670;&nbsp;</a></span>linear_solver_sparse() <span class="overload">[3/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void linear_solver_sparse </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>lhs_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>rhs_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>lhs_row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>lhs_col_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>lhs_value</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>rhs_row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>rhs_value</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_vars</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>optimizer</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>optimizer_options</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">lhs_table</td><td>String identifying the input A matrix </td></tr>
+    <tr><td class="paramname">rhs_table</td><td>String identifying the input b vector </td></tr>
+    <tr><td class="paramname">out_table</td><td>String identifying the output table to be created </td></tr>
+    <tr><td class="paramname">lhs_row_id</td><td>Column name containing the LHS of the equations </td></tr>
+    <tr><td class="paramname">lhs_col_id</td><td>Column name containing the LHS of the equations </td></tr>
+    <tr><td class="paramname">lhs_value</td><td>Column name containing the LHS of the equations </td></tr>
+    <tr><td class="paramname">rhs_row_id</td><td>Column name containing the RHS of the equations </td></tr>
+    <tr><td class="paramname">rhs_value</td><td>Column name containing the RHS of the equations </td></tr>
+    <tr><td class="paramname">num_vars</td><td>Number of variables in the system </td></tr>
+    <tr><td class="paramname">grouping_cols</td><td>Columns to group the linear systems by </td></tr>
+    <tr><td class="paramname">optimizer</td><td>Optimizer to be used </td></tr>
+    <tr><td class="paramname">optimizer_options</td><td>Optimizer options used</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>void</dd></dl>
+<dl class="section user"><dt>Usage</dt><dd>For function summary information. Run sql&gt; select linear_solver_sparse('help'); OR sql&gt; select <a class="el" href="sparse__linear__systems_8sql__in.html#a3b3b7eea8b91c0a16ede3e7a9c6b17ef" title="Help function, to print out the supported families. ">linear_solver_sparse()</a>; OR sql&gt; select linear_solver_sparse('?'); For function usage information. Run sql&gt; select linear_solver_sparse('usage'); </dd></dl>
+
+</div>
+</div>
+<a id="a3f6259c7cf82dc93b31694e1a12231e8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3f6259c7cf82dc93b31694e1a12231e8">&#9670;&nbsp;</a></span>linear_solver_sparse() <span class="overload">[4/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void linear_solver_sparse </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>lhs_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>rhs_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>lhs_row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>lhs_col_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>lhs_value</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>rhs_row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>rhs_value</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_vars</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a01d5270cb0badbbd7a581588bfeff98f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a01d5270cb0badbbd7a581588bfeff98f">&#9670;&nbsp;</a></span>linear_solver_sparse() <span class="overload">[5/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void linear_solver_sparse </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>lhs_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>rhs_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>lhs_row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>lhs_col_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>lhs_value</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>rhs_row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>rhs_value</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_vars</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="acc9e20ee876b43f82e5f98dc2b4c88ea"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acc9e20ee876b43f82e5f98dc2b4c88ea">&#9670;&nbsp;</a></span>linear_solver_sparse() <span class="overload">[6/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void linear_solver_sparse </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>lhs_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>rhs_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>lhs_row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>lhs_col_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>lhs_value</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>rhs_row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>rhs_value</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_vars</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>optimizer</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8d22e4088dedd57a931b465a73a0357a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8d22e4088dedd57a931b465a73a0357a">&#9670;&nbsp;</a></span>sparse_direct_linear_system()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate sparse_linear_solver_result sparse_direct_linear_system </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>col_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>value</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>right_hand_side</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>numEquations</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>numVars</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>nnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>algorithm</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">row_id</td><td>Column containing the row_id </td></tr>
+    <tr><td class="paramname">col_id</td><td>Column containing the col_id </td></tr>
+    <tr><td class="paramname">value</td><td>Value of the LHS matrix </td></tr>
+    <tr><td class="paramname">right_hand_side</td><td>Column containing the right hand side of the system </td></tr>
+    <tr><td class="paramname">numEquations</td><td>Number of equations </td></tr>
+    <tr><td class="paramname">numVars</td><td>Number of variables </td></tr>
+    <tr><td class="paramname">nnz</td><td>Number of non-zero values </td></tr>
+    <tr><td class="paramname">algorithm</td><td>Algorithm used for the sparse linear solver</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>A composite value:<ul>
+<li><code>solution FLOAT8[] </code> - Array of marginal effects</li>
+<li><code>residual_norm FLOAT8</code> - Norm of the residual</li>
+<li><code>iters INTEGER</code> - Iterations taken</li>
+</ul>
+</dd></dl>
+<dl class="section user"><dt>Usage</dt><dd><ul>
+<li>Get all the diagnostic statistics:<br />
+ <pre class="fragment">SELECT linear_system_sparse(&lt;em&gt;row_id&lt;/em&gt;,
+*                                    &lt;em&gt;left_hand_side&lt;/em&gt;,
+*                                    &lt;em&gt; right_hand_side &lt;/em&gt;,
+*                                    &lt;em&gt; numEquations &lt;/em&gt;)
+*   FROM &lt;em&gt;dataTable&lt;/em&gt;;
+* </pre> </li>
+</ul>
+</dd></dl>
+
+</div>
+</div>
+<a id="a37d42899e8ec22d8642aa2c943689d19"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a37d42899e8ec22d8642aa2c943689d19">&#9670;&nbsp;</a></span>sparse_direct_linear_system_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">sparse_linear_solver_result sparse_direct_linear_system_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a81014be318749e53d8c3fd58eece9600"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a81014be318749e53d8c3fd58eece9600">&#9670;&nbsp;</a></span>sparse_direct_linear_system_merge_states()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] sparse_direct_linear_system_merge_states </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8175311c8e181a3ac73d9cc87814bbb0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8175311c8e181a3ac73d9cc87814bbb0">&#9670;&nbsp;</a></span>sparse_direct_linear_system_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] sparse_direct_linear_system_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>col_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>value</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>b</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_eqs</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_vars</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>nnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>algorithm</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ace39ff8e846754e3e0709bfbbbee9a60"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ace39ff8e846754e3e0709bfbbbee9a60">&#9670;&nbsp;</a></span>sparse_inmem_iterative_linear_system()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate sparse_linear_solver_result sparse_inmem_iterative_linear_system </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>col_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>value</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>right_hand_side</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>numEquations</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>numVars</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>nnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>algorithm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>maxIter</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>termToler</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">row_id</td><td>Column containing the row_id </td></tr>
+    <tr><td class="paramname">col_id</td><td>Column containing the col_id </td></tr>
+    <tr><td class="paramname">value</td><td>Value of the LHS matrix </td></tr>
+    <tr><td class="paramname">right_hand_side</td><td>Column containing the right hand side of the system </td></tr>
+    <tr><td class="paramname">numEquations</td><td>Number of equations </td></tr>
+    <tr><td class="paramname">numVars</td><td>Number of variables </td></tr>
+    <tr><td class="paramname">nnz</td><td>Number of non-zero values </td></tr>
+    <tr><td class="paramname">algorithm</td><td>Algorithm used for the sparse linear solver </td></tr>
+    <tr><td class="paramname">maxIter</td><td>Maximum number of iterations </td></tr>
+    <tr><td class="paramname">termToler</td><td>Termination tolerance</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>A composite value:<ul>
+<li><code>solution FLOAT8[] </code> - Array of marginal effects</li>
+<li><code>residual_norm FLOAT8</code> - Norm of the residual</li>
+<li><code>iters INTEGER</code> - Iterations taken</li>
+</ul>
+</dd></dl>
+<dl class="section user"><dt>Usage</dt><dd><ul>
+<li>Get all the diagnostic statistics:<br />
+ <pre class="fragment">SELECT linear_system_sparse(&lt;em&gt;row_id&lt;/em&gt;,
+*                                    &lt;em&gt;left_hand_side&lt;/em&gt;,
+*                                    &lt;em&gt; right_hand_side &lt;/em&gt;,
+*                                    &lt;em&gt; numEquations &lt;/em&gt;)
+*   FROM &lt;em&gt;dataTable&lt;/em&gt;;
+* </pre> </li>
+</ul>
+</dd></dl>
+
+</div>
+</div>
+<a id="a5ff2f1afd945580fc9cb9bedba84695b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5ff2f1afd945580fc9cb9bedba84695b">&#9670;&nbsp;</a></span>sparse_inmem_iterative_linear_system_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">sparse_linear_solver_result sparse_inmem_iterative_linear_system_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a3daa8daf05cda974b4137ce07c694e2e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3daa8daf05cda974b4137ce07c694e2e">&#9670;&nbsp;</a></span>sparse_inmem_iterative_linear_system_merge_states()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] sparse_inmem_iterative_linear_system_merge_states </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5463eaef5dc5e4040acd56a1035ecc91"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5463eaef5dc5e4040acd56a1035ecc91">&#9670;&nbsp;</a></span>sparse_inmem_iterative_linear_system_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] sparse_inmem_iterative_linear_system_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>col_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>value</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>b</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_eqs</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>num_vars</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>nnz</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>algorithm</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>maxiter</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>termtoler</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_7513a8b3b7336e99c30a333cfb144104.html">linear_systems</a></li><li class="navelem"><a class="el" href="sparse__linear__systems_8sql__in.html">sparse_linear_systems.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:57 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/splitbar.png b/docs/rc/splitbar.png
new file mode 100644
index 0000000..fe895f2
--- /dev/null
+++ b/docs/rc/splitbar.png
Binary files differ
diff --git a/docs/rc/sssp_8sql__in.html b/docs/rc/sssp_8sql__in.html
new file mode 100644
index 0000000..e5904dd
--- /dev/null
+++ b/docs/rc/sssp_8sql__in.html
@@ -0,0 +1,334 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: sssp.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('sssp_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">sssp.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>SQL functions for graph analytics.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a3d544f93104e341b03f5c70c89211bcb"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sssp_8sql__in.html#a3d544f93104e341b03f5c70c89211bcb">graph_sssp</a> (text vertex_table, text vertex_id, text edge_table, text edge_args, bigint source_vertex, text out_table, text grouping_cols)</td></tr>
+<tr class="separator:a3d544f93104e341b03f5c70c89211bcb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6dc0542cf7ddf9664144f4b0614fa270"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sssp_8sql__in.html#a6dc0542cf7ddf9664144f4b0614fa270">graph_sssp</a> (text vertex_table, text vertex_id, text edge_table, text edge_args, bigint source_vertex, text out_table)</td></tr>
+<tr class="separator:a6dc0542cf7ddf9664144f4b0614fa270"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3c959487e058244e1cc799653510d154"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sssp_8sql__in.html#a3c959487e058244e1cc799653510d154">graph_sssp_get_path</a> (text sssp_table, bigint dest_vertex, text path_table)</td></tr>
+<tr class="separator:a3c959487e058244e1cc799653510d154"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab66bf023a28ef36282034c3c4486efb7"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sssp_8sql__in.html#ab66bf023a28ef36282034c3c4486efb7">graph_sssp</a> (varchar message)</td></tr>
+<tr class="separator:ab66bf023a28ef36282034c3c4486efb7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8f7317dc5d811e45be43452cbc347d49"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sssp_8sql__in.html#a8f7317dc5d811e45be43452cbc347d49">graph_sssp</a> ()</td></tr>
+<tr class="separator:a8f7317dc5d811e45be43452cbc347d49"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>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</p>
+<p><a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a></p>
+<p>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.</p>
+<dl class="section date"><dt>Date</dt><dd>Nov 2016</dd></dl>
+<dl class="section see"><dt>See also</dt><dd>Provides single source shortest <a class="el" href="path_8sql__in.html#af5842a2917fdea02cca12c8104bff022">path</a> algorithm. </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="a3d544f93104e341b03f5c70c89211bcb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3d544f93104e341b03f5c70c89211bcb">&#9670;&nbsp;</a></span>graph_sssp() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void graph_sssp </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>vertex_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>vertex_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>edge_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>edge_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bigint&#160;</td>
+          <td class="paramname"><em>source_vertex</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a6dc0542cf7ddf9664144f4b0614fa270"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6dc0542cf7ddf9664144f4b0614fa270">&#9670;&nbsp;</a></span>graph_sssp() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void graph_sssp </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>vertex_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>vertex_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>edge_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>edge_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bigint&#160;</td>
+          <td class="paramname"><em>source_vertex</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab66bf023a28ef36282034c3c4486efb7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab66bf023a28ef36282034c3c4486efb7">&#9670;&nbsp;</a></span>graph_sssp() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar graph_sssp </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8f7317dc5d811e45be43452cbc347d49"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8f7317dc5d811e45be43452cbc347d49">&#9670;&nbsp;</a></span>graph_sssp() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar graph_sssp </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a3c959487e058244e1cc799653510d154"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3c959487e058244e1cc799653510d154">&#9670;&nbsp;</a></span>graph_sssp_get_path()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void graph_sssp_get_path </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>sssp_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bigint&#160;</td>
+          <td class="paramname"><em>dest_vertex</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>path_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_1c3de670490e30b2adf792227ef51e32.html">graph</a></li><li class="navelem"><a class="el" href="sssp_8sql__in.html">sssp.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:57 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/stratified__sample_8sql__in.html b/docs/rc/stratified__sample_8sql__in.html
new file mode 100644
index 0000000..2944e79
--- /dev/null
+++ b/docs/rc/stratified__sample_8sql__in.html
@@ -0,0 +1,364 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: stratified_sample.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('stratified__sample_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">stratified_sample.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>SQL functions for stratified sampling.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a44753db6b486f7e020740ead271a2420"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="stratified__sample_8sql__in.html#a44753db6b486f7e020740ead271a2420">stratified_sample</a> (text source_table, text output_table, float8 proportion, text grouping_cols, text target_cols, boolean with_replacement)</td></tr>
+<tr class="separator:a44753db6b486f7e020740ead271a2420"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9107baf0d8ea245273e06ae5c41d16aa"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="stratified__sample_8sql__in.html#a9107baf0d8ea245273e06ae5c41d16aa">stratified_sample</a> (text source_table, text output_table, float8 proportion, text grouping_cols, text target_cols)</td></tr>
+<tr class="separator:a9107baf0d8ea245273e06ae5c41d16aa"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5a09f753977051e3eb337f39680c3730"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="stratified__sample_8sql__in.html#a5a09f753977051e3eb337f39680c3730">stratified_sample</a> (text source_table, text output_table, float8 proportion, text grouping_cols)</td></tr>
+<tr class="separator:a5a09f753977051e3eb337f39680c3730"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aadb9952a02cb0977b2fcead3445adde2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="stratified__sample_8sql__in.html#aadb9952a02cb0977b2fcead3445adde2">stratified_sample</a> (text source_table, text output_table, float8 proportion)</td></tr>
+<tr class="separator:aadb9952a02cb0977b2fcead3445adde2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a489042579fb1e9b138a309584b57ca36"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="stratified__sample_8sql__in.html#a489042579fb1e9b138a309584b57ca36">stratified_sample</a> (varchar message)</td></tr>
+<tr class="separator:a489042579fb1e9b138a309584b57ca36"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa89c8ef2dbb59b4c84657b75572bf7ff"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="stratified__sample_8sql__in.html#aa89c8ef2dbb59b4c84657b75572bf7ff">stratified_sample</a> ()</td></tr>
+<tr class="separator:aa89c8ef2dbb59b4c84657b75572bf7ff"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>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</p>
+<p><a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a></p>
+<p>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.</p>
+<dl class="section date"><dt>Date</dt><dd>07/19/2017</dd></dl>
+<dl class="section see"><dt>See also</dt><dd>Given a table, stratified sampling returns a proportion of records for each group (strata). </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="a44753db6b486f7e020740ead271a2420"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a44753db6b486f7e020740ead271a2420">&#9670;&nbsp;</a></span>stratified_sample() <span class="overload">[1/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void stratified_sample </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>proportion</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>target_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>with_replacement</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a9107baf0d8ea245273e06ae5c41d16aa"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9107baf0d8ea245273e06ae5c41d16aa">&#9670;&nbsp;</a></span>stratified_sample() <span class="overload">[2/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void stratified_sample </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>proportion</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>target_cols</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5a09f753977051e3eb337f39680c3730"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5a09f753977051e3eb337f39680c3730">&#9670;&nbsp;</a></span>stratified_sample() <span class="overload">[3/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void stratified_sample </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>proportion</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aadb9952a02cb0977b2fcead3445adde2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aadb9952a02cb0977b2fcead3445adde2">&#9670;&nbsp;</a></span>stratified_sample() <span class="overload">[4/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void stratified_sample </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>proportion</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a489042579fb1e9b138a309584b57ca36"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a489042579fb1e9b138a309584b57ca36">&#9670;&nbsp;</a></span>stratified_sample() <span class="overload">[5/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar stratified_sample </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa89c8ef2dbb59b4c84657b75572bf7ff"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa89c8ef2dbb59b4c84657b75572bf7ff">&#9670;&nbsp;</a></span>stratified_sample() <span class="overload">[6/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar stratified_sample </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_e6c126a997181663ba81c11cbf416bb1.html">sample</a></li><li class="navelem"><a class="el" href="stratified__sample_8sql__in.html">stratified_sample.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:57 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/summary_8sql__in.html b/docs/rc/summary_8sql__in.html
new file mode 100644
index 0000000..60305d6
--- /dev/null
+++ b/docs/rc/summary_8sql__in.html
@@ -0,0 +1,666 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: summary.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('summary_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">summary.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Summary function for descriptive statistics.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a4be51e88a1df45191a1692b95429af36"><td class="memItemLeft" align="right" valign="top">summary_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="summary_8sql__in.html#a4be51e88a1df45191a1692b95429af36">summary</a> (text source_table, text output_table, text target_cols, text grouping_cols, boolean get_distinct, boolean get_quartiles, float8[] ntile_array, integer how_many_mfv, boolean get_estimates, integer n_cols_per_run)</td></tr>
+<tr class="separator:a4be51e88a1df45191a1692b95429af36"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a14ff66aaa0248c5e2741dfaf2e360881"><td class="memItemLeft" align="right" valign="top">summary_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="summary_8sql__in.html#a14ff66aaa0248c5e2741dfaf2e360881">summary</a> (text source_table, text output_table, text target_cols, text grouping_cols, boolean get_distinct, boolean get_quartiles, float8[] ntile_array, integer how_many_mfv, boolean get_estimates)</td></tr>
+<tr class="separator:a14ff66aaa0248c5e2741dfaf2e360881"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab14b423b19a17fe7bbc6d522dda13402"><td class="memItemLeft" align="right" valign="top">summary_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="summary_8sql__in.html#ab14b423b19a17fe7bbc6d522dda13402">summary</a> (text source_table, text output_table, text target_cols, text grouping_cols, boolean get_distinct, boolean get_quartiles, float8[] ntile_array, integer how_many_mfv)</td></tr>
+<tr class="separator:ab14b423b19a17fe7bbc6d522dda13402"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae39edc1569d25b212ca5ebc06703c6d6"><td class="memItemLeft" align="right" valign="top">summary_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="summary_8sql__in.html#ae39edc1569d25b212ca5ebc06703c6d6">summary</a> (text source_table, text output_table, text target_cols, text grouping_cols, boolean get_distinct, boolean get_quartiles, float8[] ntile_array)</td></tr>
+<tr class="separator:ae39edc1569d25b212ca5ebc06703c6d6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a44d256be00bd0f79f8bea359fa32de32"><td class="memItemLeft" align="right" valign="top">summary_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="summary_8sql__in.html#a44d256be00bd0f79f8bea359fa32de32">summary</a> (text source_table, text output_table, text target_cols, text grouping_cols, boolean get_distinct, boolean get_quartiles)</td></tr>
+<tr class="separator:a44d256be00bd0f79f8bea359fa32de32"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7cfc420930c03f5b50421aee757d02bb"><td class="memItemLeft" align="right" valign="top">summary_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="summary_8sql__in.html#a7cfc420930c03f5b50421aee757d02bb">summary</a> (text source_table, text output_table, text target_cols, text grouping_cols, boolean get_distinct)</td></tr>
+<tr class="separator:a7cfc420930c03f5b50421aee757d02bb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad562be9b174fa1c5e0384005f5478009"><td class="memItemLeft" align="right" valign="top">summary_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="summary_8sql__in.html#ad562be9b174fa1c5e0384005f5478009">summary</a> (text source_table, text output_table, text target_cols, text grouping_cols)</td></tr>
+<tr class="separator:ad562be9b174fa1c5e0384005f5478009"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a02b92e4f8962278c063738ecae488d53"><td class="memItemLeft" align="right" valign="top">summary_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="summary_8sql__in.html#a02b92e4f8962278c063738ecae488d53">summary</a> (text source_table, text output_table, text target_cols)</td></tr>
+<tr class="separator:a02b92e4f8962278c063738ecae488d53"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab56b9ffdee9c36566e0079ca5f2b19fd"><td class="memItemLeft" align="right" valign="top">summary_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="summary_8sql__in.html#ab56b9ffdee9c36566e0079ca5f2b19fd">summary</a> (text source_table, text output_table)</td></tr>
+<tr class="separator:ab56b9ffdee9c36566e0079ca5f2b19fd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aad245ee0091df4c4955dbbaff5c9bd3f"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="summary_8sql__in.html#aad245ee0091df4c4955dbbaff5c9bd3f">summary</a> (text input_message)</td></tr>
+<tr class="separator:aad245ee0091df4c4955dbbaff5c9bd3f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aeed4f7ad586b0ea344bd623d8d48e2bb"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="summary_8sql__in.html#aeed4f7ad586b0ea344bd623d8d48e2bb">summary</a> ()</td></tr>
+<tr class="separator:aeed4f7ad586b0ea344bd623d8d48e2bb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><dl class="section date"><dt>Date</dt><dd>Mar 2013 </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="a4be51e88a1df45191a1692b95429af36"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4be51e88a1df45191a1692b95429af36">&#9670;&nbsp;</a></span>summary() <span class="overload">[1/11]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">summary_result summary </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>target_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>get_distinct</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>get_quartiles</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>ntile_array</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>how_many_mfv</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>get_estimates</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>n_cols_per_run</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a14ff66aaa0248c5e2741dfaf2e360881"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a14ff66aaa0248c5e2741dfaf2e360881">&#9670;&nbsp;</a></span>summary() <span class="overload">[2/11]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">summary_result summary </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>target_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>get_distinct</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>get_quartiles</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>ntile_array</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>how_many_mfv</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>get_estimates</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab14b423b19a17fe7bbc6d522dda13402"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab14b423b19a17fe7bbc6d522dda13402">&#9670;&nbsp;</a></span>summary() <span class="overload">[3/11]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">summary_result summary </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>target_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>get_distinct</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>get_quartiles</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>ntile_array</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>how_many_mfv</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae39edc1569d25b212ca5ebc06703c6d6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae39edc1569d25b212ca5ebc06703c6d6">&#9670;&nbsp;</a></span>summary() <span class="overload">[4/11]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">summary_result summary </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>target_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>get_distinct</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>get_quartiles</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>ntile_array</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a44d256be00bd0f79f8bea359fa32de32"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a44d256be00bd0f79f8bea359fa32de32">&#9670;&nbsp;</a></span>summary() <span class="overload">[5/11]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">summary_result summary </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>target_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>get_distinct</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>get_quartiles</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7cfc420930c03f5b50421aee757d02bb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7cfc420930c03f5b50421aee757d02bb">&#9670;&nbsp;</a></span>summary() <span class="overload">[6/11]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">summary_result summary </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>target_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>get_distinct</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ad562be9b174fa1c5e0384005f5478009"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad562be9b174fa1c5e0384005f5478009">&#9670;&nbsp;</a></span>summary() <span class="overload">[7/11]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">summary_result summary </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>target_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a02b92e4f8962278c063738ecae488d53"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a02b92e4f8962278c063738ecae488d53">&#9670;&nbsp;</a></span>summary() <span class="overload">[8/11]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">summary_result summary </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>target_cols</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab56b9ffdee9c36566e0079ca5f2b19fd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab56b9ffdee9c36566e0079ca5f2b19fd">&#9670;&nbsp;</a></span>summary() <span class="overload">[9/11]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">summary_result summary </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aad245ee0091df4c4955dbbaff5c9bd3f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aad245ee0091df4c4955dbbaff5c9bd3f">&#9670;&nbsp;</a></span>summary() <span class="overload">[10/11]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text summary </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>input_message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aeed4f7ad586b0ea344bd623d8d48e2bb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aeed4f7ad586b0ea344bd623d8d48e2bb">&#9670;&nbsp;</a></span>summary() <span class="overload">[11/11]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text summary </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_5ff04c1d4b766f0a4dd68c6f19ed2092.html">summary</a></li><li class="navelem"><a class="el" href="summary_8sql__in.html">summary.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:57 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/svd_8sql__in.html b/docs/rc/svd_8sql__in.html
new file mode 100644
index 0000000..698edfb
--- /dev/null
+++ b/docs/rc/svd_8sql__in.html
@@ -0,0 +1,1685 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: svd.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('svd_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">svd.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Singular Value Decomposition.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a8dbab74f5bde863a63431a6ec6f66a61"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svd_8sql__in.html#a8dbab74f5bde863a63431a6ec6f66a61">svd</a> (text source_table, text output_table_prefix, text row_id, integer k, integer n_iterations, text result_summary_table)</td></tr>
+<tr class="separator:a8dbab74f5bde863a63431a6ec6f66a61"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a96fb5620eed9c936b5bbfe24d7e37ad6"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svd_8sql__in.html#a96fb5620eed9c936b5bbfe24d7e37ad6">svd_block</a> (text source_table, text output_table_prefix, integer k, integer n_iterations, text result_summary_table)</td></tr>
+<tr class="separator:a96fb5620eed9c936b5bbfe24d7e37ad6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2927cf2c1a1addd00f838718e8b1fea1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svd_8sql__in.html#a2927cf2c1a1addd00f838718e8b1fea1">svd_block</a> (text source_table, text output_table_prefix, integer k, integer n_iterations)</td></tr>
+<tr class="separator:a2927cf2c1a1addd00f838718e8b1fea1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2ed4bfd5bba7b959deaccb3471e624ed"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svd_8sql__in.html#a2ed4bfd5bba7b959deaccb3471e624ed">svd_block</a> (text source_table, text output_table_prefix, integer k)</td></tr>
+<tr class="separator:a2ed4bfd5bba7b959deaccb3471e624ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a511f83e3eba19f6f41f8e3f7122ddb3a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svd_8sql__in.html#a511f83e3eba19f6f41f8e3f7122ddb3a">svd_sparse</a> (text source_table, text output_table_prefix, text row_id, text col_id, text val_id, integer row_dim, integer col_dim, integer k, integer n_iterations, text result_summary_table)</td></tr>
+<tr class="separator:a511f83e3eba19f6f41f8e3f7122ddb3a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0225b28fd4b71cf6e7072c034f3296c6"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svd_8sql__in.html#a0225b28fd4b71cf6e7072c034f3296c6">svd_sparse_native</a> (text source_table, text output_table_prefix, text row_id, text col_id, text val_id, integer row_dim, integer col_dim, integer k, integer n_iterations, text result_summary_table)</td></tr>
+<tr class="separator:a0225b28fd4b71cf6e7072c034f3296c6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3222ad5181b1b7dde8e89ae00c663177"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svd_8sql__in.html#a3222ad5181b1b7dde8e89ae00c663177">svd</a> (text source_table, text output_table_prefix, text row_id, integer k)</td></tr>
+<tr class="separator:a3222ad5181b1b7dde8e89ae00c663177"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaad7f45ad283fcffa5b5d9938432a038"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svd_8sql__in.html#aaad7f45ad283fcffa5b5d9938432a038">svd_sparse</a> (text source_table, text output_table_prefix, text row_id, text col_id, text val_id, integer row_dim, integer col_dim, integer k)</td></tr>
+<tr class="separator:aaad7f45ad283fcffa5b5d9938432a038"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9deeee6cc15d9f9713f0c93665923622"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svd_8sql__in.html#a9deeee6cc15d9f9713f0c93665923622">svd</a> (text source_table, text output_table_prefix, text row_id, integer k, integer n_iterations)</td></tr>
+<tr class="separator:a9deeee6cc15d9f9713f0c93665923622"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a20f535608417d4ff73b6e029b785ddef"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svd_8sql__in.html#a20f535608417d4ff73b6e029b785ddef">svd_sparse</a> (text source_table, text output_table_prefix, text row_id, text col_id, text val_id, integer row_dim, integer col_dim, integer k, integer n_iterations)</td></tr>
+<tr class="separator:a20f535608417d4ff73b6e029b785ddef"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8e0f90441d3a2335aef8cc1403577bb9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svd_8sql__in.html#a8e0f90441d3a2335aef8cc1403577bb9">svd_sparse_native</a> (text source_table, text output_table_prefix, text row_id, text col_id, text val_id, integer row_dim, integer col_dim, integer k)</td></tr>
+<tr class="separator:a8e0f90441d3a2335aef8cc1403577bb9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad3a3a3d97f9d7bc96578be4aa6b54d1c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svd_8sql__in.html#ad3a3a3d97f9d7bc96578be4aa6b54d1c">svd_sparse_native</a> (text source_table, text output_table_prefix, text row_id, text col_id, text val_id, integer row_dim, integer col_dim, integer k, integer n_iterations)</td></tr>
+<tr class="separator:ad3a3a3d97f9d7bc96578be4aa6b54d1c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7638f4ea701362e5c318b5272c0e98b9"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svd_8sql__in.html#a7638f4ea701362e5c318b5272c0e98b9">__svd_unit_vector</a> (int dim)</td></tr>
+<tr class="separator:a7638f4ea701362e5c318b5272c0e98b9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a63ae741e70fbfba1082241c75d6cdd51"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svd_8sql__in.html#a63ae741e70fbfba1082241c75d6cdd51">__svd_lanczos_sfunc</a> (float8[] state, int row_id, float8[] row_array, float8[] vector, int dimension)</td></tr>
+<tr class="separator:a63ae741e70fbfba1082241c75d6cdd51"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6bc4dbb608e1042746c10b9fa180ec13"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svd_8sql__in.html#a6bc4dbb608e1042746c10b9fa180ec13">__svd_block_lanczos_sfunc</a> (float8[] state, int4 row_id, int4 col_id, float8[] block, float8[] vector, int4 dimension)</td></tr>
+<tr class="separator:a6bc4dbb608e1042746c10b9fa180ec13"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6f1c90152f497ef91526cc9200bad00a"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svd_8sql__in.html#a6f1c90152f497ef91526cc9200bad00a">__svd_sparse_lanczos_sfunc</a> (float8[] state, int4 row_id, int4 col_id, float8 val, float8[] vector, int4 dimension)</td></tr>
+<tr class="separator:a6f1c90152f497ef91526cc9200bad00a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae7b94da849ee17b7743fc18588c629f5"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svd_8sql__in.html#ae7b94da849ee17b7743fc18588c629f5">__svd_lanczos_prefunc</a> (float8[] state1, float8[] state2)</td></tr>
+<tr class="separator:ae7b94da849ee17b7743fc18588c629f5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa5e1fcbd1d65133acab96cc2085b56b3"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svd_8sql__in.html#aa5e1fcbd1d65133acab96cc2085b56b3">__svd_lanczos_agg</a> (int, float8[], float8[], int)</td></tr>
+<tr class="separator:aa5e1fcbd1d65133acab96cc2085b56b3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acd10d4d0a196e1ed062f5e38288555df"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svd_8sql__in.html#acd10d4d0a196e1ed062f5e38288555df">__svd_block_lanczos_agg</a> (int, int4, float8[], float8[], int)</td></tr>
+<tr class="separator:acd10d4d0a196e1ed062f5e38288555df"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1ba5e18c0f8db1190ef75a9d209a1f0f"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svd_8sql__in.html#a1ba5e18c0f8db1190ef75a9d209a1f0f">__svd_sparse_lanczos_agg</a> (int4, int4, float8, float8[], int4)</td></tr>
+<tr class="separator:a1ba5e18c0f8db1190ef75a9d209a1f0f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae86146392b1b5065fc6badc0f25b3f3e"><td class="memItemLeft" align="right" valign="top">__svd_lanczos_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svd_8sql__in.html#ae86146392b1b5065fc6badc0f25b3f3e">__svd_lanczos_pvec</a> (float8[] vector, float8[] pvec, float8 beta)</td></tr>
+<tr class="separator:ae86146392b1b5065fc6badc0f25b3f3e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6b85b00dae1c49821be7d3e68ccf266b"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svd_8sql__in.html#a6b85b00dae1c49821be7d3e68ccf266b">__svd_lanczos_qvec</a> (float8[] vector, float8[] qvec, float8 alpha)</td></tr>
+<tr class="separator:a6b85b00dae1c49821be7d3e68ccf266b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab145d0ed41d32120b31adf8cf29691f6"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svd_8sql__in.html#ab145d0ed41d32120b31adf8cf29691f6">__svd_gram_schmidt_orthogonalize_sfunc</a> (float8[] state, float8[] vec_unorthogonalized, float8[] vec_orthogonalized)</td></tr>
+<tr class="separator:ab145d0ed41d32120b31adf8cf29691f6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae8f2006de42ea486eccfb82b3623218c"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svd_8sql__in.html#ae8f2006de42ea486eccfb82b3623218c">__svd_gram_schmidt_orthogonalize_prefunc</a> (float8[] state1, float8[] state2)</td></tr>
+<tr class="separator:ae8f2006de42ea486eccfb82b3623218c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af006d422c49a2de762cbf7ebfe588484"><td class="memItemLeft" align="right" valign="top">__svd_lanczos_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svd_8sql__in.html#af006d422c49a2de762cbf7ebfe588484">__svd_gram_schmidt_orthogonalize_ffunc</a> (float8[] state)</td></tr>
+<tr class="separator:af006d422c49a2de762cbf7ebfe588484"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abb9c16df6000f260e101bb8dd5c7aa0e"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svd_8sql__in.html#abb9c16df6000f260e101bb8dd5c7aa0e">__svd_gram_schmidt_orthogonalize_agg</a> (float8[], float8[])</td></tr>
+<tr class="separator:abb9c16df6000f260e101bb8dd5c7aa0e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4bd839e9214cec1dfcdcfb3ca9755df1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svd_8sql__in.html#a4bd839e9214cec1dfcdcfb3ca9755df1">__svd_lanczos_bidiagonalize</a> (text source_table, text output_table_prefix, int n_iterations, int k, boolean is_block)</td></tr>
+<tr class="separator:a4bd839e9214cec1dfcdcfb3ca9755df1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a48b5b42e70a402926e39c59cd16e539e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svd_8sql__in.html#a48b5b42e70a402926e39c59cd16e539e">__svd_lanczos_bidiagonalize_sparse</a> (text source_table, text row_id, text col_id, text val, text output_table_prefix, int n_iterations, int k)</td></tr>
+<tr class="separator:a48b5b42e70a402926e39c59cd16e539e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a53034f4da049595a4c0ea03e67c727fb"><td class="memItemLeft" align="right" valign="top">__svd_bidiagonal_matrix_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svd_8sql__in.html#a53034f4da049595a4c0ea03e67c727fb">__svd_decompose_bidiag</a> (int[] row_ids, int[] col_ids, float8[] vals)</td></tr>
+<tr class="separator:a53034f4da049595a4c0ea03e67c727fb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a95e025c969e4a93696b49bad69f993d5"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svd_8sql__in.html#a95e025c969e4a93696b49bad69f993d5">__svd_vec_mult_matrix</a> (float8[] vector, float8[][] matrix, int4 k)</td></tr>
+<tr class="separator:a95e025c969e4a93696b49bad69f993d5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9a6498e5a9a9d78b46f89401df776ed8"><td class="memItemLeft" align="right" valign="top">set&lt; __svd_vec_mat_mult_result &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svd_8sql__in.html#a9a6498e5a9a9d78b46f89401df776ed8">__svd_vec_trans_mult_matrix_internal</a> (float8[] vector, float8[][] matrix, int4 col_id, int4 k)</td></tr>
+<tr class="separator:a9a6498e5a9a9d78b46f89401df776ed8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab18d5d90ce54e9e80c06b843a4bd8ba5"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svd_8sql__in.html#ab18d5d90ce54e9e80c06b843a4bd8ba5">__svd_vec_trans_mult_matrix</a> (text vec_table, text mat_table, int4 k, boolean is_left, text res_table)</td></tr>
+<tr class="separator:ab18d5d90ce54e9e80c06b843a4bd8ba5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad020de39296f7e8e121ba2a173700fa6"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svd_8sql__in.html#ad020de39296f7e8e121ba2a173700fa6">svd</a> (text input_message)</td></tr>
+<tr class="separator:ad020de39296f7e8e121ba2a173700fa6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a33268c776f0e4f86f7cefc52290b552a"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svd_8sql__in.html#a33268c776f0e4f86f7cefc52290b552a">svd</a> ()</td></tr>
+<tr class="separator:a33268c776f0e4f86f7cefc52290b552a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><dl class="section see"><dt>See also</dt><dd>For a brief introduction to singular value decomposition, see the module description <a class="el" href="group__grp__svd.html">Singular Value Decomposition</a>. </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="acd10d4d0a196e1ed062f5e38288555df"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acd10d4d0a196e1ed062f5e38288555df">&#9670;&nbsp;</a></span>__svd_block_lanczos_agg()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] __svd_block_lanczos_agg </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a6bc4dbb608e1042746c10b9fa180ec13"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6bc4dbb608e1042746c10b9fa180ec13">&#9670;&nbsp;</a></span>__svd_block_lanczos_sfunc()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __svd_block_lanczos_sfunc </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>col_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>block</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>vector</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>dimension</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a53034f4da049595a4c0ea03e67c727fb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a53034f4da049595a4c0ea03e67c727fb">&#9670;&nbsp;</a></span>__svd_decompose_bidiag()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">__svd_bidiagonal_matrix_result __svd_decompose_bidiag </td>
+          <td>(</td>
+          <td class="paramtype">int []&#160;</td>
+          <td class="paramname"><em>row_ids</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int []&#160;</td>
+          <td class="paramname"><em>col_ids</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>vals</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="abb9c16df6000f260e101bb8dd5c7aa0e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abb9c16df6000f260e101bb8dd5c7aa0e">&#9670;&nbsp;</a></span>__svd_gram_schmidt_orthogonalize_agg()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] __svd_gram_schmidt_orthogonalize_agg </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[]&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="af006d422c49a2de762cbf7ebfe588484"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af006d422c49a2de762cbf7ebfe588484">&#9670;&nbsp;</a></span>__svd_gram_schmidt_orthogonalize_ffunc()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">__svd_lanczos_result __svd_gram_schmidt_orthogonalize_ffunc </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae8f2006de42ea486eccfb82b3623218c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae8f2006de42ea486eccfb82b3623218c">&#9670;&nbsp;</a></span>__svd_gram_schmidt_orthogonalize_prefunc()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __svd_gram_schmidt_orthogonalize_prefunc </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab145d0ed41d32120b31adf8cf29691f6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab145d0ed41d32120b31adf8cf29691f6">&#9670;&nbsp;</a></span>__svd_gram_schmidt_orthogonalize_sfunc()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __svd_gram_schmidt_orthogonalize_sfunc </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>vec_unorthogonalized</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>vec_orthogonalized</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa5e1fcbd1d65133acab96cc2085b56b3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa5e1fcbd1d65133acab96cc2085b56b3">&#9670;&nbsp;</a></span>__svd_lanczos_agg()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] __svd_lanczos_agg </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a4bd839e9214cec1dfcdcfb3ca9755df1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4bd839e9214cec1dfcdcfb3ca9755df1">&#9670;&nbsp;</a></span>__svd_lanczos_bidiagonalize()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void __svd_lanczos_bidiagonalize </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table_prefix</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>n_iterations</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>k</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>is_block</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a48b5b42e70a402926e39c59cd16e539e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a48b5b42e70a402926e39c59cd16e539e">&#9670;&nbsp;</a></span>__svd_lanczos_bidiagonalize_sparse()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void __svd_lanczos_bidiagonalize_sparse </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>col_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>val</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table_prefix</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>n_iterations</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>k</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae7b94da849ee17b7743fc18588c629f5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae7b94da849ee17b7743fc18588c629f5">&#9670;&nbsp;</a></span>__svd_lanczos_prefunc()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __svd_lanczos_prefunc </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae86146392b1b5065fc6badc0f25b3f3e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae86146392b1b5065fc6badc0f25b3f3e">&#9670;&nbsp;</a></span>__svd_lanczos_pvec()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">__svd_lanczos_result __svd_lanczos_pvec </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>vector</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>pvec</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>beta</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a6b85b00dae1c49821be7d3e68ccf266b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6b85b00dae1c49821be7d3e68ccf266b">&#9670;&nbsp;</a></span>__svd_lanczos_qvec()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __svd_lanczos_qvec </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>vector</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>qvec</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>alpha</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a63ae741e70fbfba1082241c75d6cdd51"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a63ae741e70fbfba1082241c75d6cdd51">&#9670;&nbsp;</a></span>__svd_lanczos_sfunc()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __svd_lanczos_sfunc </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>row_array</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>vector</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>dimension</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1ba5e18c0f8db1190ef75a9d209a1f0f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1ba5e18c0f8db1190ef75a9d209a1f0f">&#9670;&nbsp;</a></span>__svd_sparse_lanczos_agg()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] __svd_sparse_lanczos_agg </td>
+          <td>(</td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a6f1c90152f497ef91526cc9200bad00a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6f1c90152f497ef91526cc9200bad00a">&#9670;&nbsp;</a></span>__svd_sparse_lanczos_sfunc()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __svd_sparse_lanczos_sfunc </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>col_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>val</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>vector</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>dimension</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7638f4ea701362e5c318b5272c0e98b9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7638f4ea701362e5c318b5272c0e98b9">&#9670;&nbsp;</a></span>__svd_unit_vector()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __svd_unit_vector </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>dim</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a95e025c969e4a93696b49bad69f993d5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a95e025c969e4a93696b49bad69f993d5">&#9670;&nbsp;</a></span>__svd_vec_mult_matrix()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __svd_vec_mult_matrix </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>vector</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>matrix</em>[][], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>k</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Multiplication of a row vector with an in-memory matrix vector: 1 x l matrix: l x l k: Sub-matrix of the size l x k </p>
+
+</div>
+</div>
+<a id="ab18d5d90ce54e9e80c06b843a4bd8ba5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab18d5d90ce54e9e80c06b843a4bd8ba5">&#9670;&nbsp;</a></span>__svd_vec_trans_mult_matrix()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void __svd_vec_trans_mult_matrix </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>vec_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>mat_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>k</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>is_left</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>res_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a9a6498e5a9a9d78b46f89401df776ed8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9a6498e5a9a9d78b46f89401df776ed8">&#9670;&nbsp;</a></span>__svd_vec_trans_mult_matrix_internal()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">set&lt;__svd_vec_mat_mult_result&gt; __svd_vec_trans_mult_matrix_internal </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>vector</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>matrix</em>[][], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>col_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"><em>k</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8dbab74f5bde863a63431a6ec6f66a61"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8dbab74f5bde863a63431a6ec6f66a61">&#9670;&nbsp;</a></span>svd() <span class="overload">[1/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void svd </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table_prefix</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>k</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>n_iterations</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>result_summary_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a3222ad5181b1b7dde8e89ae00c663177"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3222ad5181b1b7dde8e89ae00c663177">&#9670;&nbsp;</a></span>svd() <span class="overload">[2/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void svd </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table_prefix</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>k</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a9deeee6cc15d9f9713f0c93665923622"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9deeee6cc15d9f9713f0c93665923622">&#9670;&nbsp;</a></span>svd() <span class="overload">[3/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void svd </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table_prefix</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>k</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>n_iterations</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ad020de39296f7e8e121ba2a173700fa6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad020de39296f7e8e121ba2a173700fa6">&#9670;&nbsp;</a></span>svd() <span class="overload">[4/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text svd </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>input_message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a33268c776f0e4f86f7cefc52290b552a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a33268c776f0e4f86f7cefc52290b552a">&#9670;&nbsp;</a></span>svd() <span class="overload">[5/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text svd </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a96fb5620eed9c936b5bbfe24d7e37ad6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a96fb5620eed9c936b5bbfe24d7e37ad6">&#9670;&nbsp;</a></span>svd_block() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void svd_block </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table_prefix</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>k</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>n_iterations</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>result_summary_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a2927cf2c1a1addd00f838718e8b1fea1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2927cf2c1a1addd00f838718e8b1fea1">&#9670;&nbsp;</a></span>svd_block() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void svd_block </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table_prefix</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>k</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>n_iterations</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a2ed4bfd5bba7b959deaccb3471e624ed"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2ed4bfd5bba7b959deaccb3471e624ed">&#9670;&nbsp;</a></span>svd_block() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void svd_block </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table_prefix</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>k</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a511f83e3eba19f6f41f8e3f7122ddb3a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a511f83e3eba19f6f41f8e3f7122ddb3a">&#9670;&nbsp;</a></span>svd_sparse() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void svd_sparse </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table_prefix</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>col_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>val_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>col_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>k</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>n_iterations</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>result_summary_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aaad7f45ad283fcffa5b5d9938432a038"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aaad7f45ad283fcffa5b5d9938432a038">&#9670;&nbsp;</a></span>svd_sparse() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void svd_sparse </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table_prefix</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>col_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>val_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>col_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>k</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a20f535608417d4ff73b6e029b785ddef"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a20f535608417d4ff73b6e029b785ddef">&#9670;&nbsp;</a></span>svd_sparse() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void svd_sparse </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table_prefix</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>col_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>val_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>col_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>k</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>n_iterations</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a0225b28fd4b71cf6e7072c034f3296c6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0225b28fd4b71cf6e7072c034f3296c6">&#9670;&nbsp;</a></span>svd_sparse_native() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void svd_sparse_native </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table_prefix</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>col_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>val_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>col_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>k</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>n_iterations</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>result_summary_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8e0f90441d3a2335aef8cc1403577bb9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8e0f90441d3a2335aef8cc1403577bb9">&#9670;&nbsp;</a></span>svd_sparse_native() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void svd_sparse_native </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table_prefix</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>col_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>val_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>col_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>k</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ad3a3a3d97f9d7bc96578be4aa6b54d1c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad3a3a3d97f9d7bc96578be4aa6b54d1c">&#9670;&nbsp;</a></span>svd_sparse_native() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void svd_sparse_native </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table_prefix</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>row_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>col_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>val_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>row_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>col_dim</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>k</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>n_iterations</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_9e42ee0a0235722f482630aa6cc99334.html">linalg</a></li><li class="navelem"><a class="el" href="svd_8sql__in.html">svd.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:57 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/svec_8sql__in.html b/docs/rc/svec_8sql__in.html
new file mode 100644
index 0000000..6c83f2e
--- /dev/null
+++ b/docs/rc/svec_8sql__in.html
@@ -0,0 +1,1740 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: svec.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('svec_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">svec.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>SQL type definitions and functions for sparse vector data type <code>svec</code>  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:abe896192db26c02d5c517a5ccf2144f1"><td class="memItemLeft" align="right" valign="top">svec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#abe896192db26c02d5c517a5ccf2144f1">svec_in</a> (cstring)</td></tr>
+<tr class="separator:abe896192db26c02d5c517a5ccf2144f1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3db4af36acd318030ae57d2bfd19387a"><td class="memItemLeft" align="right" valign="top">cstring&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#a3db4af36acd318030ae57d2bfd19387a">svec_out</a> (svec)</td></tr>
+<tr class="separator:a3db4af36acd318030ae57d2bfd19387a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a585ea8bcb1d0647ef1295187b87405b2"><td class="memItemLeft" align="right" valign="top">svec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#a585ea8bcb1d0647ef1295187b87405b2">svec_recv</a> (internal)</td></tr>
+<tr class="separator:a585ea8bcb1d0647ef1295187b87405b2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a617557435170136b2781070c0a268b83"><td class="memItemLeft" align="right" valign="top">bytea&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#a617557435170136b2781070c0a268b83">svec_send</a> (svec)</td></tr>
+<tr class="separator:a617557435170136b2781070c0a268b83"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a612d8920c61e6fdf18dd4e3e9c69c979"><td class="memItemLeft" align="right" valign="top">svec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#a612d8920c61e6fdf18dd4e3e9c69c979">svec_plus</a> (svec, svec)</td></tr>
+<tr class="separator:a612d8920c61e6fdf18dd4e3e9c69c979"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a170890a165bf662d343339ffc2a187cf"><td class="memItemLeft" align="right" valign="top">svec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#a170890a165bf662d343339ffc2a187cf">svec_minus</a> (svec, svec)</td></tr>
+<tr class="separator:a170890a165bf662d343339ffc2a187cf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a78a38512c860085e31f6153b8118cbe9"><td class="memItemLeft" align="right" valign="top">svec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#a78a38512c860085e31f6153b8118cbe9">svec_div</a> (svec, svec)</td></tr>
+<tr class="separator:a78a38512c860085e31f6153b8118cbe9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a27f0629942dba2e395b005c728d53ac3"><td class="memItemLeft" align="right" valign="top">svec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#a27f0629942dba2e395b005c728d53ac3">svec_mult</a> (svec, svec)</td></tr>
+<tr class="separator:a27f0629942dba2e395b005c728d53ac3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab5166565f3482768db33ee677acc3d96"><td class="memItemLeft" align="right" valign="top">svec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#ab5166565f3482768db33ee677acc3d96">svec_pow</a> (svec, svec)</td></tr>
+<tr class="separator:ab5166565f3482768db33ee677acc3d96"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a813762d8bd2a7fda083880e5bd8c355b"><td class="memItemLeft" align="right" valign="top">integer&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#a813762d8bd2a7fda083880e5bd8c355b">svec_cmp</a> (svec, svec)</td></tr>
+<tr class="separator:a813762d8bd2a7fda083880e5bd8c355b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad08b0cadbcf50ff4685228f917cafd1f"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#ad08b0cadbcf50ff4685228f917cafd1f">svec_ge</a> (svec, svec)</td></tr>
+<tr class="separator:ad08b0cadbcf50ff4685228f917cafd1f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad7f05a6ce6efc51517bab6ccdb79ee23"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#ad7f05a6ce6efc51517bab6ccdb79ee23">svec_lt</a> (svec, svec)</td></tr>
+<tr class="separator:ad7f05a6ce6efc51517bab6ccdb79ee23"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa6f5715df728db0783b5dcb8db82a2a2"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#aa6f5715df728db0783b5dcb8db82a2a2">svec_le</a> (svec, svec)</td></tr>
+<tr class="separator:aa6f5715df728db0783b5dcb8db82a2a2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3e5d57b7a4473904e4d053884468e540"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#a3e5d57b7a4473904e4d053884468e540">svec_gt</a> (svec, svec)</td></tr>
+<tr class="separator:a3e5d57b7a4473904e4d053884468e540"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a80d9692f67e7cb482c4bda6dbaacd82b"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#a80d9692f67e7cb482c4bda6dbaacd82b">svec_ne</a> (svec, svec)</td></tr>
+<tr class="separator:a80d9692f67e7cb482c4bda6dbaacd82b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adceeff7e2f2e43b3e17219bca5d4fea0"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#adceeff7e2f2e43b3e17219bca5d4fea0">svec_eq</a> (svec, svec)</td></tr>
+<tr class="separator:adceeff7e2f2e43b3e17219bca5d4fea0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0684988340d533c00523951f9a95107e"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#a0684988340d533c00523951f9a95107e">float8arr_eq</a> (float8[], float8[])</td></tr>
+<tr class="separator:a0684988340d533c00523951f9a95107e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4c82ac5de8e026c85e83aae4e0f06220"><td class="memItemLeft" align="right" valign="top">svec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#a4c82ac5de8e026c85e83aae4e0f06220">float8arr_minus_float8arr</a> (float8[], float8[])</td></tr>
+<tr class="separator:a4c82ac5de8e026c85e83aae4e0f06220"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a457f2f9210baba1c13820801c42cd06a"><td class="memItemLeft" align="right" valign="top">svec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#a457f2f9210baba1c13820801c42cd06a">float8arr_minus_svec</a> (float8[], svec)</td></tr>
+<tr class="separator:a457f2f9210baba1c13820801c42cd06a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adf39975fbbd8a39629569c622db33ab9"><td class="memItemLeft" align="right" valign="top">svec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#adf39975fbbd8a39629569c622db33ab9">svec_minus_float8arr</a> (svec, float8[])</td></tr>
+<tr class="separator:adf39975fbbd8a39629569c622db33ab9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6bb068ab6ba775619fe787ed845f5a0d"><td class="memItemLeft" align="right" valign="top">svec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#a6bb068ab6ba775619fe787ed845f5a0d">float8arr_plus_float8arr</a> (float8[], float8[])</td></tr>
+<tr class="separator:a6bb068ab6ba775619fe787ed845f5a0d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a98aa60ec0c58c828b0a72c75d604322e"><td class="memItemLeft" align="right" valign="top">svec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#a98aa60ec0c58c828b0a72c75d604322e">float8arr_plus_svec</a> (float8[], svec)</td></tr>
+<tr class="separator:a98aa60ec0c58c828b0a72c75d604322e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaeb54c952836c83c7f21a1c62a77955f"><td class="memItemLeft" align="right" valign="top">svec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#aaeb54c952836c83c7f21a1c62a77955f">svec_plus_float8arr</a> (svec, float8[])</td></tr>
+<tr class="separator:aaeb54c952836c83c7f21a1c62a77955f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abb0b3f155c45bb370ef7adac49096835"><td class="memItemLeft" align="right" valign="top">svec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#abb0b3f155c45bb370ef7adac49096835">float8arr_mult_float8arr</a> (float8[], float8[])</td></tr>
+<tr class="separator:abb0b3f155c45bb370ef7adac49096835"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0e7dd7a82b41f4b8344efa21208e1637"><td class="memItemLeft" align="right" valign="top">svec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#a0e7dd7a82b41f4b8344efa21208e1637">float8arr_mult_svec</a> (float8[], svec)</td></tr>
+<tr class="separator:a0e7dd7a82b41f4b8344efa21208e1637"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6e6916baaf0a7ae0079424ce0565c8b4"><td class="memItemLeft" align="right" valign="top">svec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#a6e6916baaf0a7ae0079424ce0565c8b4">svec_mult_float8arr</a> (svec, float8[])</td></tr>
+<tr class="separator:a6e6916baaf0a7ae0079424ce0565c8b4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a20d4a7b907e967351f6439640482e0f9"><td class="memItemLeft" align="right" valign="top">svec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#a20d4a7b907e967351f6439640482e0f9">float8arr_div_float8arr</a> (float8[], float8[])</td></tr>
+<tr class="separator:a20d4a7b907e967351f6439640482e0f9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5c4ac1cc9a2ee3057958070b8e7bffcc"><td class="memItemLeft" align="right" valign="top">svec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#a5c4ac1cc9a2ee3057958070b8e7bffcc">float8arr_div_svec</a> (float8[], svec)</td></tr>
+<tr class="separator:a5c4ac1cc9a2ee3057958070b8e7bffcc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a211cf37584f54087dabc1fac14ed12dd"><td class="memItemLeft" align="right" valign="top">svec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#a211cf37584f54087dabc1fac14ed12dd">svec_div_float8arr</a> (svec, float8[])</td></tr>
+<tr class="separator:a211cf37584f54087dabc1fac14ed12dd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4eeaf69c84d7ce0e46adc93e38b2b4f3"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#a4eeaf69c84d7ce0e46adc93e38b2b4f3">svec_dot</a> (svec, svec)</td></tr>
+<tr class="separator:a4eeaf69c84d7ce0e46adc93e38b2b4f3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af870f06fd4c51f585515b6306f64fe3b"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#af870f06fd4c51f585515b6306f64fe3b">svec_dot</a> (float8[], float8[])</td></tr>
+<tr class="separator:af870f06fd4c51f585515b6306f64fe3b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a93f4a0901681fc11e847615a4aba0255"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#a93f4a0901681fc11e847615a4aba0255">svec_dot</a> (svec, float8[])</td></tr>
+<tr class="separator:a93f4a0901681fc11e847615a4aba0255"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a47b111663b39ec8646891edec8ab3925"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#a47b111663b39ec8646891edec8ab3925">svec_dot</a> (float8[], svec)</td></tr>
+<tr class="separator:a47b111663b39ec8646891edec8ab3925"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af69458bf9b2906ca471d027966b13e6f"><td class="memItemLeft" align="right" valign="top">svec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#af69458bf9b2906ca471d027966b13e6f">svec_cast_int2</a> (int2)</td></tr>
+<tr class="separator:af69458bf9b2906ca471d027966b13e6f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abc01ac6b36ea9d689d338fd72abbd540"><td class="memItemLeft" align="right" valign="top">svec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#abc01ac6b36ea9d689d338fd72abbd540">svec_cast_int4</a> (int4)</td></tr>
+<tr class="separator:abc01ac6b36ea9d689d338fd72abbd540"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9ea167c01fb2999dc5aaf5e8e21f5e8f"><td class="memItemLeft" align="right" valign="top">svec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#a9ea167c01fb2999dc5aaf5e8e21f5e8f">svec_cast_int8</a> (bigint)</td></tr>
+<tr class="separator:a9ea167c01fb2999dc5aaf5e8e21f5e8f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1f1025124d5423cc1505991414f17582"><td class="memItemLeft" align="right" valign="top">svec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#a1f1025124d5423cc1505991414f17582">svec_cast_float4</a> (float4)</td></tr>
+<tr class="separator:a1f1025124d5423cc1505991414f17582"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af42e4b15879949032a68139c59443aac"><td class="memItemLeft" align="right" valign="top">svec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#af42e4b15879949032a68139c59443aac">svec_cast_float8</a> (float8)</td></tr>
+<tr class="separator:af42e4b15879949032a68139c59443aac"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a50de0278ff7ceeff33a2ea4ca5fdf1a0"><td class="memItemLeft" align="right" valign="top">svec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#a50de0278ff7ceeff33a2ea4ca5fdf1a0">svec_cast_numeric</a> (numeric)</td></tr>
+<tr class="separator:a50de0278ff7ceeff33a2ea4ca5fdf1a0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5e38a27f556a6ac88549efec37da786f"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#a5e38a27f556a6ac88549efec37da786f">float8arr_cast_int2</a> (int2)</td></tr>
+<tr class="separator:a5e38a27f556a6ac88549efec37da786f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9c05d02233680a2e96dc6058155e4483"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#a9c05d02233680a2e96dc6058155e4483">float8arr_cast_int4</a> (int4)</td></tr>
+<tr class="separator:a9c05d02233680a2e96dc6058155e4483"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4862b4e281323db16e9be4dfd681db2e"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#a4862b4e281323db16e9be4dfd681db2e">float8arr_cast_int8</a> (bigint)</td></tr>
+<tr class="separator:a4862b4e281323db16e9be4dfd681db2e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2a6e17fd9dafc349c7cfa070486e6ad1"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#a2a6e17fd9dafc349c7cfa070486e6ad1">float8arr_cast_float4</a> (float4)</td></tr>
+<tr class="separator:a2a6e17fd9dafc349c7cfa070486e6ad1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af8db439cf1a73749052f06fc30c7d282"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#af8db439cf1a73749052f06fc30c7d282">float8arr_cast_float8</a> (float8)</td></tr>
+<tr class="separator:af8db439cf1a73749052f06fc30c7d282"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0bc8ef7e7b8e37b784c81a940bd817f0"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#a0bc8ef7e7b8e37b784c81a940bd817f0">float8arr_cast_numeric</a> (numeric)</td></tr>
+<tr class="separator:a0bc8ef7e7b8e37b784c81a940bd817f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a96025250e64f049a053c5696b3b96e02"><td class="memItemLeft" align="right" valign="top">svec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#a96025250e64f049a053c5696b3b96e02">svec_cast_float8arr</a> (float8[])</td></tr>
+<tr class="separator:a96025250e64f049a053c5696b3b96e02"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0ee423729fbca5abd46c86fa81d51f23"><td class="memItemLeft" align="right" valign="top">svec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#a0ee423729fbca5abd46c86fa81d51f23">svec_cast_positions_float8arr</a> (int8[], float8[], int8, float8)</td></tr>
+<tr class="separator:a0ee423729fbca5abd46c86fa81d51f23"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7decda276d7ff1e9340dd44e0e7419c0"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#a7decda276d7ff1e9340dd44e0e7419c0">svec_return_array</a> (svec)</td></tr>
+<tr class="separator:a7decda276d7ff1e9340dd44e0e7419c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a24f184bef083fd9068c28fc94dad8054"><td class="memItemLeft" align="right" valign="top">svec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#a24f184bef083fd9068c28fc94dad8054">svec_concat</a> (svec, svec)</td></tr>
+<tr class="separator:a24f184bef083fd9068c28fc94dad8054"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a34cb5f83e0c010aacc719b8b078bfeb9"><td class="memItemLeft" align="right" valign="top">svec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#a34cb5f83e0c010aacc719b8b078bfeb9">svec_concat_replicate</a> (int4, svec)</td></tr>
+<tr class="separator:a34cb5f83e0c010aacc719b8b078bfeb9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab53b85cb3412c9172bf0ee04f6856c69"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#ab53b85cb3412c9172bf0ee04f6856c69">svec_l2_lt</a> (svec, svec)</td></tr>
+<tr class="separator:ab53b85cb3412c9172bf0ee04f6856c69"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4045437bce8b9a9bdb0eb3115c97ca99"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#a4045437bce8b9a9bdb0eb3115c97ca99">svec_l2_le</a> (svec, svec)</td></tr>
+<tr class="separator:a4045437bce8b9a9bdb0eb3115c97ca99"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9268d26c54c4b2905eb7938df95af8c0"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#a9268d26c54c4b2905eb7938df95af8c0">svec_l2_eq</a> (svec, svec)</td></tr>
+<tr class="separator:a9268d26c54c4b2905eb7938df95af8c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af35c08aadf164fa3bbc8678765bca643"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#af35c08aadf164fa3bbc8678765bca643">svec_l2_ne</a> (svec, svec)</td></tr>
+<tr class="separator:af35c08aadf164fa3bbc8678765bca643"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab2414d0d78286884cd199cf44c1d17b9"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#ab2414d0d78286884cd199cf44c1d17b9">svec_l2_gt</a> (svec, svec)</td></tr>
+<tr class="separator:ab2414d0d78286884cd199cf44c1d17b9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac22b72fbae2a8f2b35b1c571d9f54dad"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#ac22b72fbae2a8f2b35b1c571d9f54dad">svec_l2_ge</a> (svec, svec)</td></tr>
+<tr class="separator:ac22b72fbae2a8f2b35b1c571d9f54dad"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8f72c8cf6d39f08d939f23cf1338a3c6"><td class="memItemLeft" align="right" valign="top">integer&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec_8sql__in.html#a8f72c8cf6d39f08d939f23cf1338a3c6">svec_l2_cmp</a> (svec, svec)</td></tr>
+<tr class="separator:a8f72c8cf6d39f08d939f23cf1338a3c6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><dl class="section see"><dt>See also</dt><dd>For an introduction to the sparse vector implementation, see the module description <a class="el" href="group__grp__svec.html">Sparse Vectors</a>.</dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="a2a6e17fd9dafc349c7cfa070486e6ad1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2a6e17fd9dafc349c7cfa070486e6ad1">&#9670;&nbsp;</a></span>float8arr_cast_float4()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] float8arr_cast_float4 </td>
+          <td>(</td>
+          <td class="paramtype">float4&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Casts a float4 into a float8 array. </p>
+
+</div>
+</div>
+<a id="af8db439cf1a73749052f06fc30c7d282"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af8db439cf1a73749052f06fc30c7d282">&#9670;&nbsp;</a></span>float8arr_cast_float8()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] float8arr_cast_float8 </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Casts a float8 into a float8 array. </p>
+
+</div>
+</div>
+<a id="a5e38a27f556a6ac88549efec37da786f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5e38a27f556a6ac88549efec37da786f">&#9670;&nbsp;</a></span>float8arr_cast_int2()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] float8arr_cast_int2 </td>
+          <td>(</td>
+          <td class="paramtype">int2&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Casts an int2 into a float8 array. </p>
+
+</div>
+</div>
+<a id="a9c05d02233680a2e96dc6058155e4483"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9c05d02233680a2e96dc6058155e4483">&#9670;&nbsp;</a></span>float8arr_cast_int4()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] float8arr_cast_int4 </td>
+          <td>(</td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Casts an int4 into a float8 array. </p>
+
+</div>
+</div>
+<a id="a4862b4e281323db16e9be4dfd681db2e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4862b4e281323db16e9be4dfd681db2e">&#9670;&nbsp;</a></span>float8arr_cast_int8()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] float8arr_cast_int8 </td>
+          <td>(</td>
+          <td class="paramtype">bigint&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Casts an int8 into a float8 array. </p>
+
+</div>
+</div>
+<a id="a0bc8ef7e7b8e37b784c81a940bd817f0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0bc8ef7e7b8e37b784c81a940bd817f0">&#9670;&nbsp;</a></span>float8arr_cast_numeric()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] float8arr_cast_numeric </td>
+          <td>(</td>
+          <td class="paramtype">numeric&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Casts a numeric into a float8 array. </p>
+
+</div>
+</div>
+<a id="a20d4a7b907e967351f6439640482e0f9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a20d4a7b907e967351f6439640482e0f9">&#9670;&nbsp;</a></span>float8arr_div_float8arr()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">svec float8arr_div_float8arr </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[]&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Divides a float8 array by another, element by element. </p>
+
+</div>
+</div>
+<a id="a5c4ac1cc9a2ee3057958070b8e7bffcc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5c4ac1cc9a2ee3057958070b8e7bffcc">&#9670;&nbsp;</a></span>float8arr_div_svec()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">svec float8arr_div_svec </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Divides a float8 array by an SVEC, element by element. </p>
+
+</div>
+</div>
+<a id="a0684988340d533c00523951f9a95107e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0684988340d533c00523951f9a95107e">&#9670;&nbsp;</a></span>float8arr_eq()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">boolean float8arr_eq </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[]&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Returns true if two float8 arrays are equal </p>
+
+</div>
+</div>
+<a id="a4c82ac5de8e026c85e83aae4e0f06220"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4c82ac5de8e026c85e83aae4e0f06220">&#9670;&nbsp;</a></span>float8arr_minus_float8arr()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">svec float8arr_minus_float8arr </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[]&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Minus second array from the first array, element by element. </p>
+
+</div>
+</div>
+<a id="a457f2f9210baba1c13820801c42cd06a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a457f2f9210baba1c13820801c42cd06a">&#9670;&nbsp;</a></span>float8arr_minus_svec()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">svec float8arr_minus_svec </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Minus second SVEC from the first array, element by element. </p>
+
+</div>
+</div>
+<a id="abb0b3f155c45bb370ef7adac49096835"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abb0b3f155c45bb370ef7adac49096835">&#9670;&nbsp;</a></span>float8arr_mult_float8arr()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">svec float8arr_mult_float8arr </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[]&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Multiplies two float8 arrays, element by element. </p>
+
+</div>
+</div>
+<a id="a0e7dd7a82b41f4b8344efa21208e1637"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0e7dd7a82b41f4b8344efa21208e1637">&#9670;&nbsp;</a></span>float8arr_mult_svec()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">svec float8arr_mult_svec </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Multiplies an array and an SVEC, element by element. </p>
+
+</div>
+</div>
+<a id="a6bb068ab6ba775619fe787ed845f5a0d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6bb068ab6ba775619fe787ed845f5a0d">&#9670;&nbsp;</a></span>float8arr_plus_float8arr()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">svec float8arr_plus_float8arr </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[]&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Adds two arrays together, element by element. </p>
+
+</div>
+</div>
+<a id="a98aa60ec0c58c828b0a72c75d604322e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a98aa60ec0c58c828b0a72c75d604322e">&#9670;&nbsp;</a></span>float8arr_plus_svec()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">svec float8arr_plus_svec </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Adds an array and an SVEC, element by element. </p>
+
+</div>
+</div>
+<a id="a1f1025124d5423cc1505991414f17582"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1f1025124d5423cc1505991414f17582">&#9670;&nbsp;</a></span>svec_cast_float4()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">svec svec_cast_float4 </td>
+          <td>(</td>
+          <td class="paramtype">float4&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Casts a float4 into an SVEC. </p>
+
+</div>
+</div>
+<a id="af42e4b15879949032a68139c59443aac"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af42e4b15879949032a68139c59443aac">&#9670;&nbsp;</a></span>svec_cast_float8()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">svec svec_cast_float8 </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Casts a float8 into an SVEC. </p>
+
+</div>
+</div>
+<a id="a96025250e64f049a053c5696b3b96e02"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a96025250e64f049a053c5696b3b96e02">&#9670;&nbsp;</a></span>svec_cast_float8arr()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">svec svec_cast_float8arr </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[]</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Casts a float8 into an SVEC. </p>
+
+</div>
+</div>
+<a id="af69458bf9b2906ca471d027966b13e6f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af69458bf9b2906ca471d027966b13e6f">&#9670;&nbsp;</a></span>svec_cast_int2()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">svec svec_cast_int2 </td>
+          <td>(</td>
+          <td class="paramtype">int2&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Casts an int2 into an SVEC. </p>
+
+</div>
+</div>
+<a id="abc01ac6b36ea9d689d338fd72abbd540"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abc01ac6b36ea9d689d338fd72abbd540">&#9670;&nbsp;</a></span>svec_cast_int4()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">svec svec_cast_int4 </td>
+          <td>(</td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Casts an int4 into an SVEC. </p>
+
+</div>
+</div>
+<a id="a9ea167c01fb2999dc5aaf5e8e21f5e8f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9ea167c01fb2999dc5aaf5e8e21f5e8f">&#9670;&nbsp;</a></span>svec_cast_int8()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">svec svec_cast_int8 </td>
+          <td>(</td>
+          <td class="paramtype">bigint&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Casts an int8 into an SVEC. </p>
+
+</div>
+</div>
+<a id="a50de0278ff7ceeff33a2ea4ca5fdf1a0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a50de0278ff7ceeff33a2ea4ca5fdf1a0">&#9670;&nbsp;</a></span>svec_cast_numeric()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">svec svec_cast_numeric </td>
+          <td>(</td>
+          <td class="paramtype">numeric&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Casts a numeric into an SVEC. </p>
+
+</div>
+</div>
+<a id="a0ee423729fbca5abd46c86fa81d51f23"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0ee423729fbca5abd46c86fa81d51f23">&#9670;&nbsp;</a></span>svec_cast_positions_float8arr()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">svec svec_cast_positions_float8arr </td>
+          <td>(</td>
+          <td class="paramtype">int8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Casts an array of int8 positions, float8 values into an SVEC. </p>
+
+</div>
+</div>
+<a id="a813762d8bd2a7fda083880e5bd8c355b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a813762d8bd2a7fda083880e5bd8c355b">&#9670;&nbsp;</a></span>svec_cmp()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">integer svec_cmp </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Compare two SVECs, -1 for left side smaller, 1 for greater, 0 for equal </p>
+
+</div>
+</div>
+<a id="a24f184bef083fd9068c28fc94dad8054"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a24f184bef083fd9068c28fc94dad8054">&#9670;&nbsp;</a></span>svec_concat()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">svec svec_concat </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Concatenates two SVECs. </p>
+
+</div>
+</div>
+<a id="a34cb5f83e0c010aacc719b8b078bfeb9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a34cb5f83e0c010aacc719b8b078bfeb9">&#9670;&nbsp;</a></span>svec_concat_replicate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">svec svec_concat_replicate </td>
+          <td>(</td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Replicates n copies of an SVEC and concatenates them together. </p>
+
+</div>
+</div>
+<a id="a78a38512c860085e31f6153b8118cbe9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a78a38512c860085e31f6153b8118cbe9">&#9670;&nbsp;</a></span>svec_div()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">svec svec_div </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Divides the first SVEC by the second, element by element. </p>
+
+</div>
+</div>
+<a id="a211cf37584f54087dabc1fac14ed12dd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a211cf37584f54087dabc1fac14ed12dd">&#9670;&nbsp;</a></span>svec_div_float8arr()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">svec svec_div_float8arr </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[]&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Divides an SVEC by a float8 array, element by element. </p>
+
+</div>
+</div>
+<a id="a4eeaf69c84d7ce0e46adc93e38b2b4f3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4eeaf69c84d7ce0e46adc93e38b2b4f3">&#9670;&nbsp;</a></span>svec_dot() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 svec_dot </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Computes the dot product of two SVECs. </p>
+
+</div>
+</div>
+<a id="af870f06fd4c51f585515b6306f64fe3b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af870f06fd4c51f585515b6306f64fe3b">&#9670;&nbsp;</a></span>svec_dot() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 svec_dot </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[]&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Computes the dot product of two float8 arrays. </p>
+
+</div>
+</div>
+<a id="a93f4a0901681fc11e847615a4aba0255"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a93f4a0901681fc11e847615a4aba0255">&#9670;&nbsp;</a></span>svec_dot() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 svec_dot </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[]&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Computes the dot product of an SVEC and a float8 array. </p>
+
+</div>
+</div>
+<a id="a47b111663b39ec8646891edec8ab3925"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a47b111663b39ec8646891edec8ab3925">&#9670;&nbsp;</a></span>svec_dot() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 svec_dot </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Computes the dot product of a float8 array and an SVEC. </p>
+
+</div>
+</div>
+<a id="adceeff7e2f2e43b3e17219bca5d4fea0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adceeff7e2f2e43b3e17219bca5d4fea0">&#9670;&nbsp;</a></span>svec_eq()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">boolean svec_eq </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Returns true if two SVECs are equal. If the two SVECs are of different size, then will return false. </p>
+
+</div>
+</div>
+<a id="ad08b0cadbcf50ff4685228f917cafd1f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad08b0cadbcf50ff4685228f917cafd1f">&#9670;&nbsp;</a></span>svec_ge()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">boolean svec_ge </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Returns true if the left SVEC is greater or equal to the right. </p>
+
+</div>
+</div>
+<a id="a3e5d57b7a4473904e4d053884468e540"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3e5d57b7a4473904e4d053884468e540">&#9670;&nbsp;</a></span>svec_gt()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">boolean svec_gt </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Returns true if the left SVEC is greater. </p>
+
+</div>
+</div>
+<a id="abe896192db26c02d5c517a5ccf2144f1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abe896192db26c02d5c517a5ccf2144f1">&#9670;&nbsp;</a></span>svec_in()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">svec svec_in </td>
+          <td>(</td>
+          <td class="paramtype">cstring&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>SVEC constructor from CSTRING. </p>
+
+</div>
+</div>
+<a id="a8f72c8cf6d39f08d939f23cf1338a3c6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8f72c8cf6d39f08d939f23cf1338a3c6">&#9670;&nbsp;</a></span>svec_l2_cmp()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">integer svec_l2_cmp </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Returns a value indicating the relative values of the l2 norms of two SVECs. </p>
+
+</div>
+</div>
+<a id="a9268d26c54c4b2905eb7938df95af8c0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9268d26c54c4b2905eb7938df95af8c0">&#9670;&nbsp;</a></span>svec_l2_eq()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool svec_l2_eq </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Returns true if the l2 norm of the first SVEC is equal to that of the second SVEC. </p>
+
+</div>
+</div>
+<a id="ac22b72fbae2a8f2b35b1c571d9f54dad"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac22b72fbae2a8f2b35b1c571d9f54dad">&#9670;&nbsp;</a></span>svec_l2_ge()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool svec_l2_ge </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Returns true if the l2 norm of the first SVEC is greater than or equal to that of the second SVEC. </p>
+
+</div>
+</div>
+<a id="ab2414d0d78286884cd199cf44c1d17b9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab2414d0d78286884cd199cf44c1d17b9">&#9670;&nbsp;</a></span>svec_l2_gt()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool svec_l2_gt </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Returns true if the l2 norm of the first SVEC is greater than that of the second SVEC. </p>
+
+</div>
+</div>
+<a id="a4045437bce8b9a9bdb0eb3115c97ca99"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4045437bce8b9a9bdb0eb3115c97ca99">&#9670;&nbsp;</a></span>svec_l2_le()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool svec_l2_le </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Returns true if the l2 norm of the first SVEC is less than or equal to that of the second SVEC. </p>
+
+</div>
+</div>
+<a id="ab53b85cb3412c9172bf0ee04f6856c69"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab53b85cb3412c9172bf0ee04f6856c69">&#9670;&nbsp;</a></span>svec_l2_lt()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool svec_l2_lt </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Returns true if the l2 norm of the first SVEC is less than that of the second SVEC. </p>
+
+</div>
+</div>
+<a id="af35c08aadf164fa3bbc8678765bca643"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af35c08aadf164fa3bbc8678765bca643">&#9670;&nbsp;</a></span>svec_l2_ne()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool svec_l2_ne </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Returns true if the l2 norm of the first SVEC is not equal to that of the second SVEC. </p>
+
+</div>
+</div>
+<a id="aa6f5715df728db0783b5dcb8db82a2a2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa6f5715df728db0783b5dcb8db82a2a2">&#9670;&nbsp;</a></span>svec_le()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">boolean svec_le </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Returns true if the left SVEC is less or equal to the right. </p>
+
+</div>
+</div>
+<a id="ad7f05a6ce6efc51517bab6ccdb79ee23"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad7f05a6ce6efc51517bab6ccdb79ee23">&#9670;&nbsp;</a></span>svec_lt()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">boolean svec_lt </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Returns true if the left SVEC is less than the right. </p>
+
+</div>
+</div>
+<a id="a170890a165bf662d343339ffc2a187cf"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a170890a165bf662d343339ffc2a187cf">&#9670;&nbsp;</a></span>svec_minus()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">svec svec_minus </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Minus second SVEC from the first, element by element. </p>
+
+</div>
+</div>
+<a id="adf39975fbbd8a39629569c622db33ab9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adf39975fbbd8a39629569c622db33ab9">&#9670;&nbsp;</a></span>svec_minus_float8arr()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">svec svec_minus_float8arr </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[]&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Minus second array from the first SVEC, element by element. </p>
+
+</div>
+</div>
+<a id="a27f0629942dba2e395b005c728d53ac3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a27f0629942dba2e395b005c728d53ac3">&#9670;&nbsp;</a></span>svec_mult()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">svec svec_mult </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Multiplies two SVEVs together, element by element. </p>
+
+</div>
+</div>
+<a id="a6e6916baaf0a7ae0079424ce0565c8b4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6e6916baaf0a7ae0079424ce0565c8b4">&#9670;&nbsp;</a></span>svec_mult_float8arr()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">svec svec_mult_float8arr </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[]&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Multiplies an SVEC and an array, element by element. </p>
+
+</div>
+</div>
+<a id="a80d9692f67e7cb482c4bda6dbaacd82b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a80d9692f67e7cb482c4bda6dbaacd82b">&#9670;&nbsp;</a></span>svec_ne()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">boolean svec_ne </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Returns true if two SVECs are not equal. If the two SVECs are of different size, then will return true. </p>
+
+</div>
+</div>
+<a id="a3db4af36acd318030ae57d2bfd19387a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3db4af36acd318030ae57d2bfd19387a">&#9670;&nbsp;</a></span>svec_out()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">cstring svec_out </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Converts SVEC to CSTRING. </p>
+
+</div>
+</div>
+<a id="a612d8920c61e6fdf18dd4e3e9c69c979"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a612d8920c61e6fdf18dd4e3e9c69c979">&#9670;&nbsp;</a></span>svec_plus()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">svec svec_plus </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Adds two SVECs together, element by element. </p>
+
+</div>
+</div>
+<a id="aaeb54c952836c83c7f21a1c62a77955f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aaeb54c952836c83c7f21a1c62a77955f">&#9670;&nbsp;</a></span>svec_plus_float8arr()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">svec svec_plus_float8arr </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[]&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Adds an SVEC and an array, element by element. </p>
+
+</div>
+</div>
+<a id="ab5166565f3482768db33ee677acc3d96"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab5166565f3482768db33ee677acc3d96">&#9670;&nbsp;</a></span>svec_pow()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">svec svec_pow </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Raises each element of the first SVEC to the power given by second SVEC, which must have dimension 1 (a scalar). </p>
+
+</div>
+</div>
+<a id="a585ea8bcb1d0647ef1295187b87405b2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a585ea8bcb1d0647ef1295187b87405b2">&#9670;&nbsp;</a></span>svec_recv()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">svec svec_recv </td>
+          <td>(</td>
+          <td class="paramtype">internal&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Converts SVEC internal representation to SVEC. </p>
+
+</div>
+</div>
+<a id="a7decda276d7ff1e9340dd44e0e7419c0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7decda276d7ff1e9340dd44e0e7419c0">&#9670;&nbsp;</a></span>svec_return_array()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] svec_return_array </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Casts an SVEC into a float8 array. </p>
+
+</div>
+</div>
+<a id="a617557435170136b2781070c0a268b83"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a617557435170136b2781070c0a268b83">&#9670;&nbsp;</a></span>svec_send()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea svec_send </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Converts SVEC to BYTEA. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_704eb8350b43e1ca74c0f90ed1ba450e.html">methods</a></li><li class="navelem"><a class="el" href="dir_87d2e9694998410c1b0408bb775833a4.html">svec</a></li><li class="navelem"><a class="el" href="dir_1960c8c5a7f1e7616d29e5a0c180bcf2.html">src</a></li><li class="navelem"><a class="el" href="dir_16b90e9a6c080d7fc2617cfecd7f223b.html">pg_gp</a></li><li class="navelem"><a class="el" href="svec_8sql__in.html">svec.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:57 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/svec__util_8sql__in.html b/docs/rc/svec__util_8sql__in.html
new file mode 100644
index 0000000..5c8f8c5
--- /dev/null
+++ b/docs/rc/svec__util_8sql__in.html
@@ -0,0 +1,1365 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: svec_util.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('svec__util_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">svec_util.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>SQL utility functions for sparse vector data type <code>svec</code>  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a1f3669297bdf0fec501894d0652ec848"><td class="memItemLeft" align="right" valign="top">svec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec__util_8sql__in.html#a1f3669297bdf0fec501894d0652ec848">__gen_svec</a> (bigint[], float8[], bigint)</td></tr>
+<tr class="separator:a1f3669297bdf0fec501894d0652ec848"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6136c83e9c419d783d1ec6db061f8d6e"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec__util_8sql__in.html#a6136c83e9c419d783d1ec6db061f8d6e">gen_doc_svecs</a> (text output_tbl, text dictionary_tbl, text dict_id_col, text dict_term_col, text documents_tbl, text doc_id_col, text doc_term_col, text doc_term_info_col)</td></tr>
+<tr class="separator:a6136c83e9c419d783d1ec6db061f8d6e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0c8cd9f0be54a6e739f9ec0bdcbe2d8d"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec__util_8sql__in.html#a0c8cd9f0be54a6e739f9ec0bdcbe2d8d">gen_doc_svecs</a> ()</td></tr>
+<tr class="separator:a0c8cd9f0be54a6e739f9ec0bdcbe2d8d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad1011a13839994adbb1eb3e643c9074d"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec__util_8sql__in.html#ad1011a13839994adbb1eb3e643c9074d">svec_dmin</a> (float8, float8)</td></tr>
+<tr class="separator:ad1011a13839994adbb1eb3e643c9074d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa05abd8cb32253c07c0f2224861256a5"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec__util_8sql__in.html#aa05abd8cb32253c07c0f2224861256a5">svec_dmax</a> (float8, float8)</td></tr>
+<tr class="separator:aa05abd8cb32253c07c0f2224861256a5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6a21e25d3f50053c888a0bd126f831f0"><td class="memItemLeft" align="right" valign="top">svec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec__util_8sql__in.html#a6a21e25d3f50053c888a0bd126f831f0">svec_count</a> (svec, svec)</td></tr>
+<tr class="separator:a6a21e25d3f50053c888a0bd126f831f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aab641f9db3deed5bbfa7e050c531e9c1"><td class="memItemLeft" align="right" valign="top">svec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec__util_8sql__in.html#aab641f9db3deed5bbfa7e050c531e9c1">svec_log</a> (svec)</td></tr>
+<tr class="memdesc:aab641f9db3deed5bbfa7e050c531e9c1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes the logarithm of each element of the input SVEC.  <a href="#aab641f9db3deed5bbfa7e050c531e9c1">More...</a><br /></td></tr>
+<tr class="separator:aab641f9db3deed5bbfa7e050c531e9c1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab3a1cccd709379973f100e5eb35559d2"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec__util_8sql__in.html#ab3a1cccd709379973f100e5eb35559d2">svec_eq_non_zero</a> (svec, svec)</td></tr>
+<tr class="separator:ab3a1cccd709379973f100e5eb35559d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afdef1c6bf65ffc0e838cf10f33ae5557"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec__util_8sql__in.html#afdef1c6bf65ffc0e838cf10f33ae5557">svec_contains</a> (svec, svec)</td></tr>
+<tr class="separator:afdef1c6bf65ffc0e838cf10f33ae5557"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a475f0f3e4602e8278b582e099fce2487"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec__util_8sql__in.html#a475f0f3e4602e8278b582e099fce2487">svec_l2norm</a> (svec)</td></tr>
+<tr class="separator:a475f0f3e4602e8278b582e099fce2487"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a536fbd3c596af5ea8ddfa2a3ca3e141c"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec__util_8sql__in.html#a536fbd3c596af5ea8ddfa2a3ca3e141c">svec_l2norm</a> (float8[])</td></tr>
+<tr class="separator:a536fbd3c596af5ea8ddfa2a3ca3e141c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1b6bb42a5176b020aed12734df23aca9"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec__util_8sql__in.html#a1b6bb42a5176b020aed12734df23aca9">l2norm</a> (svec, svec)</td></tr>
+<tr class="separator:a1b6bb42a5176b020aed12734df23aca9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9e9b64c93b29c19adfb670f0171f14bf"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec__util_8sql__in.html#a9e9b64c93b29c19adfb670f0171f14bf">l1norm</a> (svec, svec)</td></tr>
+<tr class="separator:a9e9b64c93b29c19adfb670f0171f14bf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae60f7aaa5710c765d08b6c3906e0c9f0"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec__util_8sql__in.html#ae60f7aaa5710c765d08b6c3906e0c9f0">svec_l1norm</a> (svec)</td></tr>
+<tr class="separator:ae60f7aaa5710c765d08b6c3906e0c9f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae5ac6f098519439b76e03091022c9508"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec__util_8sql__in.html#ae5ac6f098519439b76e03091022c9508">svec_l1norm</a> (float8[])</td></tr>
+<tr class="separator:ae5ac6f098519439b76e03091022c9508"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7e395ee71f6cf05afa76d89a72d45bec"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec__util_8sql__in.html#a7e395ee71f6cf05afa76d89a72d45bec">angle</a> (svec, svec)</td></tr>
+<tr class="separator:a7e395ee71f6cf05afa76d89a72d45bec"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a98222e58bc519865a26643a61611b717"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec__util_8sql__in.html#a98222e58bc519865a26643a61611b717">tanimoto_distance</a> (svec, svec)</td></tr>
+<tr class="separator:a98222e58bc519865a26643a61611b717"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a87b45a983da4066fa7f35b17ccecf699"><td class="memItemLeft" align="right" valign="top">set&lt; float8 &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec__util_8sql__in.html#a87b45a983da4066fa7f35b17ccecf699">svec_unnest</a> (svec)</td></tr>
+<tr class="separator:a87b45a983da4066fa7f35b17ccecf699"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a929bde3bc91b67300d9d370b6a1495f1"><td class="memItemLeft" align="right" valign="top">svec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec__util_8sql__in.html#a929bde3bc91b67300d9d370b6a1495f1">svec_pivot</a> (svec, float8)</td></tr>
+<tr class="separator:a929bde3bc91b67300d9d370b6a1495f1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a00a7b3260b9fde9b55061e6bf58a028a"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec__util_8sql__in.html#a00a7b3260b9fde9b55061e6bf58a028a">svec_elsum</a> (svec)</td></tr>
+<tr class="separator:a00a7b3260b9fde9b55061e6bf58a028a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afb2076f09f00e512a62c06d4d33e5922"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec__util_8sql__in.html#afb2076f09f00e512a62c06d4d33e5922">svec_elsum</a> (float8[])</td></tr>
+<tr class="separator:afb2076f09f00e512a62c06d4d33e5922"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2284a118fe03465203ecea8c34acefa5"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec__util_8sql__in.html#a2284a118fe03465203ecea8c34acefa5">svec_median</a> (float8[])</td></tr>
+<tr class="separator:a2284a118fe03465203ecea8c34acefa5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af9950e9ce4770738f2ce368d8124f142"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec__util_8sql__in.html#af9950e9ce4770738f2ce368d8124f142">svec_median</a> (svec)</td></tr>
+<tr class="separator:af9950e9ce4770738f2ce368d8124f142"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5bc053a080fb38601ad91045dc3ffe74"><td class="memItemLeft" align="right" valign="top">int8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec__util_8sql__in.html#a5bc053a080fb38601ad91045dc3ffe74">svec_nonbase_positions</a> (svec, float8)</td></tr>
+<tr class="separator:a5bc053a080fb38601ad91045dc3ffe74"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a076dcbc0a278bb3b5161b0db2ad8fa44"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec__util_8sql__in.html#a076dcbc0a278bb3b5161b0db2ad8fa44">svec_nonbase_values</a> (svec, float8)</td></tr>
+<tr class="separator:a076dcbc0a278bb3b5161b0db2ad8fa44"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab8d1acbe4e8551755fef217b506bed8a"><td class="memItemLeft" align="right" valign="top">integer&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec__util_8sql__in.html#ab8d1acbe4e8551755fef217b506bed8a">svec_dimension</a> (svec)</td></tr>
+<tr class="separator:ab8d1acbe4e8551755fef217b506bed8a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0d94c44dde95a00e3d802dee6d7c01eb"><td class="memItemLeft" align="right" valign="top">svec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec__util_8sql__in.html#a0d94c44dde95a00e3d802dee6d7c01eb">svec_lapply</a> (text, svec)</td></tr>
+<tr class="separator:a0d94c44dde95a00e3d802dee6d7c01eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3950b17b103ceeddca520a0f0d097ddc"><td class="memItemLeft" align="right" valign="top">svec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec__util_8sql__in.html#a3950b17b103ceeddca520a0f0d097ddc">svec_append</a> (svec, float8, int8)</td></tr>
+<tr class="separator:a3950b17b103ceeddca520a0f0d097ddc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8787222aec691f94d9808d1369aa401c"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec__util_8sql__in.html#a8787222aec691f94d9808d1369aa401c">svec_proj</a> (svec, int4)</td></tr>
+<tr class="separator:a8787222aec691f94d9808d1369aa401c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5cb3446de5fc117befe88ccb1ebb0e4e"><td class="memItemLeft" align="right" valign="top">svec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec__util_8sql__in.html#a5cb3446de5fc117befe88ccb1ebb0e4e">svec_subvec</a> (svec, int4, int4)</td></tr>
+<tr class="separator:a5cb3446de5fc117befe88ccb1ebb0e4e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4a221435ca91b6fa45114e689ee96010"><td class="memItemLeft" align="right" valign="top">svec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec__util_8sql__in.html#a4a221435ca91b6fa45114e689ee96010">svec_reverse</a> (svec)</td></tr>
+<tr class="separator:a4a221435ca91b6fa45114e689ee96010"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a59407764a1cbf1937da39cf39a2f447c"><td class="memItemLeft" align="right" valign="top">svec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec__util_8sql__in.html#a59407764a1cbf1937da39cf39a2f447c">svec_change</a> (svec, int4, svec)</td></tr>
+<tr class="separator:a59407764a1cbf1937da39cf39a2f447c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0bfa8f8d083282bc9e8caf6f03bb5251"><td class="memItemLeft" align="right" valign="top">int4&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec__util_8sql__in.html#a0bfa8f8d083282bc9e8caf6f03bb5251">svec_hash</a> (svec)</td></tr>
+<tr class="separator:a0bfa8f8d083282bc9e8caf6f03bb5251"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a375acd521ed9cb05f63b3696dcc10bf4"><td class="memItemLeft" align="right" valign="top">svec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec__util_8sql__in.html#a375acd521ed9cb05f63b3696dcc10bf4">svec_sfv</a> (text[], text[])</td></tr>
+<tr class="separator:a375acd521ed9cb05f63b3696dcc10bf4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a91c23a7ce58932f48f5ab3579ea0309e"><td class="memItemLeft" align="right" valign="top">text []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec__util_8sql__in.html#a91c23a7ce58932f48f5ab3579ea0309e">svec_sort</a> (text[])</td></tr>
+<tr class="separator:a91c23a7ce58932f48f5ab3579ea0309e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1de746ebd23530e72ba4f031ac41d155"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec__util_8sql__in.html#a1de746ebd23530e72ba4f031ac41d155">svec_to_string</a> (svec)</td></tr>
+<tr class="separator:a1de746ebd23530e72ba4f031ac41d155"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1f5e8911574cf30cc979478040bd3262"><td class="memItemLeft" align="right" valign="top">svec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec__util_8sql__in.html#a1f5e8911574cf30cc979478040bd3262">svec_from_string</a> (text)</td></tr>
+<tr class="separator:a1f5e8911574cf30cc979478040bd3262"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afcf2f75cd00ab0ba269caf79dcfcc62c"><td class="memItemLeft" align="right" valign="top">float []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec__util_8sql__in.html#afcf2f75cd00ab0ba269caf79dcfcc62c">svec_mean_transition</a> (float[], svec)</td></tr>
+<tr class="separator:afcf2f75cd00ab0ba269caf79dcfcc62c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab161647a1498c85762779966790eab71"><td class="memItemLeft" align="right" valign="top">float []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec__util_8sql__in.html#ab161647a1498c85762779966790eab71">svec_mean_prefunc</a> (float[], float[])</td></tr>
+<tr class="separator:ab161647a1498c85762779966790eab71"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac3fc45511b50b5d054bf7bbeb952b98d"><td class="memItemLeft" align="right" valign="top">svec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec__util_8sql__in.html#ac3fc45511b50b5d054bf7bbeb952b98d">svec_mean_final</a> (float[])</td></tr>
+<tr class="separator:ac3fc45511b50b5d054bf7bbeb952b98d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a546b947319c9f48237120a31929bdfd9"><td class="memItemLeft" align="right" valign="top">aggregate float []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec__util_8sql__in.html#a546b947319c9f48237120a31929bdfd9">mean</a> (svec)</td></tr>
+<tr class="separator:a546b947319c9f48237120a31929bdfd9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af1ce6cdd7244ac0832d15c65b7ccc782"><td class="memItemLeft" align="right" valign="top">aggregate svec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec__util_8sql__in.html#af1ce6cdd7244ac0832d15c65b7ccc782">svec_sum</a> (svec)</td></tr>
+<tr class="separator:af1ce6cdd7244ac0832d15c65b7ccc782"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abebdcbe45de346aff874db008e842e65"><td class="memItemLeft" align="right" valign="top">aggregate svec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec__util_8sql__in.html#abebdcbe45de346aff874db008e842e65">svec_count_nonzero</a> (svec)</td></tr>
+<tr class="separator:abebdcbe45de346aff874db008e842e65"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a93400e39ecce2f11b9ceb08403420a43"><td class="memItemLeft" align="right" valign="top">aggregate svec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec__util_8sql__in.html#a93400e39ecce2f11b9ceb08403420a43">svec_median_inmemory</a> (float8)</td></tr>
+<tr class="separator:a93400e39ecce2f11b9ceb08403420a43"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aace16abea7c63f136520fde6c28f1f28"><td class="memItemLeft" align="right" valign="top">svec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svec__util_8sql__in.html#aace16abea7c63f136520fde6c28f1f28">normalize</a> (svec)</td></tr>
+<tr class="separator:aace16abea7c63f136520fde6c28f1f28"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><dl class="section see"><dt>See also</dt><dd>For an introduction to the sparse vector implementation, see the module description <a class="el" href="group__grp__svec.html">Sparse Vectors</a>. </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="a1f3669297bdf0fec501894d0652ec848"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1f3669297bdf0fec501894d0652ec848">&#9670;&nbsp;</a></span>__gen_svec()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">svec __gen_svec </td>
+          <td>(</td>
+          <td class="paramtype">bigint&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bigint&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Creates sparse vector representation given an array of indexes, respective values and size of the required vector. The function just does the bucket filling with the values at the respective indexes for the vector given the length. </p>
+
+</div>
+</div>
+<a id="a7e395ee71f6cf05afa76d89a72d45bec"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7e395ee71f6cf05afa76d89a72d45bec">&#9670;&nbsp;</a></span>angle()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 angle </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Computes the angle between two SVECs in radians. </p>
+
+</div>
+</div>
+<a id="a6136c83e9c419d783d1ec6db061f8d6e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6136c83e9c419d783d1ec6db061f8d6e">&#9670;&nbsp;</a></span>gen_doc_svecs() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text gen_doc_svecs </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_tbl</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dictionary_tbl</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dict_id_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dict_term_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>documents_tbl</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>doc_id_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>doc_term_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>doc_term_info_col</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Creates the output table containing the sparse vector representation for the documents given the dictionary table, documents tables and names of the respective columns. </p>
+
+</div>
+</div>
+<a id="a0c8cd9f0be54a6e739f9ec0bdcbe2d8d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0c8cd9f0be54a6e739f9ec0bdcbe2d8d">&#9670;&nbsp;</a></span>gen_doc_svecs() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text gen_doc_svecs </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Helper function for madlib.gen_doc_svec UDF. </p>
+
+</div>
+</div>
+<a id="a9e9b64c93b29c19adfb670f0171f14bf"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9e9b64c93b29c19adfb670f0171f14bf">&#9670;&nbsp;</a></span>l1norm()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 l1norm </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Computes the l1norm distance between two SVECs. </p>
+
+</div>
+</div>
+<a id="a1b6bb42a5176b020aed12734df23aca9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1b6bb42a5176b020aed12734df23aca9">&#9670;&nbsp;</a></span>l2norm()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 l2norm </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Computes the l2norm distance between two SVECs. </p>
+
+</div>
+</div>
+<a id="a546b947319c9f48237120a31929bdfd9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a546b947319c9f48237120a31929bdfd9">&#9670;&nbsp;</a></span>mean()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float [] mean </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Aggregate that computes the element-wise mean of a list of vectors. </p>
+
+</div>
+</div>
+<a id="aace16abea7c63f136520fde6c28f1f28"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aace16abea7c63f136520fde6c28f1f28">&#9670;&nbsp;</a></span>normalize()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">svec normalize </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Normalizes an SVEC that is divides all elements by its norm/magnitude. </p>
+
+</div>
+</div>
+<a id="a3950b17b103ceeddca520a0f0d097ddc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3950b17b103ceeddca520a0f0d097ddc">&#9670;&nbsp;</a></span>svec_append()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">svec svec_append </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int8&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Appends a run-length block to the back of an SVEC. </p>
+
+</div>
+</div>
+<a id="a59407764a1cbf1937da39cf39a2f447c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a59407764a1cbf1937da39cf39a2f447c">&#9670;&nbsp;</a></span>svec_change()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">svec svec_change </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Replaces the subvector of a given SVEC at a given start index with another SVEC. Note that element index should start at 1. </p>
+
+</div>
+</div>
+<a id="afdef1c6bf65ffc0e838cf10f33ae5557"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afdef1c6bf65ffc0e838cf10f33ae5557">&#9670;&nbsp;</a></span>svec_contains()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">boolean svec_contains </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Returns true if left svec contains right one, meaning that every non-zero value in the right svec equals left one </p>
+
+</div>
+</div>
+<a id="a6a21e25d3f50053c888a0bd126f831f0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6a21e25d3f50053c888a0bd126f831f0">&#9670;&nbsp;</a></span>svec_count()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">svec svec_count </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Counts the number of non-zero entries in the input vector; the second argument is capped at 1, then added to the first; used as the sfunc in the <a class="el" href="svec__util_8sql__in.html#abebdcbe45de346aff874db008e842e65">svec_count_nonzero()</a> aggregate below. </p>
+
+</div>
+</div>
+<a id="abebdcbe45de346aff874db008e842e65"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abebdcbe45de346aff874db008e842e65">&#9670;&nbsp;</a></span>svec_count_nonzero()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate svec svec_count_nonzero </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Aggregate that provides a tally of nonzero entries in a list of vectors. </p>
+
+</div>
+</div>
+<a id="ab8d1acbe4e8551755fef217b506bed8a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab8d1acbe4e8551755fef217b506bed8a">&#9670;&nbsp;</a></span>svec_dimension()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">integer svec_dimension </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Returns the dimension of an SVEC. </p>
+
+</div>
+</div>
+<a id="aa05abd8cb32253c07c0f2224861256a5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa05abd8cb32253c07c0f2224861256a5">&#9670;&nbsp;</a></span>svec_dmax()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 svec_dmax </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Basic floating point scalar operator: MAX. </p>
+
+</div>
+</div>
+<a id="ad1011a13839994adbb1eb3e643c9074d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad1011a13839994adbb1eb3e643c9074d">&#9670;&nbsp;</a></span>svec_dmin()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 svec_dmin </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Basic floating point scalar operator: MIN. </p>
+
+</div>
+</div>
+<a id="a00a7b3260b9fde9b55061e6bf58a028a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a00a7b3260b9fde9b55061e6bf58a028a">&#9670;&nbsp;</a></span>svec_elsum() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 svec_elsum </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Sums the elements of an SVEC. </p>
+
+</div>
+</div>
+<a id="afb2076f09f00e512a62c06d4d33e5922"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afb2076f09f00e512a62c06d4d33e5922">&#9670;&nbsp;</a></span>svec_elsum() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 svec_elsum </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[]</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Sums the elements of a float8 array. </p>
+
+</div>
+</div>
+<a id="ab3a1cccd709379973f100e5eb35559d2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab3a1cccd709379973f100e5eb35559d2">&#9670;&nbsp;</a></span>svec_eq_non_zero()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">boolean svec_eq_non_zero </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Returns true if two SVECs are equal, not counting zeros (zero equals anything). If the two SVECs are of different size, then the function essentially zero-pads the shorter one and performs the comparison. </p>
+
+</div>
+</div>
+<a id="a1f5e8911574cf30cc979478040bd3262"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1f5e8911574cf30cc979478040bd3262">&#9670;&nbsp;</a></span>svec_from_string()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">svec svec_from_string </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Converts a text string to an svec </p>
+
+</div>
+</div>
+<a id="a0bfa8f8d083282bc9e8caf6f03bb5251"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0bfa8f8d083282bc9e8caf6f03bb5251">&#9670;&nbsp;</a></span>svec_hash()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int4 svec_hash </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Computes the hash of an SVEC. </p>
+
+</div>
+</div>
+<a id="ae60f7aaa5710c765d08b6c3906e0c9f0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae60f7aaa5710c765d08b6c3906e0c9f0">&#9670;&nbsp;</a></span>svec_l1norm() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 svec_l1norm </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Computes the l1norm of an SVEC. </p>
+
+</div>
+</div>
+<a id="ae5ac6f098519439b76e03091022c9508"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae5ac6f098519439b76e03091022c9508">&#9670;&nbsp;</a></span>svec_l1norm() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 svec_l1norm </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[]</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Computes the l1norm of a float8 array. </p>
+
+</div>
+</div>
+<a id="a475f0f3e4602e8278b582e099fce2487"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a475f0f3e4602e8278b582e099fce2487">&#9670;&nbsp;</a></span>svec_l2norm() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 svec_l2norm </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Computes the l2norm of an SVEC. </p>
+
+</div>
+</div>
+<a id="a536fbd3c596af5ea8ddfa2a3ca3e141c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a536fbd3c596af5ea8ddfa2a3ca3e141c">&#9670;&nbsp;</a></span>svec_l2norm() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 svec_l2norm </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[]</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Computes the l2norm of a float8 array. </p>
+
+</div>
+</div>
+<a id="a0d94c44dde95a00e3d802dee6d7c01eb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0d94c44dde95a00e3d802dee6d7c01eb">&#9670;&nbsp;</a></span>svec_lapply()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">svec svec_lapply </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Applies a given function to each element of an SVEC. </p>
+
+</div>
+</div>
+<a id="aab641f9db3deed5bbfa7e050c531e9c1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aab641f9db3deed5bbfa7e050c531e9c1">&#9670;&nbsp;</a></span>svec_log()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">svec svec_log </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac3fc45511b50b5d054bf7bbeb952b98d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac3fc45511b50b5d054bf7bbeb952b98d">&#9670;&nbsp;</a></span>svec_mean_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">svec svec_mean_final </td>
+          <td>(</td>
+          <td class="paramtype">float&#160;</td>
+          <td class="paramname">[]</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Final function for <a class="el" href="svec__util_8sql__in.html#a546b947319c9f48237120a31929bdfd9">mean(svec)</a> aggregate </p>
+
+</div>
+</div>
+<a id="ab161647a1498c85762779966790eab71"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab161647a1498c85762779966790eab71">&#9670;&nbsp;</a></span>svec_mean_prefunc()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float [] svec_mean_prefunc </td>
+          <td>(</td>
+          <td class="paramtype">float&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float&#160;</td>
+          <td class="paramname">[]&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Preliminary merge function for <a class="el" href="svec__util_8sql__in.html#a546b947319c9f48237120a31929bdfd9">mean(svec)</a> aggregate </p>
+
+</div>
+</div>
+<a id="afcf2f75cd00ab0ba269caf79dcfcc62c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afcf2f75cd00ab0ba269caf79dcfcc62c">&#9670;&nbsp;</a></span>svec_mean_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float [] svec_mean_transition </td>
+          <td>(</td>
+          <td class="paramtype">float&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Transition function for <a class="el" href="svec__util_8sql__in.html#a546b947319c9f48237120a31929bdfd9">mean(svec)</a> aggregate </p>
+
+</div>
+</div>
+<a id="a2284a118fe03465203ecea8c34acefa5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2284a118fe03465203ecea8c34acefa5">&#9670;&nbsp;</a></span>svec_median() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 svec_median </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[]</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Computes the median element of a float8 array. </p>
+
+</div>
+</div>
+<a id="af9950e9ce4770738f2ce368d8124f142"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af9950e9ce4770738f2ce368d8124f142">&#9670;&nbsp;</a></span>svec_median() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 svec_median </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Computes the median element of an SVEC. </p>
+
+</div>
+</div>
+<a id="a93400e39ecce2f11b9ceb08403420a43"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a93400e39ecce2f11b9ceb08403420a43">&#9670;&nbsp;</a></span>svec_median_inmemory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate svec svec_median_inmemory </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Aggregate that turns a list of float8 values into an SVEC.Aggregate that computes the median element of a list of float8 values. </p>
+
+</div>
+</div>
+<a id="a5bc053a080fb38601ad91045dc3ffe74"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5bc053a080fb38601ad91045dc3ffe74">&#9670;&nbsp;</a></span>svec_nonbase_positions()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int8 [] svec_nonbase_positions </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Compares an SVEC to a float8, and returns positions of all elements not equal to the float as an array. Element index here starts at 0. </p>
+
+</div>
+</div>
+<a id="a076dcbc0a278bb3b5161b0db2ad8fa44"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a076dcbc0a278bb3b5161b0db2ad8fa44">&#9670;&nbsp;</a></span>svec_nonbase_values()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] svec_nonbase_values </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Compares an SVEC to a float8, and returns values of all elements not equal to the float as an array. </p>
+
+</div>
+</div>
+<a id="a929bde3bc91b67300d9d370b6a1495f1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a929bde3bc91b67300d9d370b6a1495f1">&#9670;&nbsp;</a></span>svec_pivot()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">svec svec_pivot </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Appends an element to the back of an SVEC. </p>
+
+</div>
+</div>
+<a id="a8787222aec691f94d9808d1369aa401c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8787222aec691f94d9808d1369aa401c">&#9670;&nbsp;</a></span>svec_proj()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 svec_proj </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Projects onto an element of an SVEC. </p>
+
+</div>
+</div>
+<a id="a4a221435ca91b6fa45114e689ee96010"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4a221435ca91b6fa45114e689ee96010">&#9670;&nbsp;</a></span>svec_reverse()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">svec svec_reverse </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Reverses the elements of an SVEC. </p>
+
+</div>
+</div>
+<a id="a375acd521ed9cb05f63b3696dcc10bf4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a375acd521ed9cb05f63b3696dcc10bf4">&#9670;&nbsp;</a></span>svec_sfv()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">svec svec_sfv </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname">[]&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Computes the word-occurence vector of a document </p>
+
+</div>
+</div>
+<a id="a91c23a7ce58932f48f5ab3579ea0309e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a91c23a7ce58932f48f5ab3579ea0309e">&#9670;&nbsp;</a></span>svec_sort()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text [] svec_sort </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname">[]</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Sorts an array of texts. This function should be in MADlib common. </p>
+
+</div>
+</div>
+<a id="a5cb3446de5fc117befe88ccb1ebb0e4e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5cb3446de5fc117befe88ccb1ebb0e4e">&#9670;&nbsp;</a></span>svec_subvec()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">svec svec_subvec </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int4&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Extracts a subvector of an SVEC given the subvector's start and end indices. </p>
+
+</div>
+</div>
+<a id="af1ce6cdd7244ac0832d15c65b7ccc782"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af1ce6cdd7244ac0832d15c65b7ccc782">&#9670;&nbsp;</a></span>svec_sum()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate svec svec_sum </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Aggregate that provides the element-wise sum of a list of vectors. </p>
+
+</div>
+</div>
+<a id="a1de746ebd23530e72ba4f031ac41d155"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1de746ebd23530e72ba4f031ac41d155">&#9670;&nbsp;</a></span>svec_to_string()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text svec_to_string </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Converts an svec to a text string </p>
+
+</div>
+</div>
+<a id="a87b45a983da4066fa7f35b17ccecf699"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a87b45a983da4066fa7f35b17ccecf699">&#9670;&nbsp;</a></span>svec_unnest()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">set&lt;float8&gt; svec_unnest </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Unnests an SVEC into a table of uncompressed values </p>
+
+</div>
+</div>
+<a id="a98222e58bc519865a26643a61611b717"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a98222e58bc519865a26643a61611b717">&#9670;&nbsp;</a></span>tanimoto_distance()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 tanimoto_distance </td>
+          <td>(</td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">svec&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Computes the Tanimoto distance between two SVECs. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_704eb8350b43e1ca74c0f90ed1ba450e.html">methods</a></li><li class="navelem"><a class="el" href="dir_097d0c47873b413f914e0be0fb8e0c70.html">svec_util</a></li><li class="navelem"><a class="el" href="dir_4f54709f5fc5d0f64da91428555e2469.html">src</a></li><li class="navelem"><a class="el" href="dir_2e2767a73e2d710192c730fd426a8c90.html">pg_gp</a></li><li class="navelem"><a class="el" href="svec__util_8sql__in.html">svec_util.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:57 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/svm_8sql__in.html b/docs/rc/svm_8sql__in.html
new file mode 100644
index 0000000..0601bf4
--- /dev/null
+++ b/docs/rc/svm_8sql__in.html
@@ -0,0 +1,1616 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: svm.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('svm_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">svm.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>SQL functions for SVM (Poisson)  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a5e01d222a48efa864e94023cdad2cd0d"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svm_8sql__in.html#a5e01d222a48efa864e94023cdad2cd0d">linear_svm_igd_transition</a> (float8[] state, float8[] ind_var, float8 dep_var, float8[] previous_state, integer dimension, float8 stepsize, float8 reg, boolean is_l2, integer n_tuples, float8 epsilon, boolean is_svc, float8 tuple_weight)</td></tr>
+<tr class="separator:a5e01d222a48efa864e94023cdad2cd0d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a241eea31c78737ecbb5da6639debec3b"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svm_8sql__in.html#a241eea31c78737ecbb5da6639debec3b">linear_svm_igd_merge</a> (float8[] state1, float8[] state2)</td></tr>
+<tr class="separator:a241eea31c78737ecbb5da6639debec3b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a614936d27848149eead4581db57a9236"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svm_8sql__in.html#a614936d27848149eead4581db57a9236">linear_svm_igd_final</a> (float8[] state)</td></tr>
+<tr class="separator:a614936d27848149eead4581db57a9236"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3f2ae27d1c7b0ed79e4acbb55c1a859d"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svm_8sql__in.html#a3f2ae27d1c7b0ed79e4acbb55c1a859d">linear_svm_igd_step</a> (float8[] ind_var, float8 dep_var, float8[] previous_state, integer dimension, float8 stepsize, float8 reg, boolean is_l2, integer n_tuples, float8 epsilon, boolean is_svc, float8 tuple_weight)</td></tr>
+<tr class="separator:a3f2ae27d1c7b0ed79e4acbb55c1a859d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a81b1bdf8278bf77439ac9e101ae2ae7a"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svm_8sql__in.html#a81b1bdf8278bf77439ac9e101ae2ae7a">internal_linear_svm_igd_distance</a> (float8[] state1, float8[] state2)</td></tr>
+<tr class="separator:a81b1bdf8278bf77439ac9e101ae2ae7a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a21dc69a5bcf6e08f6c0d6cb9c4461091"><td class="memItemLeft" align="right" valign="top">linear_svm_result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svm_8sql__in.html#a21dc69a5bcf6e08f6c0d6cb9c4461091">internal_linear_svm_igd_result</a> (float8[] state)</td></tr>
+<tr class="separator:a21dc69a5bcf6e08f6c0d6cb9c4461091"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1bf61091e404ae3eb4a14f034ec96783"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svm_8sql__in.html#a1bf61091e404ae3eb4a14f034ec96783">svm_regression</a> (text source_table, text model_table, text dependent_varname, text independent_varname, text kernel_func, text kernel_params, text grouping_col, text params, bool verbose)</td></tr>
+<tr class="separator:a1bf61091e404ae3eb4a14f034ec96783"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac4bfd11c7673467617815da11331c1d4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svm_8sql__in.html#ac4bfd11c7673467617815da11331c1d4">svm_regression</a> (text source_table, text model_table, text dependent_varname, text independent_varname, text kernel_func, text kernel_params, text grouping_col, text params)</td></tr>
+<tr class="separator:ac4bfd11c7673467617815da11331c1d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abeb319fa8b22a71614acf35cd0ec6ef4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svm_8sql__in.html#abeb319fa8b22a71614acf35cd0ec6ef4">svm_regression</a> (text source_table, text model_table, text dependent_varname, text independent_varname, text kernel_func, text kernel_params, text grouping_col)</td></tr>
+<tr class="separator:abeb319fa8b22a71614acf35cd0ec6ef4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a091894b3be12694418f3ecb7553202cd"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svm_8sql__in.html#a091894b3be12694418f3ecb7553202cd">svm_regression</a> (text source_table, text model_table, text dependent_varname, text independent_varname, text kernel_func, text kernel_params)</td></tr>
+<tr class="separator:a091894b3be12694418f3ecb7553202cd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af6571d3807af4c2de1074cc8ad354d67"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svm_8sql__in.html#af6571d3807af4c2de1074cc8ad354d67">svm_regression</a> (text source_table, text model_table, text dependent_varname, text independent_varname, text kernel_func)</td></tr>
+<tr class="separator:af6571d3807af4c2de1074cc8ad354d67"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9c897d813c28d87556894199901714f4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svm_8sql__in.html#a9c897d813c28d87556894199901714f4">svm_regression</a> (text source_table, text model_table, text dependent_varname, text independent_varname)</td></tr>
+<tr class="separator:a9c897d813c28d87556894199901714f4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8da862a62df18a51dc88eba9c60b5638"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svm_8sql__in.html#a8da862a62df18a51dc88eba9c60b5638">svm_classification</a> (text source_table, text model_table, text dependent_varname, text independent_varname, text kernel_func, text kernel_params, text grouping_col, text params, bool verbose)</td></tr>
+<tr class="separator:a8da862a62df18a51dc88eba9c60b5638"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a135884f3e412fde1bee4126446e9299e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svm_8sql__in.html#a135884f3e412fde1bee4126446e9299e">svm_classification</a> (text source_table, text model_table, text dependent_varname, text independent_varname, text kernel_func, text kernel_params, text grouping_col, text params)</td></tr>
+<tr class="separator:a135884f3e412fde1bee4126446e9299e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab1d29da8dde1eb9da5e9fac967514239"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svm_8sql__in.html#ab1d29da8dde1eb9da5e9fac967514239">svm_classification</a> (text source_table, text model_table, text dependent_varname, text independent_varname, text kernel_func, text kernel_params, text grouping_col)</td></tr>
+<tr class="separator:ab1d29da8dde1eb9da5e9fac967514239"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a82aac4fbefbe918c16eb091e4f8f385f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svm_8sql__in.html#a82aac4fbefbe918c16eb091e4f8f385f">svm_classification</a> (text source_table, text model_table, text dependent_varname, text independent_varname, text kernel_func, text kernel_params)</td></tr>
+<tr class="separator:a82aac4fbefbe918c16eb091e4f8f385f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abe8f5d1c4158bc8c38e2d74192c25a4b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svm_8sql__in.html#abe8f5d1c4158bc8c38e2d74192c25a4b">svm_classification</a> (text source_table, text model_table, text dependent_varname, text independent_varname, text kernel_func)</td></tr>
+<tr class="separator:abe8f5d1c4158bc8c38e2d74192c25a4b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a57cc7e97be2a99498c581a59670e4a25"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svm_8sql__in.html#a57cc7e97be2a99498c581a59670e4a25">svm_classification</a> (text source_table, text model_table, text dependent_varname, text independent_varname)</td></tr>
+<tr class="separator:a57cc7e97be2a99498c581a59670e4a25"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a36f4846dfb1ea586ee5a742523cd6a09"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svm_8sql__in.html#a36f4846dfb1ea586ee5a742523cd6a09">svm_one_class</a> (text source_table, text model_table, text independent_varname, text kernel_func, text kernel_params, text grouping_col, text params, bool verbose)</td></tr>
+<tr class="separator:a36f4846dfb1ea586ee5a742523cd6a09"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5ce23d32a839eafc7097346dbaa05ee5"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svm_8sql__in.html#a5ce23d32a839eafc7097346dbaa05ee5">svm_one_class</a> (text source_table, text model_table, text independent_varname, text kernel_func, text kernel_params, text grouping_col, text params)</td></tr>
+<tr class="separator:a5ce23d32a839eafc7097346dbaa05ee5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adf2b25ab957e0d6f075a8d8db8a1d278"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svm_8sql__in.html#adf2b25ab957e0d6f075a8d8db8a1d278">svm_one_class</a> (text source_table, text model_table, text independent_varname, text kernel_func, text kernel_params, text grouping_col)</td></tr>
+<tr class="separator:adf2b25ab957e0d6f075a8d8db8a1d278"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac2507a4fc1e34e85c7865ceb7227c180"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svm_8sql__in.html#ac2507a4fc1e34e85c7865ceb7227c180">svm_one_class</a> (text source_table, text model_table, text independent_varname, text kernel_func, text kernel_params)</td></tr>
+<tr class="separator:ac2507a4fc1e34e85c7865ceb7227c180"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2eb45ccfefacf4a16054a6791e1acc5c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svm_8sql__in.html#a2eb45ccfefacf4a16054a6791e1acc5c">svm_one_class</a> (text source_table, text model_table, text independent_varname, text kernel_func)</td></tr>
+<tr class="separator:a2eb45ccfefacf4a16054a6791e1acc5c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3d3162c804ea9fd3ba205a7904ee07f7"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svm_8sql__in.html#a3d3162c804ea9fd3ba205a7904ee07f7">svm_one_class</a> (text source_table, text model_table, text independent_varname)</td></tr>
+<tr class="separator:a3d3162c804ea9fd3ba205a7904ee07f7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0a8bc159d9441835dcebd236a0b236fe"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svm_8sql__in.html#a0a8bc159d9441835dcebd236a0b236fe">svm_predict</a> (text model_table, text new_data_table, text id_col_name, text output_table)</td></tr>
+<tr class="memdesc:a0a8bc159d9441835dcebd236a0b236fe"><td class="mdescLeft">&#160;</td><td class="mdescRight">Scores the data points stored in a table using a learned linear support-vector model.  <a href="#a0a8bc159d9441835dcebd236a0b236fe">More...</a><br /></td></tr>
+<tr class="separator:a0a8bc159d9441835dcebd236a0b236fe"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a994c350eaa174f953d093ac94c8936e6"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svm_8sql__in.html#a994c350eaa174f953d093ac94c8936e6">svm_predict</a> (text message)</td></tr>
+<tr class="memdesc:a994c350eaa174f953d093ac94c8936e6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Help function.  <a href="#a994c350eaa174f953d093ac94c8936e6">More...</a><br /></td></tr>
+<tr class="separator:a994c350eaa174f953d093ac94c8936e6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8626e93e474e17cfe2d209170bd4203f"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svm_8sql__in.html#a8626e93e474e17cfe2d209170bd4203f">svm_predict</a> ()</td></tr>
+<tr class="separator:a8626e93e474e17cfe2d209170bd4203f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae840bfcdc6cca8803dda06da8f05eda9"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svm_8sql__in.html#ae840bfcdc6cca8803dda06da8f05eda9">svm_classification</a> (text message)</td></tr>
+<tr class="separator:ae840bfcdc6cca8803dda06da8f05eda9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a69c5c09545536511f6273a9609428697"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svm_8sql__in.html#a69c5c09545536511f6273a9609428697">svm_classification</a> ()</td></tr>
+<tr class="separator:a69c5c09545536511f6273a9609428697"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4f208edc596f2deeb42e5e68bd379e95"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svm_8sql__in.html#a4f208edc596f2deeb42e5e68bd379e95">svm_one_class</a> (text message)</td></tr>
+<tr class="separator:a4f208edc596f2deeb42e5e68bd379e95"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a239b651079546f081bd822dbb7da1f4c"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svm_8sql__in.html#a239b651079546f081bd822dbb7da1f4c">svm_one_class</a> ()</td></tr>
+<tr class="separator:a239b651079546f081bd822dbb7da1f4c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab52895e0f12df350cef58f9708d98afe"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svm_8sql__in.html#ab52895e0f12df350cef58f9708d98afe">svm_regression</a> (text message)</td></tr>
+<tr class="separator:ab52895e0f12df350cef58f9708d98afe"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad7485d9eed1d59d0a52e9036df7cbd9d"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="svm_8sql__in.html#ad7485d9eed1d59d0a52e9036df7cbd9d">svm_regression</a> ()</td></tr>
+<tr class="separator:ad7485d9eed1d59d0a52e9036df7cbd9d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><dl class="section date"><dt>Date</dt><dd>July 2015</dd></dl>
+<dl class="section see"><dt>See also</dt><dd>For a brief introduction to SVM (Poisson), see the module description <a class="el" href="group__grp__svm.html">Support Vector Machines</a>. </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="a81b1bdf8278bf77439ac9e101ae2ae7a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a81b1bdf8278bf77439ac9e101ae2ae7a">&#9670;&nbsp;</a></span>internal_linear_svm_igd_distance()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 internal_linear_svm_igd_distance </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a21dc69a5bcf6e08f6c0d6cb9c4461091"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a21dc69a5bcf6e08f6c0d6cb9c4461091">&#9670;&nbsp;</a></span>internal_linear_svm_igd_result()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">linear_svm_result internal_linear_svm_igd_result </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a614936d27848149eead4581db57a9236"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a614936d27848149eead4581db57a9236">&#9670;&nbsp;</a></span>linear_svm_igd_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] linear_svm_igd_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a241eea31c78737ecbb5da6639debec3b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a241eea31c78737ecbb5da6639debec3b">&#9670;&nbsp;</a></span>linear_svm_igd_merge()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] linear_svm_igd_merge </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a3f2ae27d1c7b0ed79e4acbb55c1a859d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3f2ae27d1c7b0ed79e4acbb55c1a859d">&#9670;&nbsp;</a></span>linear_svm_igd_step()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] linear_svm_igd_step </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>ind_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>dep_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>previous_state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>dimension</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>stepsize</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>reg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>is_l2</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>n_tuples</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>epsilon</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>is_svc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>tuple_weight</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5e01d222a48efa864e94023cdad2cd0d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5e01d222a48efa864e94023cdad2cd0d">&#9670;&nbsp;</a></span>linear_svm_igd_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] linear_svm_igd_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>ind_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>dep_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>previous_state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>dimension</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>stepsize</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>reg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>is_l2</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>n_tuples</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>epsilon</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>is_svc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>tuple_weight</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8da862a62df18a51dc88eba9c60b5638"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8da862a62df18a51dc88eba9c60b5638">&#9670;&nbsp;</a></span>svm_classification() <span class="overload">[1/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void svm_classification </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>kernel_func</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>kernel_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bool&#160;</td>
+          <td class="paramname"><em>verbose</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a135884f3e412fde1bee4126446e9299e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a135884f3e412fde1bee4126446e9299e">&#9670;&nbsp;</a></span>svm_classification() <span class="overload">[2/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void svm_classification </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>kernel_func</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>kernel_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>params</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab1d29da8dde1eb9da5e9fac967514239"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab1d29da8dde1eb9da5e9fac967514239">&#9670;&nbsp;</a></span>svm_classification() <span class="overload">[3/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void svm_classification </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>kernel_func</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>kernel_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_col</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a82aac4fbefbe918c16eb091e4f8f385f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a82aac4fbefbe918c16eb091e4f8f385f">&#9670;&nbsp;</a></span>svm_classification() <span class="overload">[4/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void svm_classification </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>kernel_func</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>kernel_params</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="abe8f5d1c4158bc8c38e2d74192c25a4b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abe8f5d1c4158bc8c38e2d74192c25a4b">&#9670;&nbsp;</a></span>svm_classification() <span class="overload">[5/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void svm_classification </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>kernel_func</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a57cc7e97be2a99498c581a59670e4a25"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a57cc7e97be2a99498c581a59670e4a25">&#9670;&nbsp;</a></span>svm_classification() <span class="overload">[6/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void svm_classification </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>independent_varname</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae840bfcdc6cca8803dda06da8f05eda9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae840bfcdc6cca8803dda06da8f05eda9">&#9670;&nbsp;</a></span>svm_classification() <span class="overload">[7/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text svm_classification </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a69c5c09545536511f6273a9609428697"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a69c5c09545536511f6273a9609428697">&#9670;&nbsp;</a></span>svm_classification() <span class="overload">[8/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text svm_classification </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a36f4846dfb1ea586ee5a742523cd6a09"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a36f4846dfb1ea586ee5a742523cd6a09">&#9670;&nbsp;</a></span>svm_one_class() <span class="overload">[1/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void svm_one_class </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>kernel_func</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>kernel_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bool&#160;</td>
+          <td class="paramname"><em>verbose</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5ce23d32a839eafc7097346dbaa05ee5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5ce23d32a839eafc7097346dbaa05ee5">&#9670;&nbsp;</a></span>svm_one_class() <span class="overload">[2/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void svm_one_class </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>kernel_func</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>kernel_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>params</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="adf2b25ab957e0d6f075a8d8db8a1d278"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adf2b25ab957e0d6f075a8d8db8a1d278">&#9670;&nbsp;</a></span>svm_one_class() <span class="overload">[3/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void svm_one_class </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>kernel_func</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>kernel_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_col</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac2507a4fc1e34e85c7865ceb7227c180"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac2507a4fc1e34e85c7865ceb7227c180">&#9670;&nbsp;</a></span>svm_one_class() <span class="overload">[4/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void svm_one_class </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>kernel_func</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>kernel_params</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a2eb45ccfefacf4a16054a6791e1acc5c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2eb45ccfefacf4a16054a6791e1acc5c">&#9670;&nbsp;</a></span>svm_one_class() <span class="overload">[5/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void svm_one_class </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>kernel_func</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a3d3162c804ea9fd3ba205a7904ee07f7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3d3162c804ea9fd3ba205a7904ee07f7">&#9670;&nbsp;</a></span>svm_one_class() <span class="overload">[6/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void svm_one_class </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>independent_varname</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a4f208edc596f2deeb42e5e68bd379e95"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4f208edc596f2deeb42e5e68bd379e95">&#9670;&nbsp;</a></span>svm_one_class() <span class="overload">[7/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text svm_one_class </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a239b651079546f081bd822dbb7da1f4c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a239b651079546f081bd822dbb7da1f4c">&#9670;&nbsp;</a></span>svm_one_class() <span class="overload">[8/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text svm_one_class </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a0a8bc159d9441835dcebd236a0b236fe"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0a8bc159d9441835dcebd236a0b236fe">&#9670;&nbsp;</a></span>svm_predict() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void svm_predict </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>new_data_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>id_col_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">model_table</td><td>Name of table where the learned model to be used is stored </td></tr>
+    <tr><td class="paramname">new_data_table</td><td>Name of table/view containing the data points to be scored </td></tr>
+    <tr><td class="paramname">id_col</td><td>Name of column in new_data_table containing the integer identifier of data points</td></tr>
+    <tr><td class="paramname">output_table</td><td>Name of table to store the results</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Textual summary of the algorithm run </dd></dl>
+
+</div>
+</div>
+<a id="a994c350eaa174f953d093ac94c8936e6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a994c350eaa174f953d093ac94c8936e6">&#9670;&nbsp;</a></span>svm_predict() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text svm_predict </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8626e93e474e17cfe2d209170bd4203f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8626e93e474e17cfe2d209170bd4203f">&#9670;&nbsp;</a></span>svm_predict() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text svm_predict </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1bf61091e404ae3eb4a14f034ec96783"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1bf61091e404ae3eb4a14f034ec96783">&#9670;&nbsp;</a></span>svm_regression() <span class="overload">[1/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void svm_regression </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>kernel_func</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>kernel_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bool&#160;</td>
+          <td class="paramname"><em>verbose</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac4bfd11c7673467617815da11331c1d4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac4bfd11c7673467617815da11331c1d4">&#9670;&nbsp;</a></span>svm_regression() <span class="overload">[2/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void svm_regression </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>kernel_func</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>kernel_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>params</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="abeb319fa8b22a71614acf35cd0ec6ef4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abeb319fa8b22a71614acf35cd0ec6ef4">&#9670;&nbsp;</a></span>svm_regression() <span class="overload">[3/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void svm_regression </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>kernel_func</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>kernel_params</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_col</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a091894b3be12694418f3ecb7553202cd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a091894b3be12694418f3ecb7553202cd">&#9670;&nbsp;</a></span>svm_regression() <span class="overload">[4/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void svm_regression </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>kernel_func</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>kernel_params</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="af6571d3807af4c2de1074cc8ad354d67"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af6571d3807af4c2de1074cc8ad354d67">&#9670;&nbsp;</a></span>svm_regression() <span class="overload">[5/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void svm_regression </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>independent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>kernel_func</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a9c897d813c28d87556894199901714f4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9c897d813c28d87556894199901714f4">&#9670;&nbsp;</a></span>svm_regression() <span class="overload">[6/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void svm_regression </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>independent_varname</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab52895e0f12df350cef58f9708d98afe"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab52895e0f12df350cef58f9708d98afe">&#9670;&nbsp;</a></span>svm_regression() <span class="overload">[7/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text svm_regression </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ad7485d9eed1d59d0a52e9036df7cbd9d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad7485d9eed1d59d0a52e9036df7cbd9d">&#9670;&nbsp;</a></span>svm_regression() <span class="overload">[8/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text svm_regression </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_5cd13365c66443c54a8f3b4c82c03aee.html">svm</a></li><li class="navelem"><a class="el" href="svm_8sql__in.html">svm.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:57 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/sync_off.png b/docs/rc/sync_off.png
new file mode 100644
index 0000000..3b443fc
--- /dev/null
+++ b/docs/rc/sync_off.png
Binary files differ
diff --git a/docs/rc/sync_on.png b/docs/rc/sync_on.png
new file mode 100644
index 0000000..e08320f
--- /dev/null
+++ b/docs/rc/sync_on.png
Binary files differ
diff --git a/docs/rc/tab_a.png b/docs/rc/tab_a.png
new file mode 100644
index 0000000..3b725c4
--- /dev/null
+++ b/docs/rc/tab_a.png
Binary files differ
diff --git a/docs/rc/tab_b.png b/docs/rc/tab_b.png
new file mode 100644
index 0000000..e2b4a86
--- /dev/null
+++ b/docs/rc/tab_b.png
Binary files differ
diff --git a/docs/rc/tab_h.png b/docs/rc/tab_h.png
new file mode 100644
index 0000000..fd5cb70
--- /dev/null
+++ b/docs/rc/tab_h.png
Binary files differ
diff --git a/docs/rc/tab_s.png b/docs/rc/tab_s.png
new file mode 100644
index 0000000..ab478c9
--- /dev/null
+++ b/docs/rc/tab_s.png
Binary files differ
diff --git a/docs/rc/table__to__pmml_8sql__in.html b/docs/rc/table__to__pmml_8sql__in.html
new file mode 100644
index 0000000..f3cf0bf
--- /dev/null
+++ b/docs/rc/table__to__pmml_8sql__in.html
@@ -0,0 +1,262 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: table_to_pmml.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('table__to__pmml_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">table_to_pmml.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a9635b6989d9f972497b6b4164b77aa0a"><td class="memItemLeft" align="right" valign="top">xml&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="table__to__pmml_8sql__in.html#a9635b6989d9f972497b6b4164b77aa0a">pmml</a> (varchar model_table)</td></tr>
+<tr class="memdesc:a9635b6989d9f972497b6b4164b77aa0a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Given the model constructed from a data mining algorithm, this function converts the model into PMML format.  <a href="#a9635b6989d9f972497b6b4164b77aa0a">More...</a><br /></td></tr>
+<tr class="separator:a9635b6989d9f972497b6b4164b77aa0a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7e2c2a3746b6e2c68f9886ca2b8b7e09"><td class="memItemLeft" align="right" valign="top">xml&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="table__to__pmml_8sql__in.html#a7e2c2a3746b6e2c68f9886ca2b8b7e09">pmml</a> (varchar model_table, varchar name_spec)</td></tr>
+<tr class="memdesc:a7e2c2a3746b6e2c68f9886ca2b8b7e09"><td class="mdescLeft">&#160;</td><td class="mdescRight">Given the model constructed from a data mining algorithm, this function converts the model into PMML format.  <a href="#a7e2c2a3746b6e2c68f9886ca2b8b7e09">More...</a><br /></td></tr>
+<tr class="separator:a7e2c2a3746b6e2c68f9886ca2b8b7e09"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4aa7db5ec62506546dcbe178f6dcf262"><td class="memItemLeft" align="right" valign="top">xml&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="table__to__pmml_8sql__in.html#a4aa7db5ec62506546dcbe178f6dcf262">pmml</a> (varchar model_table, varchar[] name_spec)</td></tr>
+<tr class="memdesc:a4aa7db5ec62506546dcbe178f6dcf262"><td class="mdescLeft">&#160;</td><td class="mdescRight">Given the model constructed from a data mining algorithm, this function converts the model into PMML format.  <a href="#a4aa7db5ec62506546dcbe178f6dcf262">More...</a><br /></td></tr>
+<tr class="separator:a4aa7db5ec62506546dcbe178f6dcf262"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3aa36483b5dd5af46f9b564397822817"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="table__to__pmml_8sql__in.html#a3aa36483b5dd5af46f9b564397822817">pmml</a> ()</td></tr>
+<tr class="separator:a3aa36483b5dd5af46f9b564397822817"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a9635b6989d9f972497b6b4164b77aa0a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9635b6989d9f972497b6b4164b77aa0a">&#9670;&nbsp;</a></span>pmml() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">xml pmml </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model_table</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">model_table</td><td>Model table that contains the output of a training algorithm.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>An XML document corresponding to the PMML of the input model.</dd></dl>
+<p>The names in the Data Dictionary are generated based on the names used in the model table. If the fields are represented as an array of expressions without array concatenation, the names in the Data Dictionary will match the source table, except that a suffix '_pmml_prediction' is added to the predicted variable. If the field is an array of FLOAT8 values, the names in the Data Dictionary will be indexed using the array name, like 'ind[1]', 'ind[2]', etc. In all other cases, the names will simply be 'x[1]', 'x[2]', and so on. </p>
+
+</div>
+</div>
+<a id="a7e2c2a3746b6e2c68f9886ca2b8b7e09"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7e2c2a3746b6e2c68f9886ca2b8b7e09">&#9670;&nbsp;</a></span>pmml() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">xml pmml </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>name_spec</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">model_table</td><td>Model table that contains the output of a training algorithm. </td></tr>
+    <tr><td class="paramname">name_spec</td><td>Names to be used in the Data Dictionary, given as a string containing an expression such as 'y ~ x1 + x2 + x3'.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>An XML document corresponding to the PMML of the input model. </dd></dl>
+
+</div>
+</div>
+<a id="a4aa7db5ec62506546dcbe178f6dcf262"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4aa7db5ec62506546dcbe178f6dcf262">&#9670;&nbsp;</a></span>pmml() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">xml pmml </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>model_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar []&#160;</td>
+          <td class="paramname"><em>name_spec</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">model_table</td><td>Model table that contains the output of a training algorithm. </td></tr>
+    <tr><td class="paramname">name_spec</td><td>Names to be used in the Data Dictionary given as an array of strings, such as ARRAY['y', 'x1', 'x2', ...].</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>An XML document corresponding to the PMML of the input model. </dd></dl>
+
+</div>
+</div>
+<a id="a3aa36483b5dd5af46f9b564397822817"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3aa36483b5dd5af46f9b564397822817">&#9670;&nbsp;</a></span>pmml() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text pmml </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_d06d449079888c21a85aa00b7664e813.html">pmml</a></li><li class="navelem"><a class="el" href="table__to__pmml_8sql__in.html">table_to_pmml.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:57 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/tabs.css b/docs/rc/tabs.css
new file mode 100644
index 0000000..a28614b
--- /dev/null
+++ b/docs/rc/tabs.css
@@ -0,0 +1 @@
+.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#doc-content{overflow:auto;display:block;padding:0;margin:0;-webkit-overflow-scrolling:touch}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0 1px 1px rgba(255,255,255,0.9);color:#283a5d;outline:0}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace!important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283a5d transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;-moz-border-radius:0!important;-webkit-border-radius:0;border-radius:0!important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a:hover span.sub-arrow{border-color:white transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;-moz-border-radius:5px!important;-webkit-border-radius:5px;border-radius:5px!important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0!important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent white}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px!important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}}
\ No newline at end of file
diff --git a/docs/rc/text__utilities_8sql__in.html b/docs/rc/text__utilities_8sql__in.html
new file mode 100644
index 0000000..7f08150
--- /dev/null
+++ b/docs/rc/text__utilities_8sql__in.html
@@ -0,0 +1,233 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: text_utilities.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('text__utilities_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">text_utilities.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>SQL functions for carrying out routine text operations.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a8a2caae5bf0b45eb1b4b6bbc531bce46"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="text__utilities_8sql__in.html#a8a2caae5bf0b45eb1b4b6bbc531bce46">term_frequency</a> (text input_table, text doc_id_col, text word_vec_col, text output_table, boolean compute_vocab)</td></tr>
+<tr class="memdesc:a8a2caae5bf0b45eb1b4b6bbc531bce46"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute the term frequency for each term in a collection of documents.  <a href="#a8a2caae5bf0b45eb1b4b6bbc531bce46">More...</a><br /></td></tr>
+<tr class="separator:a8a2caae5bf0b45eb1b4b6bbc531bce46"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4d1d32672751005a2a0be881cfd823af"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="text__utilities_8sql__in.html#a4d1d32672751005a2a0be881cfd823af">term_frequency</a> (text input_table, text doc_id_col, text word_vec_col, text output_table)</td></tr>
+<tr class="separator:a4d1d32672751005a2a0be881cfd823af"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><dl class="section see"><dt>See also</dt><dd>For a brief overview of utility functions, see the module description <a class="el" href="group__grp__utilities.html">Database Functions</a>. </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="a8a2caae5bf0b45eb1b4b6bbc531bce46"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8a2caae5bf0b45eb1b4b6bbc531bce46">&#9670;&nbsp;</a></span>term_frequency() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text term_frequency </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>input_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>doc_id_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>word_vec_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>compute_vocab</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="section return"><dt>Returns</dt><dd>Names of tables created </dd></dl>
+
+</div>
+</div>
+<a id="a4d1d32672751005a2a0be881cfd823af"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4d1d32672751005a2a0be881cfd823af">&#9670;&nbsp;</a></span>term_frequency() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text term_frequency </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>input_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>doc_id_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>word_vec_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_8d53e1c0026e7e34b4cd68f8b91426d6.html">utilities</a></li><li class="navelem"><a class="el" href="text__utilities_8sql__in.html">text_utilities.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/train__test__split_8sql__in.html b/docs/rc/train__test__split_8sql__in.html
new file mode 100644
index 0000000..261e3a9
--- /dev/null
+++ b/docs/rc/train__test__split_8sql__in.html
@@ -0,0 +1,490 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: train_test_split.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('train__test__split_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">train_test_split.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>SQL functions for test train split.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:aba17253051cd9d1a256b1ee896fc1cd0"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="train__test__split_8sql__in.html#aba17253051cd9d1a256b1ee896fc1cd0">train_test_split</a> (text source_table, text output_table, float8 train_proportion, float8 test_proportion, text grouping_cols, text target_cols, boolean with_replacement, boolean separate_output_tables)</td></tr>
+<tr class="separator:aba17253051cd9d1a256b1ee896fc1cd0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a90c905afa6f2ce6befeceac788d61962"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="train__test__split_8sql__in.html#a90c905afa6f2ce6befeceac788d61962">train_test_split</a> (text source_table, text output_table, float8 train_proportion, float8 test_proportion, text grouping_cols, text target_cols, boolean with_replacement)</td></tr>
+<tr class="separator:a90c905afa6f2ce6befeceac788d61962"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa8e4a179b48d3fff7c6fe09a3fa44067"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="train__test__split_8sql__in.html#aa8e4a179b48d3fff7c6fe09a3fa44067">train_test_split</a> (text source_table, text output_table, float8 train_proportion, float8 test_proportion, text grouping_cols, text target_cols)</td></tr>
+<tr class="separator:aa8e4a179b48d3fff7c6fe09a3fa44067"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a310308ef9f1f03eeef1a2f5bbb5b48c6"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="train__test__split_8sql__in.html#a310308ef9f1f03eeef1a2f5bbb5b48c6">train_test_split</a> (text source_table, text output_table, float8 train_proportion, float8 test_proportion, text grouping_cols)</td></tr>
+<tr class="separator:a310308ef9f1f03eeef1a2f5bbb5b48c6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9eab6a5d1f52dc9d46c9494b725a682a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="train__test__split_8sql__in.html#a9eab6a5d1f52dc9d46c9494b725a682a">train_test_split</a> (text source_table, text output_table, float8 train_proportion, float8 test_proportion)</td></tr>
+<tr class="separator:a9eab6a5d1f52dc9d46c9494b725a682a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6054a02712476003f9012c4dc7c56aa3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="train__test__split_8sql__in.html#a6054a02712476003f9012c4dc7c56aa3">train_test_split</a> (text source_table, text output_table, float8 train_proportion)</td></tr>
+<tr class="separator:a6054a02712476003f9012c4dc7c56aa3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af2bfc579fccaf5fd9133d06ad65e8074"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="train__test__split_8sql__in.html#af2bfc579fccaf5fd9133d06ad65e8074">train_test_split</a> (varchar message)</td></tr>
+<tr class="separator:af2bfc579fccaf5fd9133d06ad65e8074"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa0e8ccf4f4aedb34c9d7d4d0361e6228"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="train__test__split_8sql__in.html#aa0e8ccf4f4aedb34c9d7d4d0361e6228">train_test_split</a> ()</td></tr>
+<tr class="separator:aa0e8ccf4f4aedb34c9d7d4d0361e6228"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>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</p>
+<p><a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a></p>
+<p>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.</p>
+<dl class="section date"><dt>Date</dt><dd>07/19/2017</dd></dl>
+<dl class="section see"><dt>See also</dt><dd>Given a table, test train split returns a proportion of records for each group (strata). </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="aba17253051cd9d1a256b1ee896fc1cd0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aba17253051cd9d1a256b1ee896fc1cd0">&#9670;&nbsp;</a></span>train_test_split() <span class="overload">[1/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void train_test_split </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>train_proportion</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>test_proportion</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>target_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>with_replacement</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>separate_output_tables</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a90c905afa6f2ce6befeceac788d61962"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a90c905afa6f2ce6befeceac788d61962">&#9670;&nbsp;</a></span>train_test_split() <span class="overload">[2/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void train_test_split </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>train_proportion</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>test_proportion</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>target_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>with_replacement</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa8e4a179b48d3fff7c6fe09a3fa44067"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa8e4a179b48d3fff7c6fe09a3fa44067">&#9670;&nbsp;</a></span>train_test_split() <span class="overload">[3/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void train_test_split </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>train_proportion</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>test_proportion</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>target_cols</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a310308ef9f1f03eeef1a2f5bbb5b48c6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a310308ef9f1f03eeef1a2f5bbb5b48c6">&#9670;&nbsp;</a></span>train_test_split() <span class="overload">[4/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void train_test_split </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>train_proportion</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>test_proportion</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a9eab6a5d1f52dc9d46c9494b725a682a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9eab6a5d1f52dc9d46c9494b725a682a">&#9670;&nbsp;</a></span>train_test_split() <span class="overload">[5/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void train_test_split </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>train_proportion</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>test_proportion</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a6054a02712476003f9012c4dc7c56aa3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6054a02712476003f9012c4dc7c56aa3">&#9670;&nbsp;</a></span>train_test_split() <span class="overload">[6/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void train_test_split </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>train_proportion</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="af2bfc579fccaf5fd9133d06ad65e8074"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af2bfc579fccaf5fd9133d06ad65e8074">&#9670;&nbsp;</a></span>train_test_split() <span class="overload">[7/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar train_test_split </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa0e8ccf4f4aedb34c9d7d4d0361e6228"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa0e8ccf4f4aedb34c9d7d4d0361e6228">&#9670;&nbsp;</a></span>train_test_split() <span class="overload">[8/8]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar train_test_split </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_e6c126a997181663ba81c11cbf416bb1.html">sample</a></li><li class="navelem"><a class="el" href="train__test__split_8sql__in.html">train_test_split.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/utilities_8sql__in.html b/docs/rc/utilities_8sql__in.html
new file mode 100644
index 0000000..93fed70
--- /dev/null
+++ b/docs/rc/utilities_8sql__in.html
@@ -0,0 +1,891 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: utilities.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('utilities_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">utilities.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>SQL functions for carrying out routine tasks.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:aab5ea2cd6201e38e24ca62b0fb91fb7a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utilities_8sql__in.html#aab5ea2cd6201e38e24ca62b0fb91fb7a">cleanup_madlib_temp_tables</a> (text target_schema)</td></tr>
+<tr class="memdesc:aab5ea2cd6201e38e24ca62b0fb91fb7a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Drop all tables matching pattern 'madlib_temp' in a given schema.  <a href="#aab5ea2cd6201e38e24ca62b0fb91fb7a">More...</a><br /></td></tr>
+<tr class="separator:aab5ea2cd6201e38e24ca62b0fb91fb7a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a156eb9d1c814592e59600980977a64eb"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utilities_8sql__in.html#a156eb9d1c814592e59600980977a64eb">cleanup_madlib_temp_tables_script</a> (text target_schema)</td></tr>
+<tr class="separator:a156eb9d1c814592e59600980977a64eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0a26602860109f870a82badff95c2fc3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utilities_8sql__in.html#a0a26602860109f870a82badff95c2fc3">cleanup_madlib_temp_views</a> (text target_schema)</td></tr>
+<tr class="separator:a0a26602860109f870a82badff95c2fc3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9ce7ffa76acc8a0638e9bc48be99f36a"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utilities_8sql__in.html#a9ce7ffa76acc8a0638e9bc48be99f36a">version</a> ()</td></tr>
+<tr class="memdesc:a9ce7ffa76acc8a0638e9bc48be99f36a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return MADlib build information.  <a href="#a9ce7ffa76acc8a0638e9bc48be99f36a">More...</a><br /></td></tr>
+<tr class="separator:a9ce7ffa76acc8a0638e9bc48be99f36a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a76cfdbed8a6782f37f50710d855434bd"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utilities_8sql__in.html#a76cfdbed8a6782f37f50710d855434bd">assert</a> (boolean condition, varchar msg)</td></tr>
+<tr class="memdesc:a76cfdbed8a6782f37f50710d855434bd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Raise an exception if the given condition is not satisfied.  <a href="#a76cfdbed8a6782f37f50710d855434bd">More...</a><br /></td></tr>
+<tr class="separator:a76cfdbed8a6782f37f50710d855434bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4d49e00b4dd6059f61ffb9fdc0a696f7"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utilities_8sql__in.html#a4d49e00b4dd6059f61ffb9fdc0a696f7">relative_error</a> (float8 approx, float8 value)</td></tr>
+<tr class="memdesc:a4d49e00b4dd6059f61ffb9fdc0a696f7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute the relative error of an approximate value.  <a href="#a4d49e00b4dd6059f61ffb9fdc0a696f7">More...</a><br /></td></tr>
+<tr class="separator:a4d49e00b4dd6059f61ffb9fdc0a696f7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a26a54368fbf2460323cacf95db76fd2f"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utilities_8sql__in.html#a26a54368fbf2460323cacf95db76fd2f">relative_error</a> (float8[] approx, float8[] value)</td></tr>
+<tr class="memdesc:a26a54368fbf2460323cacf95db76fd2f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute the relative error (w.r.t. the 2-norm) of an apprixmate vector.  <a href="#a26a54368fbf2460323cacf95db76fd2f">More...</a><br /></td></tr>
+<tr class="separator:a26a54368fbf2460323cacf95db76fd2f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa90ffaebb43a5cbcb5c48281cbadd3b0"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utilities_8sql__in.html#aa90ffaebb43a5cbcb5c48281cbadd3b0">check_if_raises_error</a> (text sql)</td></tr>
+<tr class="memdesc:aa90ffaebb43a5cbcb5c48281cbadd3b0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check if a SQL statement raises an error.  <a href="#aa90ffaebb43a5cbcb5c48281cbadd3b0">More...</a><br /></td></tr>
+<tr class="separator:aa90ffaebb43a5cbcb5c48281cbadd3b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac1f509bd94c6309b59eb4d479fb2a470"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utilities_8sql__in.html#ac1f509bd94c6309b59eb4d479fb2a470">check_if_col_exists</a> (text source_table, text column_name)</td></tr>
+<tr class="memdesc:ac1f509bd94c6309b59eb4d479fb2a470"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check if a column exists in a table.  <a href="#ac1f509bd94c6309b59eb4d479fb2a470">More...</a><br /></td></tr>
+<tr class="separator:ac1f509bd94c6309b59eb4d479fb2a470"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a48bed63cab78a5446fa4c122eaae3a40"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utilities_8sql__in.html#a48bed63cab78a5446fa4c122eaae3a40">isnan</a> (float8 number)</td></tr>
+<tr class="memdesc:a48bed63cab78a5446fa4c122eaae3a40"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check if a floating-point number is NaN (not a number)  <a href="#a48bed63cab78a5446fa4c122eaae3a40">More...</a><br /></td></tr>
+<tr class="separator:a48bed63cab78a5446fa4c122eaae3a40"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a56501b6f9fabe65d7a6a6beb70a0e000"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utilities_8sql__in.html#a56501b6f9fabe65d7a6a6beb70a0e000">create_schema_pg_temp</a> ()</td></tr>
+<tr class="memdesc:a56501b6f9fabe65d7a6a6beb70a0e000"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create the temporary schema if it does not exist yet.  <a href="#a56501b6f9fabe65d7a6a6beb70a0e000">More...</a><br /></td></tr>
+<tr class="separator:a56501b6f9fabe65d7a6a6beb70a0e000"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab194d6a1222672c314ea39b78aad8fd0"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utilities_8sql__in.html#ab194d6a1222672c314ea39b78aad8fd0">noop</a> ()</td></tr>
+<tr class="memdesc:ab194d6a1222672c314ea39b78aad8fd0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create volatile noop function.  <a href="#ab194d6a1222672c314ea39b78aad8fd0">More...</a><br /></td></tr>
+<tr class="separator:ab194d6a1222672c314ea39b78aad8fd0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a60c4765ce8dc639cbb0ad4c389f5f1ad"><td class="memItemLeft" align="right" valign="top">bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utilities_8sql__in.html#a60c4765ce8dc639cbb0ad4c389f5f1ad">bytea8in</a> (cstring)</td></tr>
+<tr class="separator:a60c4765ce8dc639cbb0ad4c389f5f1ad"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adff923d42d4bdb2b631d6cafd5f37a43"><td class="memItemLeft" align="right" valign="top">cstring&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utilities_8sql__in.html#adff923d42d4bdb2b631d6cafd5f37a43">bytea8out</a> (bytea8)</td></tr>
+<tr class="separator:adff923d42d4bdb2b631d6cafd5f37a43"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a244a7ff30f2788a6f4816417982eb13b"><td class="memItemLeft" align="right" valign="top">bytea8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utilities_8sql__in.html#a244a7ff30f2788a6f4816417982eb13b">bytea8recv</a> (internal)</td></tr>
+<tr class="separator:a244a7ff30f2788a6f4816417982eb13b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aeb90c740e8e6b67aa60a11c430fa9050"><td class="memItemLeft" align="right" valign="top">bytea&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utilities_8sql__in.html#aeb90c740e8e6b67aa60a11c430fa9050">bytea8send</a> (bytea8)</td></tr>
+<tr class="separator:aeb90c740e8e6b67aa60a11c430fa9050"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7086f5e79c0f53a849759227759d16d7"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utilities_8sql__in.html#a7086f5e79c0f53a849759227759d16d7">__internal_get_col_names_except_dep_variable</a> (varchar source_table, varchar dependent_varname)</td></tr>
+<tr class="memdesc:a7086f5e79c0f53a849759227759d16d7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get all column names except dependent variable.  <a href="#a7086f5e79c0f53a849759227759d16d7">More...</a><br /></td></tr>
+<tr class="separator:a7086f5e79c0f53a849759227759d16d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5b0156044142673183205154f9e63ddc"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utilities_8sql__in.html#a5b0156044142673183205154f9e63ddc">__unique_string</a> ()</td></tr>
+<tr class="memdesc:a5b0156044142673183205154f9e63ddc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Generate random remporary names for temp table and other names.  <a href="#a5b0156044142673183205154f9e63ddc">More...</a><br /></td></tr>
+<tr class="separator:a5b0156044142673183205154f9e63ddc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a967afc3041b28c8ceedcef8d25c26b9b"><td class="memItemLeft" align="right" valign="top">varchar []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utilities_8sql__in.html#a967afc3041b28c8ceedcef8d25c26b9b">_string_to_array</a> (varchar s)</td></tr>
+<tr class="memdesc:a967afc3041b28c8ceedcef8d25c26b9b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Takes a string of comma separated values and puts it into an array.  <a href="#a967afc3041b28c8ceedcef8d25c26b9b">More...</a><br /></td></tr>
+<tr class="separator:a967afc3041b28c8ceedcef8d25c26b9b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abc867482053e6692047d051b679953a5"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utilities_8sql__in.html#abc867482053e6692047d051b679953a5">bool_to_text</a> (boolean)</td></tr>
+<tr class="memdesc:abc867482053e6692047d051b679953a5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Cast boolean into text.  <a href="#abc867482053e6692047d051b679953a5">More...</a><br /></td></tr>
+<tr class="separator:abc867482053e6692047d051b679953a5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abdd2768e61b034d04c934a981259bbfd"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utilities_8sql__in.html#abdd2768e61b034d04c934a981259bbfd">__to_char</a> (anyelement val)</td></tr>
+<tr class="memdesc:abdd2768e61b034d04c934a981259bbfd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Cast any value to text.  <a href="#abdd2768e61b034d04c934a981259bbfd">More...</a><br /></td></tr>
+<tr class="separator:abdd2768e61b034d04c934a981259bbfd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2dc21ec6de26adef2cf1699ed8dab5aa"><td class="memItemLeft" align="right" valign="top">set&lt; _grp_state_type &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utilities_8sql__in.html#a2dc21ec6de26adef2cf1699ed8dab5aa">_gen_state</a> (text[] grp_key, integer[] iteration, float8[] state)</td></tr>
+<tr class="separator:a2dc21ec6de26adef2cf1699ed8dab5aa"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a378fd0afa1245520f2270e602ed9e6b6"><td class="memItemLeft" align="right" valign="top">float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utilities_8sql__in.html#a378fd0afa1245520f2270e602ed9e6b6">_final_mode</a> (float8[])</td></tr>
+<tr class="separator:a378fd0afa1245520f2270e602ed9e6b6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac25ef90f8a8e2f9b2244a57d92086c91"><td class="memItemLeft" align="right" valign="top">aggregate float8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utilities_8sql__in.html#ac25ef90f8a8e2f9b2244a57d92086c91">mode</a> (float8)</td></tr>
+<tr class="separator:ac25ef90f8a8e2f9b2244a57d92086c91"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a244f77f87f2612800b1683033a21dcca"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utilities_8sql__in.html#a244f77f87f2612800b1683033a21dcca">dropcols</a> (varchar source_table, varchar out_table, varchar cols_to_drop)</td></tr>
+<tr class="memdesc:a244f77f87f2612800b1683033a21dcca"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates a new table with a subset of columns dropped from another source table.  <a href="#a244f77f87f2612800b1683033a21dcca">More...</a><br /></td></tr>
+<tr class="separator:a244f77f87f2612800b1683033a21dcca"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af4627d77d237aeadaa4b43ff168ae322"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utilities_8sql__in.html#af4627d77d237aeadaa4b43ff168ae322">is_pg_major_version_less_than</a> (integer compare_version)</td></tr>
+<tr class="separator:af4627d77d237aeadaa4b43ff168ae322"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad1c36cb57cfddb39b69fd4d46e0c7dcb"><td class="memItemLeft" align="right" valign="top">integer&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utilities_8sql__in.html#ad1c36cb57cfddb39b69fd4d46e0c7dcb">trap_error</a> (text stmt)</td></tr>
+<tr class="separator:ad1c36cb57cfddb39b69fd4d46e0c7dcb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4df02278e7bba3e42a6eab87597e4ea8"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utilities_8sql__in.html#a4df02278e7bba3e42a6eab87597e4ea8">is_ver_greater_than_gp_640_or_pg_11</a> ()</td></tr>
+<tr class="separator:a4df02278e7bba3e42a6eab87597e4ea8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab0c056b9f6ec748b24352261276775ba"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utilities_8sql__in.html#ab0c056b9f6ec748b24352261276775ba">assert_guc_value</a> (text guc_name, text expected_guc_value)</td></tr>
+<tr class="separator:ab0c056b9f6ec748b24352261276775ba"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaaf5ac0d3f6416b4bb093fd17c5c2a14"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utilities_8sql__in.html#aaaf5ac0d3f6416b4bb093fd17c5c2a14">is_table_unlogged</a> (text tbl_name)</td></tr>
+<tr class="separator:aaaf5ac0d3f6416b4bb093fd17c5c2a14"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><dl class="section see"><dt>See also</dt><dd>For a brief overview of utility functions, see the module description <a class="el" href="group__grp__utilities.html">Database Functions</a>. </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="a7086f5e79c0f53a849759227759d16d7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7086f5e79c0f53a849759227759d16d7">&#9670;&nbsp;</a></span>__internal_get_col_names_except_dep_variable()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar __internal_get_col_names_except_dep_variable </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>dependent_varname</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="abdd2768e61b034d04c934a981259bbfd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abdd2768e61b034d04c934a981259bbfd">&#9670;&nbsp;</a></span>__to_char()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text __to_char </td>
+          <td>(</td>
+          <td class="paramtype">anyelement&#160;</td>
+          <td class="paramname"><em>val</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">val</td><td>A value with any specific type.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The text format string for the value.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>Greenplum doesn't support bit/boolean to text casting. </dd></dl>
+
+</div>
+</div>
+<a id="a5b0156044142673183205154f9e63ddc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5b0156044142673183205154f9e63ddc">&#9670;&nbsp;</a></span>__unique_string()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar __unique_string </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a378fd0afa1245520f2270e602ed9e6b6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a378fd0afa1245520f2270e602ed9e6b6">&#9670;&nbsp;</a></span>_final_mode()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 _final_mode </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[]</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a2dc21ec6de26adef2cf1699ed8dab5aa"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2dc21ec6de26adef2cf1699ed8dab5aa">&#9670;&nbsp;</a></span>_gen_state()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">set&lt;_grp_state_type&gt; _gen_state </td>
+          <td>(</td>
+          <td class="paramtype">text []&#160;</td>
+          <td class="paramname"><em>grp_key</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer []&#160;</td>
+          <td class="paramname"><em>iteration</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a967afc3041b28c8ceedcef8d25c26b9b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a967afc3041b28c8ceedcef8d25c26b9b">&#9670;&nbsp;</a></span>_string_to_array()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar [] _string_to_array </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>s</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a76cfdbed8a6782f37f50710d855434bd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a76cfdbed8a6782f37f50710d855434bd">&#9670;&nbsp;</a></span>assert()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void assert </td>
+          <td>(</td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>condition</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>msg</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab0c056b9f6ec748b24352261276775ba"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab0c056b9f6ec748b24352261276775ba">&#9670;&nbsp;</a></span>assert_guc_value()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void assert_guc_value </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>guc_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>expected_guc_value</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="abc867482053e6692047d051b679953a5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abc867482053e6692047d051b679953a5">&#9670;&nbsp;</a></span>bool_to_text()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text bool_to_text </td>
+          <td>(</td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a60c4765ce8dc639cbb0ad4c389f5f1ad"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a60c4765ce8dc639cbb0ad4c389f5f1ad">&#9670;&nbsp;</a></span>bytea8in()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea8 bytea8in </td>
+          <td>(</td>
+          <td class="paramtype">cstring&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="adff923d42d4bdb2b631d6cafd5f37a43"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adff923d42d4bdb2b631d6cafd5f37a43">&#9670;&nbsp;</a></span>bytea8out()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">cstring bytea8out </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a244a7ff30f2788a6f4816417982eb13b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a244a7ff30f2788a6f4816417982eb13b">&#9670;&nbsp;</a></span>bytea8recv()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea8 bytea8recv </td>
+          <td>(</td>
+          <td class="paramtype">internal&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aeb90c740e8e6b67aa60a11c430fa9050"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aeb90c740e8e6b67aa60a11c430fa9050">&#9670;&nbsp;</a></span>bytea8send()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bytea bytea8send </td>
+          <td>(</td>
+          <td class="paramtype">bytea8&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac1f509bd94c6309b59eb4d479fb2a470"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac1f509bd94c6309b59eb4d479fb2a470">&#9670;&nbsp;</a></span>check_if_col_exists()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">boolean check_if_col_exists </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>column_name</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">source_table</td><td>Source table </td></tr>
+    <tr><td class="paramname">column_name</td><td>Column name in the table </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><code>TRUE</code> if it exists and FALSE if not </dd></dl>
+
+</div>
+</div>
+<a id="aa90ffaebb43a5cbcb5c48281cbadd3b0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa90ffaebb43a5cbcb5c48281cbadd3b0">&#9670;&nbsp;</a></span>check_if_raises_error()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">boolean check_if_raises_error </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>sql</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">sql</td><td>The SQL statement </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><code>TRUE</code> if an exception is raised while executing <code>sql</code>, <code>FALSE</code> otherwise. </dd></dl>
+
+</div>
+</div>
+<a id="aab5ea2cd6201e38e24ca62b0fb91fb7a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aab5ea2cd6201e38e24ca62b0fb91fb7a">&#9670;&nbsp;</a></span>cleanup_madlib_temp_tables()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cleanup_madlib_temp_tables </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>target_schema</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">target_schema</td><td>TEXT. The schema that takes affect. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a156eb9d1c814592e59600980977a64eb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a156eb9d1c814592e59600980977a64eb">&#9670;&nbsp;</a></span>cleanup_madlib_temp_tables_script()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text cleanup_madlib_temp_tables_script </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>target_schema</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a0a26602860109f870a82badff95c2fc3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0a26602860109f870a82badff95c2fc3">&#9670;&nbsp;</a></span>cleanup_madlib_temp_views()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void cleanup_madlib_temp_views </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>target_schema</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a56501b6f9fabe65d7a6a6beb70a0e000"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a56501b6f9fabe65d7a6a6beb70a0e000">&#9670;&nbsp;</a></span>create_schema_pg_temp()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void create_schema_pg_temp </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a244f77f87f2612800b1683033a21dcca"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a244f77f87f2612800b1683033a21dcca">&#9670;&nbsp;</a></span>dropcols()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dropcols </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>cols_to_drop</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">source_table</td><td>Name of the table containing the source data. </td></tr>
+    <tr><td class="paramname">out_table</td><td>Name of the generated table containing the output. If a table with the same name already exists, an error will be returned. </td></tr>
+    <tr><td class="paramname">cols_to_drop</td><td>Comma-separated string of column names from the source table to drop. An error is returned if the output table does not contain any columns or if a requested column is not present in the source table. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="af4627d77d237aeadaa4b43ff168ae322"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af4627d77d237aeadaa4b43ff168ae322">&#9670;&nbsp;</a></span>is_pg_major_version_less_than()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">boolean is_pg_major_version_less_than </td>
+          <td>(</td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>compare_version</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aaaf5ac0d3f6416b4bb093fd17c5c2a14"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aaaf5ac0d3f6416b4bb093fd17c5c2a14">&#9670;&nbsp;</a></span>is_table_unlogged()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">boolean is_table_unlogged </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>tbl_name</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a4df02278e7bba3e42a6eab87597e4ea8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4df02278e7bba3e42a6eab87597e4ea8">&#9670;&nbsp;</a></span>is_ver_greater_than_gp_640_or_pg_11()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">boolean is_ver_greater_than_gp_640_or_pg_11 </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a48bed63cab78a5446fa4c122eaae3a40"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a48bed63cab78a5446fa4c122eaae3a40">&#9670;&nbsp;</a></span>isnan()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">boolean isnan </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>number</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>This function exists for portability. Some DBMSs like PostgreSQL treat floating-point numbers as fully ordered &ndash; contrary to IEEE 754. (See, e.g., the <a href="http://www.postgresql.org/docs/current/static/datatype-numeric.html#DATATYPE-FLOAT">PostgreSQL documentation</a>. For portability, MADlib code should not make use of such "features" directly, but only use <a class="el" href="utilities_8sql__in.html#a48bed63cab78a5446fa4c122eaae3a40" title="Check if a floating-point number is NaN (not a number) ">isnan()</a> instead.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">number</td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><code>TRUE</code> if <code>number</code> is <code>NaN</code>, <code>FALSE</code> otherwise </dd></dl>
+
+</div>
+</div>
+<a id="ac25ef90f8a8e2f9b2244a57d92086c91"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac25ef90f8a8e2f9b2244a57d92086c91">&#9670;&nbsp;</a></span>mode()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 mode </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab194d6a1222672c314ea39b78aad8fd0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab194d6a1222672c314ea39b78aad8fd0">&#9670;&nbsp;</a></span>noop()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void noop </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>The only use of this function is as an optimization fence when used in the SELECT list of a query. See, e.g., <a href="http://archives.postgresql.org/pgsql-sql/2012-07/msg00030.php">http://archives.postgresql.org/pgsql-sql/2012-07/msg00030.php</a> </p>
+
+</div>
+</div>
+<a id="a4d49e00b4dd6059f61ffb9fdc0a696f7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4d49e00b4dd6059f61ffb9fdc0a696f7">&#9670;&nbsp;</a></span>relative_error() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 relative_error </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>approx</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname"><em>value</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a26a54368fbf2460323cacf95db76fd2f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a26a54368fbf2460323cacf95db76fd2f">&#9670;&nbsp;</a></span>relative_error() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 relative_error </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>approx</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>value</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ad1c36cb57cfddb39b69fd4d46e0c7dcb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad1c36cb57cfddb39b69fd4d46e0c7dcb">&#9670;&nbsp;</a></span>trap_error()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">integer trap_error </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>stmt</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a9ce7ffa76acc8a0638e9bc48be99f36a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9ce7ffa76acc8a0638e9bc48be99f36a">&#9670;&nbsp;</a></span>version()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text version </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="section return"><dt>Returns</dt><dd>Summary of MADlib build information, consisting of MADlib version, git revision, cmake configuration time, build type, build system, C compiler, and C++ compiler </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_8d53e1c0026e7e34b4cd68f8b91426d6.html">utilities</a></li><li class="navelem"><a class="el" href="utilities_8sql__in.html">utilities.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/utils__regularization_8sql__in.html b/docs/rc/utils__regularization_8sql__in.html
new file mode 100644
index 0000000..c52cb3e
--- /dev/null
+++ b/docs/rc/utils__regularization_8sql__in.html
@@ -0,0 +1,358 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: utils_regularization.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('utils__regularization_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">utils_regularization.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a5cfe62b0f14b537d50ebe122eacc5c77"><td class="memItemLeft" align="right" valign="top">__utils_scales&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils__regularization_8sql__in.html#a5cfe62b0f14b537d50ebe122eacc5c77">__utils_var_scales_result</a> (float8[] in_state)</td></tr>
+<tr class="separator:a5cfe62b0f14b537d50ebe122eacc5c77"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a930148a43d97714bf76988122b4a2cd6"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils__regularization_8sql__in.html#a930148a43d97714bf76988122b4a2cd6">__utils_var_scales_transition</a> (float8[] state, float8[] ind_var, integer dimension)</td></tr>
+<tr class="separator:a930148a43d97714bf76988122b4a2cd6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abfaba5b835e943b6a79eb785a6901536"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils__regularization_8sql__in.html#abfaba5b835e943b6a79eb785a6901536">__utils_var_scales_merge</a> (float8[] state1, float8[] state2)</td></tr>
+<tr class="separator:abfaba5b835e943b6a79eb785a6901536"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a39dba68ff8a3da3a83c646902ca3949d"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils__regularization_8sql__in.html#a39dba68ff8a3da3a83c646902ca3949d">__utils_var_scales_final</a> (float8[] state)</td></tr>
+<tr class="separator:a39dba68ff8a3da3a83c646902ca3949d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abeb442ad31298aa56b5ca8d2c138a5e1"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils__regularization_8sql__in.html#abeb442ad31298aa56b5ca8d2c138a5e1">__utils_var_scales_non_zero_std_final</a> (float8[] state)</td></tr>
+<tr class="separator:abeb442ad31298aa56b5ca8d2c138a5e1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaae98ce639cd126a308ed4604ac364a9"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils__regularization_8sql__in.html#aaae98ce639cd126a308ed4604ac364a9">utils_var_scales</a> (float8[], integer)</td></tr>
+<tr class="separator:aaae98ce639cd126a308ed4604ac364a9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad7a5676b50f9836ecb819992a424d60e"><td class="memItemLeft" align="right" valign="top">aggregate float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils__regularization_8sql__in.html#ad7a5676b50f9836ecb819992a424d60e">utils_var_scales_non_zero_std</a> (float8[], integer)</td></tr>
+<tr class="separator:ad7a5676b50f9836ecb819992a424d60e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3dc216dff38a6d033020af2f7440e66d"><td class="memItemLeft" align="right" valign="top">float8 []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils__regularization_8sql__in.html#a3dc216dff38a6d033020af2f7440e66d">utils_normalize_data</a> (float8[] x, float8[] <a class="el" href="svec__util_8sql__in.html#a546b947319c9f48237120a31929bdfd9">mean</a>, float8[] std)</td></tr>
+<tr class="separator:a3dc216dff38a6d033020af2f7440e66d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a39dba68ff8a3da3a83c646902ca3949d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a39dba68ff8a3da3a83c646902ca3949d">&#9670;&nbsp;</a></span>__utils_var_scales_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __utils_var_scales_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="abfaba5b835e943b6a79eb785a6901536"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abfaba5b835e943b6a79eb785a6901536">&#9670;&nbsp;</a></span>__utils_var_scales_merge()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __utils_var_scales_merge </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="abeb442ad31298aa56b5ca8d2c138a5e1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abeb442ad31298aa56b5ca8d2c138a5e1">&#9670;&nbsp;</a></span>__utils_var_scales_non_zero_std_final()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __utils_var_scales_non_zero_std_final </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5cfe62b0f14b537d50ebe122eacc5c77"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5cfe62b0f14b537d50ebe122eacc5c77">&#9670;&nbsp;</a></span>__utils_var_scales_result()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">__utils_scales __utils_var_scales_result </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>in_state</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a930148a43d97714bf76988122b4a2cd6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a930148a43d97714bf76988122b4a2cd6">&#9670;&nbsp;</a></span>__utils_var_scales_transition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] __utils_var_scales_transition </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>state</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>ind_var</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname"><em>dimension</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a3dc216dff38a6d033020af2f7440e66d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3dc216dff38a6d033020af2f7440e66d">&#9670;&nbsp;</a></span>utils_normalize_data()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float8 [] utils_normalize_data </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>mean</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>std</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aaae98ce639cd126a308ed4604ac364a9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aaae98ce639cd126a308ed4604ac364a9">&#9670;&nbsp;</a></span>utils_var_scales()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] utils_var_scales </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ad7a5676b50f9836ecb819992a424d60e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad7a5676b50f9836ecb819992a424d60e">&#9670;&nbsp;</a></span>utils_var_scales_non_zero_std()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">aggregate float8 [] utils_var_scales_non_zero_std </td>
+          <td>(</td>
+          <td class="paramtype">float8&#160;</td>
+          <td class="paramname">[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">integer&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_93c42bb4df0f3e1302223b6dfd48c81e.html">convex</a></li><li class="navelem"><a class="el" href="utils__regularization_8sql__in.html">utils_regularization.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/vec2cols_8sql__in.html b/docs/rc/vec2cols_8sql__in.html
new file mode 100644
index 0000000..6df083a
--- /dev/null
+++ b/docs/rc/vec2cols_8sql__in.html
@@ -0,0 +1,301 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: vec2cols.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('vec2cols_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">vec2cols.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a16ccd7c8ea4219f09c21669eec2cfa79"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vec2cols_8sql__in.html#a16ccd7c8ea4219f09c21669eec2cfa79">vec2cols</a> (varchar source_table, varchar output_table, varchar vector_col, text[] feature_names, varchar cols_to_output)</td></tr>
+<tr class="separator:a16ccd7c8ea4219f09c21669eec2cfa79"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad5301b7891fce8b67694bff87ddeff8e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vec2cols_8sql__in.html#ad5301b7891fce8b67694bff87ddeff8e">vec2cols</a> (varchar source_table, varchar output_table, varchar vector_col, text[] feature_names)</td></tr>
+<tr class="separator:ad5301b7891fce8b67694bff87ddeff8e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afc12dfff08f41b69bed5c6e58077740e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vec2cols_8sql__in.html#afc12dfff08f41b69bed5c6e58077740e">vec2cols</a> (varchar source_table, varchar output_table, varchar vector_col)</td></tr>
+<tr class="separator:afc12dfff08f41b69bed5c6e58077740e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adee606a1ca337cb570f3201d73ddadd2"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vec2cols_8sql__in.html#adee606a1ca337cb570f3201d73ddadd2">vec2cols</a> (text message)</td></tr>
+<tr class="separator:adee606a1ca337cb570f3201d73ddadd2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8067109fe47944b49167477577d02be9"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vec2cols_8sql__in.html#a8067109fe47944b49167477577d02be9">vec2cols</a> ()</td></tr>
+<tr class="separator:a8067109fe47944b49167477577d02be9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a16ccd7c8ea4219f09c21669eec2cfa79"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a16ccd7c8ea4219f09c21669eec2cfa79">&#9670;&nbsp;</a></span>vec2cols() <span class="overload">[1/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void vec2cols </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>vector_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text []&#160;</td>
+          <td class="paramname"><em>feature_names</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>cols_to_output</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ad5301b7891fce8b67694bff87ddeff8e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad5301b7891fce8b67694bff87ddeff8e">&#9670;&nbsp;</a></span>vec2cols() <span class="overload">[2/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void vec2cols </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>vector_col</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text []&#160;</td>
+          <td class="paramname"><em>feature_names</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="afc12dfff08f41b69bed5c6e58077740e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afc12dfff08f41b69bed5c6e58077740e">&#9670;&nbsp;</a></span>vec2cols() <span class="overload">[3/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void vec2cols </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>source_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>output_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>vector_col</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="adee606a1ca337cb570f3201d73ddadd2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adee606a1ca337cb570f3201d73ddadd2">&#9670;&nbsp;</a></span>vec2cols() <span class="overload">[4/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text vec2cols </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8067109fe47944b49167477577d02be9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8067109fe47944b49167477577d02be9">&#9670;&nbsp;</a></span>vec2cols() <span class="overload">[5/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text vec2cols </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_8d53e1c0026e7e34b4cd68f8b91426d6.html">utilities</a></li><li class="navelem"><a class="el" href="vec2cols_8sql__in.html">vec2cols.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/viterbi_8sql__in.html b/docs/rc/viterbi_8sql__in.html
new file mode 100644
index 0000000..03c06e7
--- /dev/null
+++ b/docs/rc/viterbi_8sql__in.html
@@ -0,0 +1,298 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: viterbi.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('viterbi_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">viterbi.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>concatenate a set of input values into arrays to feed into viterbi c function and create a human readable view of the output  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a1471ce51491126b282ed8f9a2ac38b25"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="viterbi_8sql__in.html#a1471ce51491126b282ed8f9a2ac38b25">vcrf_top1_table</a> (text segment_tbl, text label_tbl, text resulttbl_raw, text result_tbl)</td></tr>
+<tr class="memdesc:a1471ce51491126b282ed8f9a2ac38b25"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function creates the specified result_tbl containing top1 labels for the sequence.  <a href="#a1471ce51491126b282ed8f9a2ac38b25">More...</a><br /></td></tr>
+<tr class="separator:a1471ce51491126b282ed8f9a2ac38b25"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a77b62d01f74a7bd206f6954c82638ba7"><td class="memItemLeft" align="right" valign="top">int []&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="viterbi_8sql__in.html#a77b62d01f74a7bd206f6954c82638ba7">vcrf_top1_label</a> (float8[] marray, float8[] rarray, int nlabel)</td></tr>
+<tr class="memdesc:a77b62d01f74a7bd206f6954c82638ba7"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function implements the Viterbi algorithm which takes the sentence to be label as input and return the top1 labeling for that sentence.  <a href="#a77b62d01f74a7bd206f6954c82638ba7">More...</a><br /></td></tr>
+<tr class="separator:a77b62d01f74a7bd206f6954c82638ba7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a05e8e687442b8f8618738d34010ef68d"><td class="memItemLeft" align="right" valign="top">text&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="viterbi_8sql__in.html#a05e8e687442b8f8618738d34010ef68d">vcrf_label</a> (text segment_tbl, text factor_mtbl, text factor_rtbl, text label_tbl, text result_tbl)</td></tr>
+<tr class="memdesc:a05e8e687442b8f8618738d34010ef68d"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function prepares the inputs for the c function 'vcrf_top1_label' and invoke the c function.  <a href="#a05e8e687442b8f8618738d34010ef68d">More...</a><br /></td></tr>
+<tr class="separator:a05e8e687442b8f8618738d34010ef68d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><dl class="section date"><dt>Date</dt><dd>February 2012 </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="a05e8e687442b8f8618738d34010ef68d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a05e8e687442b8f8618738d34010ef68d">&#9670;&nbsp;</a></span>vcrf_label()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text vcrf_label </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>segment_tbl</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>factor_mtbl</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>factor_rtbl</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>label_tbl</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>result_tbl</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">segment_tbl</td><td>Name of table containing all the testing sentences. </td></tr>
+    <tr><td class="paramname">factor_mtbl</td><td>Name of table containing all the m factors. </td></tr>
+    <tr><td class="paramname">factor_rtbl</td><td>Name of table containing all the r factors. </td></tr>
+    <tr><td class="paramname">label_tbl</td><td>Name of table containing all the labels in the label space. </td></tr>
+    <tr><td class="paramname">result_tbl</td><td>Name of table to store the output </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the top1 label sequence, the last two elements in the array is used to calculate the top1 probability </dd></dl>
+
+</div>
+</div>
+<a id="a77b62d01f74a7bd206f6954c82638ba7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a77b62d01f74a7bd206f6954c82638ba7">&#9670;&nbsp;</a></span>vcrf_top1_label()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int [] vcrf_top1_label </td>
+          <td>(</td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>marray</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float8 []&#160;</td>
+          <td class="paramname"><em>rarray</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>nlabel</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">marray</td><td>Name of arrays containing m factors </td></tr>
+    <tr><td class="paramname">rarray</td><td>Name of arrays containing r factors </td></tr>
+    <tr><td class="paramname">nlabel</td><td>Total number of labels in the label space </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the top1 label sequence, the last two elements in the array is used to calculate the top1 probability </dd></dl>
+
+</div>
+</div>
+<a id="a1471ce51491126b282ed8f9a2ac38b25"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1471ce51491126b282ed8f9a2ac38b25">&#9670;&nbsp;</a></span>vcrf_top1_table()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">text vcrf_top1_table </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>segment_tbl</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>label_tbl</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>resulttbl_raw</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>result_tbl</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">segment_tbl</td><td>Name of table containing all the testing sentences. </td></tr>
+    <tr><td class="paramname">label_tbl</td><td>Name of table containing all the labels in the label space. </td></tr>
+    <tr><td class="paramname">result_tbl</td><td>Name of table storing the best label sequence and the conditional probability. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_70e9abe17564e15776adcab8550c7667.html">crf</a></li><li class="navelem"><a class="el" href="viterbi_8sql__in.html">viterbi.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>
diff --git a/docs/rc/wcc_8sql__in.html b/docs/rc/wcc_8sql__in.html
new file mode 100644
index 0000000..b7826e5
--- /dev/null
+++ b/docs/rc/wcc_8sql__in.html
@@ -0,0 +1,439 @@
+<!-- HTML header for doxygen 1.8.4-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/>
+<title>MADlib: wcc.sql_in File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+  $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<!-- hack in the navigation tree -->
+<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="madlib_extra.css" rel="stylesheet" type="text/css"/>
+<!-- google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+  ga('create', 'UA-45382226-1', 'madlib.apache.org');
+  ga('send', 'pageview');
+</script>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td>
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">
+   <span id="projectnumber">1.17.0</span>
+   </div>
+   <div id="projectbrief">User Documentation for Apache MADlib</div>
+  </td>
+   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('wcc_8sql__in.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">wcc.sql_in File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ae2d66cd44d34032a9dc2490a16a326cf"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="wcc_8sql__in.html#ae2d66cd44d34032a9dc2490a16a326cf">weakly_connected_components</a> (text vertex_table, text vertex_id, text edge_table, text edge_args, text out_table, text grouping_cols)</td></tr>
+<tr class="separator:ae2d66cd44d34032a9dc2490a16a326cf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab7053bc632d2787710670c7bfca78342"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="wcc_8sql__in.html#ab7053bc632d2787710670c7bfca78342">weakly_connected_components</a> (text vertex_table, text vertex_id, text edge_table, text edge_args, text out_table)</td></tr>
+<tr class="separator:ab7053bc632d2787710670c7bfca78342"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8d2a296a69d390d6a342ee4654c29295"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="wcc_8sql__in.html#a8d2a296a69d390d6a342ee4654c29295">graph_wcc_largest_cpt</a> (text wcc_table, text largest_cpt_table)</td></tr>
+<tr class="separator:a8d2a296a69d390d6a342ee4654c29295"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adbe3bf8145a298a8ab1ee460e19efa67"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="wcc_8sql__in.html#adbe3bf8145a298a8ab1ee460e19efa67">graph_wcc_histogram</a> (text wcc_table, text histogram_table)</td></tr>
+<tr class="separator:adbe3bf8145a298a8ab1ee460e19efa67"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aabd0447cf6910a077cf90a1a4cce52c8"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="wcc_8sql__in.html#aabd0447cf6910a077cf90a1a4cce52c8">graph_wcc_vertex_check</a> (text wcc_table, text vertex_pair, text pair_table)</td></tr>
+<tr class="separator:aabd0447cf6910a077cf90a1a4cce52c8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa7e564797133e5c08a9b95f41ef3cae6"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="wcc_8sql__in.html#aa7e564797133e5c08a9b95f41ef3cae6">graph_wcc_reachable_vertices</a> (text wcc_table, text src, text reachable_vertices_table)</td></tr>
+<tr class="separator:aa7e564797133e5c08a9b95f41ef3cae6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1d15b21a3c05f5d14bf436e8b2e03729"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="wcc_8sql__in.html#a1d15b21a3c05f5d14bf436e8b2e03729">graph_wcc_num_cpts</a> (text wcc_table, text count_table)</td></tr>
+<tr class="separator:a1d15b21a3c05f5d14bf436e8b2e03729"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a608342c0de3500047eefa84f4a9b641f"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="wcc_8sql__in.html#a608342c0de3500047eefa84f4a9b641f">weakly_connected_components</a> (varchar message)</td></tr>
+<tr class="separator:a608342c0de3500047eefa84f4a9b641f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7332b4233d558fdbd65f8b1f4c229536"><td class="memItemLeft" align="right" valign="top">varchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="wcc_8sql__in.html#a7332b4233d558fdbd65f8b1f4c229536">weakly_connected_components</a> ()</td></tr>
+<tr class="separator:a7332b4233d558fdbd65f8b1f4c229536"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="adbe3bf8145a298a8ab1ee460e19efa67"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adbe3bf8145a298a8ab1ee460e19efa67">&#9670;&nbsp;</a></span>graph_wcc_histogram()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void graph_wcc_histogram </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>wcc_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>histogram_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8d2a296a69d390d6a342ee4654c29295"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8d2a296a69d390d6a342ee4654c29295">&#9670;&nbsp;</a></span>graph_wcc_largest_cpt()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void graph_wcc_largest_cpt </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>wcc_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>largest_cpt_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1d15b21a3c05f5d14bf436e8b2e03729"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1d15b21a3c05f5d14bf436e8b2e03729">&#9670;&nbsp;</a></span>graph_wcc_num_cpts()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void graph_wcc_num_cpts </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>wcc_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>count_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa7e564797133e5c08a9b95f41ef3cae6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa7e564797133e5c08a9b95f41ef3cae6">&#9670;&nbsp;</a></span>graph_wcc_reachable_vertices()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void graph_wcc_reachable_vertices </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>wcc_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>src</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>reachable_vertices_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aabd0447cf6910a077cf90a1a4cce52c8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aabd0447cf6910a077cf90a1a4cce52c8">&#9670;&nbsp;</a></span>graph_wcc_vertex_check()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void graph_wcc_vertex_check </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>wcc_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>vertex_pair</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>pair_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae2d66cd44d34032a9dc2490a16a326cf"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae2d66cd44d34032a9dc2490a16a326cf">&#9670;&nbsp;</a></span>weakly_connected_components() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void weakly_connected_components </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>vertex_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>vertex_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>edge_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>edge_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>grouping_cols</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab7053bc632d2787710670c7bfca78342"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab7053bc632d2787710670c7bfca78342">&#9670;&nbsp;</a></span>weakly_connected_components() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void weakly_connected_components </td>
+          <td>(</td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>vertex_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>vertex_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>edge_table</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>edge_args</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">text&#160;</td>
+          <td class="paramname"><em>out_table</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a608342c0de3500047eefa84f4a9b641f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a608342c0de3500047eefa84f4a9b641f">&#9670;&nbsp;</a></span>weakly_connected_components() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar weakly_connected_components </td>
+          <td>(</td>
+          <td class="paramtype">varchar&#160;</td>
+          <td class="paramname"><em>message</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7332b4233d558fdbd65f8b1f4c229536"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7332b4233d558fdbd65f8b1f4c229536">&#9670;&nbsp;</a></span>weakly_connected_components() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">varchar weakly_connected_components </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_1c3de670490e30b2adf792227ef51e32.html">graph</a></li><li class="navelem"><a class="el" href="wcc_8sql__in.html">wcc.sql_in</a></li>
+    <li class="footer">Generated on Mon Apr 6 2020 21:46:58 for MADlib by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+  </ul>
+</div>
+</body>
+</html>